Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP resize png с прозрачным фоном

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

fred2003

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возникла необходимость написать функцию по уменьшению размера картинки png с прозрачным фоном. Тема вроде уже заезженная, но если честно то до конца не понимаю некоторые моменты. Я накидал примерно такой код:

Код:
 
    $isrc=imagecreatefrompng($src);
     $newImage = imagecreatetruecolor($width, $height);
      //Отключаем режим сопряжения цветов
      imagealphablending($newImage, false);
      //Включаем сохранение альфа канала
      imagesavealpha($newImage, true);
      // создаие цвета фона
      $transparentBackground = imagecolorallocatealpha($newImage, 0, 0, 0, 127);
      imagecolortransparent($newImage, $transparentBackground );
      imagefill($newImage, 0, 0, $transparentBackground);      
      imagecopyresampled($newImage, $isrc, 0, 0, 0, 0, $width, $height, $imgWidth, $imgHeight);
      imagepng($newImage, $dest, $quality);
 

 
Берем данную функцию и не делаем resize,  на выходе хотим получить картинку размерами равную исходному, т.е. $width=$imgWidth и $height=$imgHeight.
 
Функция вроде работает. Но вот момент на счет  $quality, оно может меняться от 0(оригинальное качество) до 9
Если на вход даю файл png размером 3198х3514, который весит 1.54Мб, то на выходе получаю файл размером больше 40метров, если $quality=0 , и только при $quality=9 размер изображения весит порядка 1.4 метра.
 
Если честно то я не разобрался с библиотекой GD.
 Может кто сталкивался с подобной ситуацией и разобрался с данной библиотекой, подскажет как при 0 получать выходной файл с размером равной оригинальному и при 9 получить реально уменьшенный размер файла?

Всего записей: 14 | Зарегистр. 01-10-2011 | Отправлено: 02:50 22-03-2017
ManHunter



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
http://php.net/manual/en/function.imagepng.php

Цитата:
 
bool imagepng ( resource $image [, mixed $to [, int $quality [, int $filters ]]] )
 
 quality
    Compression level: from 0 (no compression) to 9.
 

 
"no compression" - не означает "оригинальное качество"
 
Хорошая тема про компрессию png:
http://newsgroup.xnview.com/viewtopic.php?t=4101

----------
"На любое мое движение ваша реакция предусмотрена,
В лучшем случае - равнодушие, в худшем случае - патология..." (C) Егор Летов

Всего записей: 3091 | Зарегистр. 20-03-2004 | Отправлено: 14:03 22-03-2017 | Исправлено: ManHunter, 14:03 22-03-2017
fred2003

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ManHunter
Спасибо за ссылку, теперь понятно стал этот $quality.

Всего записей: 14 | Зарегистр. 01-10-2011 | Отправлено: 15:08 22-03-2017
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP resize png с прозрачным фоном


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru