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?

Foi útil?

Solução

Eu sugiro tentar a imagem da imagem para php.

http://www.php.net/manual/en/imagick.resizeimage.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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top