Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Генерация превьюшек
Форумы портала PHP.SU » PHP » Пользовательские функции » Генерация превьюшек

Страниц (1): [1]
 

1. valenok - 14 Апреля, 2007 - 13:40:53 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. /***********************************************************************************
  4. Функция img_resize(): генерация thumbnails
  5. Параметры:
  6.   $src             - имя исходного файла
  7.   $dest            - имя генерируемого файла
  8.   $width, $height  - ширина и высота генерируемого изображения, в пикселях
  9. Необязательные параметры:
  10.   $rgb             - цвет фона, по умолчанию - белый
  11.   $quality         - качество генерируемого JPEG, по умолчанию - максимальное (100)
  12. ***********************************************************************************/
  13. function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=100)
  14. {
  15.   if (!file_exists($src)) return false;
  16.  
  17.   $size = getimagesize($src);
  18.  
  19.   if ($size === false) return false;
  20.  
  21.   // Определяем исходный формат по MIME-информации, предоставленной
  22.   // функцией getimagesize, и выбираем соответствующую формату
  23.   // imagecreatefrom-функцию.
  24.   $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
  25.   $icfunc = "imagecreatefrom" . $format;
  26.   if (!function_exists($icfunc)) return false;
  27.  
  28.   $x_ratio = $width / $size[0];
  29.   $y_ratio = $height / $size[1];
  30.  
  31.   $ratio       = min($x_ratio, $y_ratio);
  32.   $use_x_ratio = ($x_ratio == $ratio);
  33.  
  34.   $new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio);
  35.   $new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio);
  36.   $new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width) / 2);
  37.   $new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);
  38.  
  39.   $isrc = $icfunc($src);
  40.   $idest = imagecreatetruecolor($width, $height);
  41.  
  42.   imagefill($idest, 0, 0, $rgb);
  43.   imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0,
  44.     $new_width, $new_height, $size[0], $size[1]);
  45.  
  46.   imagejpeg($idest, $dest, $quality);
  47.  
  48.   imagedestroy($isrc);
  49.   imagedestroy($idest);
  50.  
  51.   return true;
  52.  
  53. }
  54. ?>
  55.  

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4.   require ('imgresize.php');
  5.   if (img_resize('original.jpg', 'small.jpg', 100, 60))
  6.     echo 'Image resized OK';
  7.   else
  8.     echo 'Resize failed!';
  9.  
  10. ?>
  11.  

http://www.php5[dot]ru/articles/image#size






Также я использовал для пропорционального уменьшения картинки следующий код:
Уменьшает изображение сохраняя пропорцию между шириной и высотой
до размера при котором либо ширина либо высота окажутся 100 пикселей.
PHP:
скопировать код в буфер обмена
  1.  
  2. list($width, $height, $type, $attr) = getimagesize($img);
  3.         if($width > $height) $dif = $width / 100; $width = 100; $height = $height / $dif;
  4.         else $dif = $height / 100; $height = 100; $width = $width / $dif;
  5. echo "< img src='".$img."' width = '".$width."' height='".$height."' />";
  6.  
2. kamikadze - 30 Апреля, 2007 - 19:08:58 - перейти к сообщению
Можно еще функций для картинок, например случайный вывод из каталога, или фотогалерею даже =)
3. D1mOn - 05 Апреля, 2008 - 15:01:49 - перейти к сообщению
Про код Valenka: А вот можно так, чтобы файл не сохранялся на хард, т.е. был "одноразовым"?
4. SjayLiFe - 05 Декабря, 2011 - 00:35:18 - перейти к сообщению
А как это прикрутить к фотохостингу chereveto???
5. ALEN - 28 Декабря, 2011 - 17:06:46 - перейти к сообщению
http://forum.php.su/topic.php?fo...35&topic=736 - есть еще более красивые варианты и не только на GD
6. Annet_Li - 27 Августа, 2013 - 13:46:08 - перейти к сообщению
Здравствуйте!
Заранее извиняюсь за глупый вопрос, я немножко запуталась.. ??? Непонял!
Что должно быть указано в $src и $dest?
Если $src = GW_UPLOADPATH . $photo, то как должно выглядеть имя генерируемого файла?
7. Zuldek - 27 Августа, 2013 - 13:50:56 - перейти к сообщению
Цитата:
$src = GW_UPLOADPATH . $photo

$src должна содержать полный путь к файлу от корня сервера.
Пример возможного значения: "/M/sitehost/htdocs/images/photo.jpg"

На самом деле, указанные функции для генерации использовать не рекомендую, как и либу gd вообще. Может подойти для генерации уменьшенных копий одного загруженного изображения и то будет накладно. Лучше обрезать не средствами пыхи, а, допустим imagemagick. Будет в разы быстрее и экономичнее по ресурсам, особенно если нужно ресайзить большое количество картинок
8. Annet_Li - 27 Августа, 2013 - 14:04:42 - перейти к сообщению
Я потому и путаюсь с указанием полного пути, так как хочу, чтобы это работало для каждого загружаемого изображения..
Спасибо за ответ и за совет по поводу imagemagick.
Попробую теперь разобраться с нимУлыбка
9. Annet_Li - 27 Августа, 2013 - 17:36:23 - перейти к сообщению
Возник сходный глупый вопрос..
Установила ImageMagick, нашла скрипт для уменьшения размера изображения:

$ convert -quality 90 -resize 640x640 большое-фото.jpg уменьшенное-фото.jpg

Но опять же не могу понять, как написать имя изображений, чтобы работало для всех загруженных.
Нужно создавать массив имен изображений?

 

Powered by ExBB FM 1.0 RC1