This Might Be Useful

Создание пропорционального thumbnail’а

При создании различных галерей картинок (а также сайтов, на которые посетители могут закачивать картинки) возникает необходимость создавать уменьшенные копии картинок для предварительного просмотра - thumbnails. Они, понятное дело, должны быть копией оригинальной картинки, уменьшенной с сохранением пропорций. В данной статье приводится функция, создающая такие thumbnail'ы.

Сначала пишем простую функцию для получения расширения файла:

PHP:
  1. function get_file_ext($fname) {
  2.   return strtolower(preg_replace("/.+\.(.*)$/", "\\1", basename($fname)));
  3. } // get_file_ext

Теперь делаем код, создающий пропорционально уменьшенный thumbnail.

Параметры:

  • $fname - название исходного файла
  • $thumb_fname - название конечного файла
  • $max_x - максимальная ширина thumbnail'а (необязательный параметр)
  • $max_y - максимальная высота thumbnail'а (необязательный параметр)

В результате получается либо false, либо готовый файл с пропорционально уменьшенным thumbnail'ом.

PHP:
  1. function generate_thumbnail($fname, $thumb_fname, $max_x=99, $max_y=99) {
  2.   $ext = get_file_ext($fname);
  3.   switch ($ext) {
  4.     case 'jpg':
  5.     case 'jpeg':
  6.       $im = imagecreatefromjpeg($fname);
  7.     break;
  8.  
  9.     case 'gif':
  10.       $im = imagecreatefromgif($fname);
  11.     break;
  12.  
  13.     case 'png':
  14.       $im = imagecreatefrompng($fname);
  15.     break;
  16.    
  17.     default:
  18.       return false;
  19.     break;
  20.   } // switch type
  21.   if (@$im) {
  22.     list($width, $height, $type, $attr) = getimagesize($fname);
  23.     if (($width > $max_x) or ($height > $max_y)) {
  24.       if ($width > $height) {
  25.         $nw = $max_x;
  26.         $nh = ($max_x / $width) * $height;
  27.       }
  28.       else {
  29.         $nw = ($max_y / $height) * $width;
  30.         $nh = $max_y;
  31.       }
  32.       $thumb = imagecreatetruecolor($nw, $nh);
  33.       imagecopyresampled($thumb, $im, 0, 0, 0, 0, $nw, $nh, $width, $height);
  34.       imagejpeg($thumb, $thumb_fname, 90);
  35.       imagedestroy($thumb);
  36.     } // need to resize
  37.     else {
  38.       copy($fname, $thumb_fname);
  39.     } // just copy image
  40.   } // created image
  41.   else {
  42.     return false;
  43.   }
  44. } // generate_thumbnail

· Изменяем размеры картинки с сохранением прозрачности (PHP+GD)
· Способы красивого завязывания шнурков
· Настройка ширины бортиков окон в Windows Vista
· Создание скриншотов в Windows Vista с сохранением всех визуальных эффектов
· Создание прямой ссылки на Network Connections

- Коментировать
- Trackback

6 Responses to “Создание пропорционального thumbnail’а”

  1. Pingback by Изменяем размеры картинки с сохранением прозрачности (PHP+GD) - This Might Be Useful — Friday, January 30, 2009 at 12:10

  1. Андрей Says:

    Ваш скрипт не работает с изображениями , размерами выходящими за пределы тысячи . К примеру, не создается thumbnail для фото размером 3072*2304.

  2. Filosoff Says:

    Андрей @ 04.12.2007, 20:08 #

    Ваш скрипт не работает с изображениями , размерами выходящими за пределы тысячи . К примеру, не создается thumbnail для фото размером 3072*2304.

    вообще-то работает... посмотрите код, все в порядке же :)

  3. Андрей Says:

    Возможно ли , что у меня что-то с GD - библиотекой ?

  4. Александр Says:

    В этом коде будет неправильно отображаться mime-тип файла.
    Т.е. вы загружаете png а на выходе jpg. А header не изменён!

  5. Filosoff Says:

    Александр @ 11.04.2009, 17:15 #

    В этом коде будет неправильно отображаться mime-тип файла.
    Т.е. вы загружаете png а на выходе jpg. А header не изменён!

    так тут картинка сохраняется в файл. и на входе тоже картинка читается из файла. причем тут header?

Leave a Reply

code