Оптимизация 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. Но если вы знаете решение, было бы очень полезно, если бы вы сообщили мне / нам.
Спасибо!