Показать полную графическую версию : Потеря качества png файла после imagecreatefrompng() и imagepng() php.
Здравствуйте. возникла необходимость работать с png файлами через php с сохранением прозрачности. Только возникла одна проблема, потеря качества, и я боюсь что ее никак не решить..
Есть png файл "dimm.png" (http://43845.lipton.web13.hosting-test.net/dimm.png) , есть php скрипт image.php (http://43845.lipton.web13.hosting-test.net/image.php) следующего содержания:
<?
header ("Content-type: image/png"); //Передаем браузеру mime-тип выводимых данных, зтп изображение.
$img=imagecreatefrompng('dimm.png'); // Создаем изображение из png файла.
imagesavealpha($img,true); // Сохраняем прозрачность.
imagepng($img); // Выводим рисунок в браузер.
?>
теперь открываем в двух соседних вкладках одно и тоже изображение, только один (http://43845.lipton.web13.hosting-test.net/new.php) рисунок будет открыт через php скрипт, а другой (http://43845.lipton.web13.hosting-test.net/dimm.png) напрямую. Если переключать между двумя этими картинками (вкладками Ctrl+Tab), то заметно, что качество рисунка "прогнанного" через скрипт хуже (появляются полоски). Как сохранить качество? Очень надеюсь что это возможно как-то исправить.
Всем большое спасибо.
тут можно порулить версиями GD (и др. библиотеками), и 3 параметром в imagepng (который качество)
imagepng($img, null, 0);//5.1.2+ больше имхо никак.
Sham, Спасибо, но это не помогло. Я кончено понимаю, что GD библиотека, это не фотошоп, но я считаю что она не должна ухудшать качество файла. Это ведь бред!(( Вы видели что оно с картинкой делает? Версия GD 2.0.34.
Я думаю что у других версий все также. Тем более что не могу проверить, так как сижу на хостинге. Разве что использовать для этого денвер.
А какие есть еще библиотеки для работы с изображениями?
спасибо.
тынц (http://docs.php.net/manual/ru/refs.utilspec.image.php)
Я кончено понимаю, что GD библиотека, это не фотошоп, но я считаю что она не должна ухудшать качество файла. Это ведь бред!(( »
почему бред? если библиотека проганяя ее через себя уменьшает ее глубину цвета передачи с большего на меньший (24 бит -> 16/8 бит) то потеря качества неизбежна
freese, по моему библиотека GD умеет работать с 24 бит изображениями.. тем более мой png файл, как показал Photoshop, имеет всего 8 бит. Просто GD - не для графики, а для примитива) не качественная библиотека..
Sham, БОЛЬШОЕ СПАСИБО!!!!
Проблема решилась, использованием библиотеки ImageMagick. Это перейдя по Вашей ссылке я начал копать, что это за библиотеки)) Вообщем, библиотеку GD можно использовать только в примитивных случаях, например для контактов, фейсбуков, твитеров и т.д. , а все случаи где нужна уже более менее серьйозная работа с графикой нужно использовать только ImageMagick, ну или GraphicsMagick (http://ru.wikipedia.org/wiki/GraphicsMagick) (это форк (http://ru.wikipedia.org/wiki/%D0%A4%D0%BE%D1%80%D0%BA) от библиотеки ImageMagick), в них качество картинок куда выше.
На хостинге есть только ImageMagick, прошу чтобы установили GraphicsMagick, и PECL расширения Gmagick и Imagick , для того чтобы я мог использовать их функциями PHP, а то пока что работаю с помощью exec , system и т.д., что не очень удобно, но зато можно использовать все возможности модулей.
Пишут что GraphicsMagick работает быстрее, но вопрос, заметна ли разница, если не пакетно обрабатывать фотки, а только 5-10 штук при загрузке страницы? И правда ли что PECL расширения Gmagick и Imagick, аж так сильно грузят проц, в сравнении с exec() , system() ... ?
Вообщем сравните:
Оригинал (http://43845.lipton.web13.hosting-test.net/dimm.png) ,
GD-lib (http://43845.lipton.web13.hosting-test.net/image.php) код image.php:
<?
header ("Content-type: image/png"); //Передаем браузеру mime-тип выводимых данных, зтп изображение.
$img=imagecreatefrompng('dimm.png'); // Создаем изображение из png файла.
imagesavealpha($img,true); // Сохраняем прозрачность.
imagepng($img); // Выводим рисунок в браузер.
?>
,
ImageMagick (http://43845.lipton.web13.hosting-test.net/image2.php) код image2.php:
<?
exec ("convert dimm.png dimm2.png");
header ("Content-type: image/png");
readfile("dimm2.png");
?>
. Разницу заметно))
Всем спасибо. Жду ответы на вопросы...
заметна ли разница, если не пакетно обрабатывать фотки, а только 5-10 штук при загрузке страницы »
5-10 - не пакетно уже? Зависит от размера картинок, качества обработки и т.д. Если предполагается серьезная нагрузка, то лучше асинхронно.аж так сильно грузят проц »
имхо вопрос практический. Что меньше грузит, то и выбираем. Тут мб слишком много привходящих причин (от кривых драйверов до неправильных системных настроек).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.