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 :: Версия для печати :: Функция resize с записью a файл и вывод в браузер
Форумы портала PHP.SU » » Графика в PHP » Функция resize с записью a файл и вывод в браузер

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

1. dzheka3d - 03 Августа, 2011 - 00:44:57 - перейти к сообщению
Здравствуйте! Нашел в интернете код, который уменьшает размер картинки.

Как сделать так, что бы уменьшив картинку, она записывалась не на диск и в не в браузер, а в память, что бы я сразу же мог применить к ней другую функцию (например обрезки)?

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

(Добавление)
Вот немного поколупался и у меня получилось такое: Но все же может загружать в память а не во временную папку на диске?
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function img_resize($src, $dest, $width, $height, $rgb=0xFFFF00, $quality=100)
  3. {
  4.   if (!file_exists($src)) return false;
  5.  
  6.   $size = getimagesize($src);
  7.  
  8.   if ($size === false) return false;
  9.  
  10.   // Определяем исходный формат по MIME-информации, предоставленной
  11.   // функцией getimagesize, и выбираем соответствующую формату
  12.   // imagecreatefrom-функцию.
  13.   $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
  14.   $icfunc = "imagecreatefrom" . $format;
  15.   if (!function_exists($icfunc)) return false;
  16.  
  17.   $x_ratio = $width / $size[0];
  18.   $y_ratio = $height / $size[1];
  19.  
  20.   $ratio       = min($x_ratio, $y_ratio);
  21.   $use_x_ratio = ($x_ratio == $ratio);
  22.  
  23.   $new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio);
  24.   $new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio);
  25.   $new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width) / 2);
  26.   $new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);
  27.  
  28.   $isrc = $icfunc($src);
  29.   $idest = imagecreatetruecolor($width, $height);
  30.  
  31.   imagefill($idest, 0, 0, $rgb);
  32.   imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0,
  33.     $new_width, $new_height, $size[0], $size[1]);
  34.  
  35.   imagejpeg($idest, $dest, $quality);
  36.  
  37.   imagedestroy($isrc);
  38.   imagedestroy($idest);
  39.  
  40.   return true;
  41.  
  42. }
  43.  
  44.  
  45.  
  46. $filename = 'sdfjhf.jpg'; // имя файла для сохранения
  47. $fn = 'original.jpg'; //
  48.  
  49. img_resize($fn, 'temp/'.$filename, 500, 375);
  50.  
  51. $old_res = 'temp/'.$filename;
  52.  
  53. $src=imagecreatefromjpeg($old_res);
  54.  
  55. $dst=imagecreatetruecolor(500, 200);
  56. imagecopyresampled($dst, $src, 0, 0, 0, 0, 500, 200, 500, 200);
  57. imagejpeg($dst,$filename,100);
  58. header("Content-type: image/Jpeg");
  59. imagejpeg($dst,null,85);
  60.  
  61. unlink('temp/'.$filename);
  62.  
  63.  
  64.  
  65. ?>
2. illy - 03 Августа, 2011 - 09:42:32 - перейти к сообщению
А сразу обрезать нельзя? Не понял
3. dzheka3d - 03 Августа, 2011 - 14:19:41 - перейти к сообщению
illy пишет:
А сразу обрезать нельзя?

Можно, но мне нужно, что бы картинка была пропорционально обрезана. Поэтому нужно сначала уменьшить её...

 

Powered by ExBB FM 1.0 RC1