ImageCopyReResampliert in PHP - Premultisibled Alpha-Problem
-
12-11-2019 - |
Frage
Ich habe ein Problem mit imagecopyresArted für Puffer, die Alpha-Werte verwenden. Anscheinend führt der Algorithmus vor, der die Pixel-Alpha-Werte vor dem Filtern darstellt, ergibt sich in schwarzen Grenzen.
Schritte zur Reproduzierung:
-
Nehmen Sie ein Bild, das im RGB-Teil völlig weiß ist, und das hat einen (antialiased !!) weißen Kreis (mit einem Kreis, nicht mit einem Quadrat!) auf schwarzem Hintergrund im Alpha-Teil (so das Das Alpha-Teil hat meistens total weiße und total schwarze Pixel sowie einige Gradient-Pixel an den Grenzen des Kreises aufgrund von Antialiasing - das bedeutet, dass das Eingabebild nicht premipliziert ist - es ist gerade / nicht auf, da der RGB-Teil des Bildes ist völlig weiß).
-
skaledown das Bild um die Hälfte mit einem imagecopyresampled
-
komponiert das Ergebnis über ein völlig weißes Bild
was ich erwarten würde: völlig weißes Bild
was ich bekomme: Eine graue Grenze ist der Umriss des Kreises
Ich bin mir ziemlich sicher, dass dies auf Premultiplized-Alpha innerhalb des Scaledown-Algorithmus zurückzuführen ist (der Algorithmus multipliziert den Pixel-Alpha-Wert mit seinem RGB-Wert, um den neuen RGB-Wert zu berechnen - so werden weiße Pixel grau)
Kennt jemand dafür eine Arbeitshaus?
Lösung
Ich würde vorschlagen, Bild magick für PHP auszuprobieren.
http://www.php.net/manual/de/imagick.resizeImage.php
http://www.php.net/manual/de/imagick.sclaimage.php
In meiner Erfahrung sind alle Probleme in der Bilde in PHP, einfach weg.