8th
Авг

Как yменьшить картинку с помощью php

Posted by Chas under Пост-обзор

  // — Настройки
   define(’WIDTH’,200); // Ширина иконки
   define(’HEIGHT’,200); // Высота иконки
   define(’R’,255);define(’G’,255);define(’B’,255); // RGB для фонового цвета под иконкой

   // — Поехали
   $imageInfo = getimagesize( $file );
   switch( $imageInfo[2] ){
      case 1: $image = imagecreatefromgif( $file ); break;
     case 2: $image = imagecreatefromjpeg( $file ); break;
     case 3: $image = imagecreatefrompng( $file ); break;
     default: exit();
   }

   //— Создание иконки фотки
   $result = imagecreatetruecolor(WIDTH,HEIGHT);
   $bg = imagecolorallocate( $result, R, G, B );
   imagefilledrectangle( $result, 0, 0, WIDTH-1, HEIGHT-1, $bg );

   //— Вычисляем соотношение сторон для иконки
   $ratio1 = $imageInfo[0]/WIDTH;
   $ratio2 = $imageInfo[1]/HEIGHT;
   $ratio = $ratio1<$ratio2?$ratio1:$ratio2; // выбираем наименьшее соотношение

   // if ( $ratio<1 ) $ratio=1; // Оставить иконки меньших размеров WIDTH и HEIGHT не трогать
   $width = $imageInfo[0]/$ratio;
   $height = $imageInfo[1]/$ratio;
   imagecopyresampled( $result, $image, 0, 0, ($imageInfo[0]-WIDTH*$ratio)/2, ($imageInfo[1]-HEIGHT*$ratio)/2, WIDTH, HEIGHT, $ratio*WIDTH, $ratio*HEIGHT);

   //— Отправляем (возвращаем) иконку
   header(’Content-type: image/jpeg’);
   imagejpeg($result);

Алгоритм используется для подготовки эскизов (иконок) изображений.
Причем данная версия для того хороша, когда все фотки каких-попало форматов. И все аккуратненько подгоняются под размер WIDTHхHEIGHT. То, что не влазит, обрезается.

Если обрезание (обрезание исходной картинки имеется ввиду) не нужно, т.е. чтобы эскиз со своими “какими-попало” пропорциями просто вписался в прямоугольник WIDTHхHEIGHT.

Достаточно заменить одну строчку:

…..
imagecopyresampled( $result, $image, 0, 0, ($imageInfo[0]-WIDTH*$ratio)/2, ($imageInfo[1]-HEIGHT*$ratio)/2, WIDTH, HEIGHT, $ratio*WIDTH, $ratio*HEIGHT);
…..
// вот на эту:
imagecopyresampled( $result, $image, (WIDTH-$width)/2, (HEIGHT-$height)/2, 0, 0, $width, $height, $imageInfo[0], $imageInfo[1]);

Тема на форуме

Похожие статьи

Теги: |