Генерация image preview в PHP

Статус
В этой теме нельзя размещать новые ответы.
Выдрано с php5.ru.
У себя использую немного переделаный вариан.



Итак, пусть у нас есть файл в любом поддерживаемом GD формате, и мы хотим создать "превьюшку" заданного размера в формате JPEG. Разработаем для этой цели функцию imgResize. Комментариев здесь почти не будет - так как используются уже изученные приемы и обычная арифметика. Постарайтесь разобраться в этом коде самостоятельно.



Код:
<?php
/***********************************************************************************
Функция img_resize(): генерация thumbnails
Параметры:
  $src             - имя исходного файла
  $dest            - имя генерируемого файла
  $width, $height  - ширина и высота генерируемого изображения, в пикселях
Необязательные параметры:
  $rgb             - цвет фона, по умолчанию - белый
  $quality         - качество генерируемого JPEG, по умолчанию - максимальное (100)
***********************************************************************************/
function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=100)
{
  if (!file_exists($src)) return false;

  $size = getimagesize($src);

  if ($size === false) return false;

  // Определяем исходный формат по MIME-информации, предоставленной
  // функцией getimagesize, и выбираем соответствующую формату
  // imagecreatefrom-функцию.
  $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
  $icfunc = "imagecreatefrom" . $format;
  if (!function_exists($icfunc)) return false;

  $x_ratio = $width / $size[0];
  $y_ratio = $height / $size[1];

  $ratio       = min($x_ratio, $y_ratio);
  $use_x_ratio = ($x_ratio == $ratio);

  $new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio);
  $new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio);
  $new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width) / 2);
  $new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);

  $isrc = $icfunc($src);
  $idest = imagecreatetruecolor($width, $height);

  imagefill($idest, 0, 0, $rgb);
  imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, 
    $new_width, $new_height, $size[0], $size[1]);

  imagejpeg($idest, $dest, $quality);

  imagedestroy($isrc);
  imagedestroy($idest);

  return true;

}
?>


Разобрались? Поместим этот код в файл imgresize.php.

Пример использования функции img_resize:


Код:
<?php

  require ('imgresize.php');
  if (img_resize('original.jpg', 'small.jpg', 100, 60))
    echo 'Image resized OK';
  else
    echo 'Resize failed!';

?>
 
Проще всего хранить thumb в той же папке в которой и оригинал но дописывать к имени например t_.

У себя использую сжатие по ширине - задаётся ширина, высчитывается новая высота и пережимается.
PHP:
<?php
/*
 * Usage: thumb(source image, destination image, maximal width which can have new image).
 */
function thumb($source_file, $destination_file, $max_dimension)
{
   list($img_width,$img_height) = getimagesize($source_file);
   
   if ($img_width > $max_dimension) {
       $new_width  = $max_dimension;
          $percent    = $max_dimension / $img_width;
       $new_height = $img_height * $percent;
   } else {
       $new_width  = $img_width;
       $new_height = $img_height;      
   }
   
   $thumbnail = imagecreatetruecolor($new_width,$new_height);

   if (strpos($source_file,".gif")){
    $img_source = imagecreatefromgif($source_file);
    $img_type = 'image/gif';
   }
   if ((strpos($source_file,".jpg")) || (strpos($source_file,".jpeg"))){
    $img_source = imagecreatefromjpeg($source_file);
    $img_type = 'image/jpeg';
   }
   if (strpos($source_file,".bmp")){
    $img_source = imagecreatefromwbmp($source_file);
    $img_type = 'image/bmp';
   }
   if (strpos($source_file,".png")){
    $img_source = imagecreatefrompng($source_file);
    $img_type = 'image/png';
   }
   imagecopyresampled($thumbnail, $img_source, 0, 0, 0, 0, $new_width, $new_height, $img_width, $img_height);
   imagejpeg( $thumbnail, $destination_file, 100 );
   imagedestroy($img_source);
   imagedestroy($thumbnail);
}

?>
 
  • Заблокирован
  • #13
так все же объясните что рациональнее самому ручками пережимать и ложить отдельно или пользоваться даными скриптами.?
 
так все же объясните что рациональнее самому ручками пережимать и ложить отдельно или пользоваться даными скриптами.?

Ручками(фотошоп) будет меньше вес и качество получше
Скриптами чуть больше вес и качество намного хуже.

Но если качество большой роли не играет, то ИМХО скриптами, меньше мороки :)
 
best image class

samples:
Для просмотра ссылки Войди или Зарегистрируйся

download:
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся

Ты юзал этот класс описание в студию... В следующий раз игнор за тупые ссылки! :mad:
 
Для того, чтобы сжимать картинки на лету и выводить их, делаеццо так.
Перед вызовом функции imagejpeg/imagegif/imagepng пишется
PHP:
Header('Content-Type: image/КОНТЕЙНЕР КАРТИНКИ');
где контейнер - это его тип(jpeg,gif,png) .
 
  • Заблокирован
  • #18
А кто подскажит скрипт который грабит чисто фотки,создаёт по шаблону галеры.Ну и самое важное,чтобы прописывались в альтах заданные кеи и вообще,чтобы он был заточен под СЕО.
 
А кто подскажит скрипт который грабит чисто фотки,создаёт по шаблону галеры.Ну и самое важное,чтобы прописывались в альтах заданные кеи и вообще,чтобы он был заточен под СЕО.
Таких не знаю, поищи по форуму .
 
А кто подскажит скрипт который грабит чисто фотки
Например?
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся

Ты юзал этот класс описание в студию... В следующий раз игнор за тупые ссылки!
Вроде же нормальный класс?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху