Imagecroped em PHP - Problema alfa premultiplicado
-
12-11-2019 - |
Pergunta
Eu tenho um problema com ImageCopyResampled para buffers que usam valores alfa. Aparentemente, o algoritmo prémulta os valores de alfa pixels antes de filtragem, isso resulta em objetos Black Borders Arround.
Etapas para reproduzir:
-
tome uma imagem completamente branca na parte RGB e que tem um círculo branco (antialiased !!) (vá com um círculo, não com um quadrado!) No fundo preto na parte alfa (então o A parte alfa terá principalmente pixels totalmente brancos e totalmente pretos, bem como alguns pixels gradientes nas fronteiras do círculo devido ao antialiasing - isso significa que a imagem de entrada não é premultiplicada - é reta / imactada, porque a parte RGB da imagem é completamente branco).
-
escalado a imagem pela metade usando imagecopiresampled
-
Componha o resultado sobre uma imagem completamente branca
O que eu esperaria: Imagem completamente branca
O que eu recebo: uma fronteira acinzentada arround o esboço do círculo
Tenho certeza que isso é devido ao alfa premultiplicado dentro do algoritmo escalado (o algoritmo multiplica o valor alfa pixels com seu valor RGB para calcular o novo valor RGB - assim os pixels brancos ficarão cinza)
Alguém sabe uma mesa para isso?
Solução
Eu sugiro tentar a imagem da imagem para php.
http://www.php.net/manual/en/imagick.dimensionamento.php
Na minha experiência, todas as dificuldades relativas à imagem no PHP acabam de ir embora.