Проблемы с PHP GD с ImageCreateTrueColor и PNG - PullRequest
1 голос
/ 15 апреля 2010

Я изменяю размеры изображений PNG, используя функцию библиотеки изображений GD ImageCopyResampled (). Все работает нормально, я даже могу сохранить прозрачность альфа-наложения с использованием ImageCreateTrueColor () вместо использования ImageCreate () для создания измененного размера изображения.

Проблема в том, что если я использую ImageCreateTrueColor (), а не ImageCreate (), размер PNG-файлов увеличивается с 80 до 150 КБ. Если я использую ImageCreate (), размер файла остается примерно таким же, но цвета винт!

Итак, мой вопрос: как я могу сохранить альфа-смешение при изменении размера изображений PNG без увеличения размера файла?

О, и я уменьшаю размеры PNG.

1 Ответ

1 голос
/ 16 апреля 2010

С помощью imagecreate() вы создаете файл PNG с индексированным цветом, а с imagecreatetruecolor() вы создаете файл PNG с 24-битным цветом.Конечно, качество передискретизации будет выглядеть намного лучше с истинным цветным изображением, так как оно имеет гораздо больший диапазон цветов, которые можно использовать при передискретизации.С imagecreate() система может использовать только гораздо меньшую палитру.

Вы можете попробовать это с помощью Photoshop или Gimp, масштабируя изображения в различных цветовых режимах (индексированных и RGB).К сожалению, это характер игры - размер файла будет больше, когда будет больше цветов для хранения.

Я не уверен, что это изменится, но вы можете попробовать использовать imagecopyresampled() дляскопировать в ресурс истинного цвета (из imagecreatetruecolor()), а затем скопировать (но не переизмерить) , что , в ресурс изображения палитры.Таким образом, палитра определяется на основе результата повторной выборки.Я не уверен, что вы сможете сохранить альфа-канал.

...