Оптимизация PNG при изменении размера с помощью GD / PHP - Как определить цветовую палитру?

У меня были проблемы с изменением размера PNG и поддержанием файлов небольшого размера.Решение найдено здесь.

Однако при изменении размера PNG у меня возникли проблемы с качеством изображения. Насколько я мог видеть, GD использует индексированную 8-битную цветовую палитру, которая искажает текст и цвета теряются, смотрите:

Исходное изображениеИзменение размера изображения с решением, приведенным вышеИзменение размера изображения с твиком²²

Идея для настройки я нашел здесь впереполнение стекаСоздайте truecolor-изображение, измените его размер и скопируйте его в новое изображение, чтобы палитра определялась на основе результата повторной выборки, а качество изображения было лучше, как вы можете видеть наизображение выше.

// 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);

Проблема: ни один из обоих результатов не является удовлетворительным.

Я совершенно уверен, что должен быть способ: 1. определить цветовую палитру и 2. сохранить большую часть изображения ».s цветов, так что 3. PNG выглядит аналогично оригиналу и имеет приемлемый размер файла.

Теперь я вижу только переход на JPG вместо PNG. Но если вы знаете решение, было бы очень полезно, если бы вы сообщили мне / нам.

Спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос