У меня были проблемы с изменением размера PNG и сохранением небольших размеров файлов. Решение найдено здесь.
Однако при изменении размера PNG у меня возникли проблемы с качеством изображения. Насколько я мог видеть, GD использует индексированную 8-битную цветовую палитру, которая искажает текст и теряет цвета, см.:
- Исходное изображение
- Размер изображения изменен с помощью решения, приведенного выше
- Изображение с измененным размером с помощью настройки²
²Идея настройки, которую я нашел здесь, в stackoverflow: создать изображение 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. сохранить большинство цветов изображения, чтобы 3. PNG выглядел так же, как оригинал, и имел приемлемый размер файла.
Теперь я вижу только JPG вместо PNG. Но если вы знаете решение, мы будем очень признательны, если вы сообщите мне / нам.
Спасибо!