2017-02-24 1 views
0

Bei der Entwicklung color-extractor bin ich mit Imagick über eine Eigenart gestolpert. Ich habe das Problem mit einem einzelnen schwarzen transparenten Pixelbild bestätigt. Unter Gimp wird dieses Schwarz als 75% undurchsichtig gezeigt, also denke ich, dass seine Alpha/Transparenz 25% ist.Imagick ALPHA vs OPACITY

Wenn ich getColorValue(\Imagick::COLOR_OPACITY) laufen bekomme ich etwa 0,25, während ich etwa 0,75 mit getColorValue(\Imagick::COLOR_ALPHA) so das genaue Gegenteil von dem, was ich erwartet habe.

Ist das ein Problem mit Imagick (ich verwende php-imagick 3.4.3-1 und ImageMagick 6.9.7-9) oder invertiere ich Konzepte der Opazität und Transparenz?

Antwort

0

Nicht eine Eigenart, aber durch Design. Zum größten Teil, Opazität & Alpha teilen den gleichen Datenkanal, und der Kontext des Bildformats/Coder implementiert den richtigen Wert. Und ich betone Kontext ist der Schlüssel.

Ist das ein Problem mit Imagick [..] oder invertiere ich Konzepte der Opazität und Transparenz?

Schauen wir uns an, wie die beiden implementiert sind.

PixelGetOpacityQuantum

return(ClampToQuantum(wand->pixel.opacity)); 

PixelGetAlphaQuantum

return(QuantumRange-ClampToQuantum(wand->pixel.opacity)); 

Wie Sie sehen können, geben beide die gleichen zwischen 0 und Quantum Grenze gebunden Daten.

Die PixelGetOpacityQuantum gibt den genauen Datenwert zurück, aber PixelGetAlphaQuantum passt/invertiert, was wir in gängigen Farbformaten/Spezifikationen erwarten würden. Es ist alles Kontext!

+0

Ich weiß Opazität und Transparenz sind von einem eindeutigen Wert abgeleitet, aber es scheint Imagick gibt Deckkraft statt Transparenz und umgekehrt, das ist mein Problem. – MatTheCat

+0

In dieser Hinsicht unterscheidet sich ImageMagick Version 7.x.x von ImageMagick 6.x.x. "Wir unterstützen Alpha jetzt, zuvor Opazität" nach http://imagemagick.org/script/porting.php –

+0

Ich denke, das könnte meine Frage beantworten, aber ich verstehe nicht wirklich die Bedeutung des Satzes. – MatTheCat