Otimizar PNG ao redimensionar com GD / PHP - Como determinar a paleta de cores?

Eu tive problemas para redimensionar um PNG e manter arquivos pequenos.Solução encontrada aqui.

Ao redimensionar o PNG, no entanto, tive problemas com relação à qualidade da imagem. Até onde pude ver, o GD usa uma paleta de cores de 8 bits indexada que distorce o texto e as cores se perdem, veja:

Imagem originalImagem redimensionada com solução dada acimaImagem redimensionada com um tweak²

²A ideia do ajuste que encontrei aquistackoverflow: Crie a imagem real, redimensione-a e copie-a para uma nova imagem, para que a paleta seja determinada com base no resultado reamostrado e a qualidade da imagem seja melhor, como você pode ver na imagem.imagem acima.

// create new image
$newImageTmp = imagecreatetruecolor($newwidth,$newheight);
// we create a temporary truecolor image
// do the image resizing by copying from the original into $newImageTmp image
imagecopyresampled($newImageTmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
// create output image
$newImage = imagecreate($newwidth,$newheight);
// copy resized truecolor image onto index-color image
imagecopy($newImage,$newImageTmp,0,0,0,0,$newwidth,$newheight);
// write image to buffer and save in variable
ob_start(); // stdout --> buffer
imagepng($newImage,NULL,6);
$newImageToSave = ob_get_contents(); // store stdout in $newImageToSave
ob_end_clean(); // clear buffer
// remove images from php buffer
imagedestroy($src);
imagedestroy($newImageTmp);
imagedestroy($newImage);

Problema: Nenhum dos dois resultados é satisfatório.

Tenho certeza de que deve haver uma maneira de determinar a paleta de cores e manter a maioria das cores da imagem, de modo que o PNG seja semelhante ao original e tenha um tamanho de arquivo aceitável.

Agora, só vejo o JPG em vez do PNG. Mas se você conhece uma solução, seria muito apreciado se você me avise.

Obrigado!

questionAnswers(2)

yourAnswerToTheQuestion