Экономим память

Проблема: загруженные изображения занимают больше памяти, чем исходные файлы

Экономим память


Симптомы
Плагин Альбомы, при загрузке небольших файлов, увеличивает их размер, несмотря, что файл сжат. Это можно наблюдать, если взглянуть на размер файла на сервере FTP.

Причины
По умолчанию плагин Альбомы имеет установку качества сжатия 100, тогда как большинство изображений, загруженных из Интернета очень сильно сжаты, так же пользователи могут сами сжимать свои изображения для экономии места в своих альбомах.

Решение
Для снижении качества фотографий плагина Альбом, вы можете уменьшить filesizes. Это влияет на резолюцию фотографий, и означает, что это решение никоим образом не изменит размер изображения в пикселах. Измените этот параметр по усмотрению, более низкие значения могут привести к менее желательным искажениям изображения.
Чтобы снизить качество JPEG надо:

1. Открыть ./include/class_upload.php.
2. Около строки 174, найти код:

// RESIZE IMAGE AND PUT IN USER DIRECTORY
      switch($this->file_ext)
    {
        case "gif":
          $file = imagecreatetruecolor($width, $height);
          $new = imagecreatefromgif($this->file_tempname);
          $kek=imagecolorallocate($file, 255, 255, 255);
          imagefill($file,0,0,$kek);
          imagecopyresampled($file, $new, 0, 0, 0, 0, $width, $height, $this->file_width, $this->file_height);
          imagejpeg($file, $photo_dest, 100);
          ImageDestroy($new);
          ImageDestroy($file);
          break;
    
        case "bmp":
          $file = imagecreatetruecolor($width, $height);
          $new = $this->imagecreatefrombmp($this->file_tempname);
          for($i=0; $i<256; $i++) { imagecolorallocate($file, $i, $i, $i); }
          imagecopyresampled($file, $new, 0, 0, 0, 0, $width, $height, $this->file_width, $this->file_height);
          imagejpeg($file, $photo_dest, 100);
          ImageDestroy($new);
          ImageDestroy($file);
          break;
    
        case "jpeg":
        case "jpg":
          $file = imagecreatetruecolor($width, $height);
          $new = imagecreatefromjpeg($this->file_tempname);
          for($i=0; $i<256; $i++) { imagecolorallocate($file, $i, $i, $i); }
          imagecopyresampled($file, $new, 0, 0, 0, 0, $width, $height, $this->file_width, $this->file_height);
          imagejpeg($file, $photo_dest, 100);
          ImageDestroy($new);
          ImageDestroy($file);
          break;
    
        case "png":
          $file = imagecreatetruecolor($width, $height);
          $new = imagecreatefrompng($this->file_tempname);
          for($i=0; $i<256; $i++) { imagecolorallocate($file, $i, $i, $i); }
          imagecopyresampled($file, $new, 0, 0, 0, 0, $width, $height, $this->file_width, $this->file_height);
          imagejpeg($file, $photo_dest, 100);
          ImageDestroy($new);
          ImageDestroy($file);
          break;
      }


3. В каждой строке imagejpeg ($ FILE, $ photo_dest, 100); изменить "100" до желаемого качества, в пределах 0-100. Меньшее значение приведет к ухудшению качества изображения, но зато размер файла будет меньше.

Поделиться

Другие публикации по теме:

Комментарии