11 ноября 2011 г.

Code Igniter сжатие прозрачных png средствами фреймворка.

При использовании php библиотеки GD для сжатия изображений, библиотека работы с изображениями Image_lib, входящая в состав фреймворка Code-igniter при сжатии прозрачных PNG по-умолчанию делает прозрачный фон черным для GIF и PNG файлов, что не очень красиво.

Данное решение позволяет сохранять прозрачность при сжатии изображений:

В system/libraries/Image_lib.php, после строчки
$dst_img = $create($this->width, $this->height);

добавить следующий текст:
// keeping transparency
$transparent_index = imagecolortransparent($src_img);
if ($transparent_index >= 0) {
      imagepalettecopy($src_img, $dst_img);
      imagefill($dst_img, 0, 0, $transparent_index);
      imagecolortransparent($dst_img, $transparent_index);
      imagetruecolortopalette($dst_img, true, 256);
}
elseif ($this->image_type == 3) {
      imagealphablending($dst_img, false);
      $transparent_index = imagecolorallocatealpha($src_img, 0, 0, 0, 127);
      imagefill($dst_img, 0, 0, $transparent_index);
      imagesavealpha($dst_img, true);
}
Недостатком такого решения является то, что изменяется системная библиотека в system/ , а при "обновлении" проекта, изменения могут затеряться.

Комментариев нет:

Отправить комментарий