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 » Программирование на PHP » Смена размера изображения

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

1. ALEN - 29 Августа, 2008 - 15:06:23 - перейти к сообщению
Как сохранить картинку с иными размерами - это понятно. А вот, как указать новый размер при загрузке страницы, не сохраняя картинку.

Т.е. картинка хранится с разрешением 1024/768 ? а пользователь загружает ее 800/600 и естественно с меньшим размером в кбайтах
2. pifon1989 - 29 Августа, 2008 - 23:37:47 - перейти к сообщению
ALEN пишет:
и естественно с меньшим размером в кбайтах

Чисто вывести вам короткую картинку я без проблем могу, но для сжатия и иже полного изменения изображения перед выводом, нужна GD библиотека.
Она есть у вас? Спросите у хостера...

как ж спать хоцца Огорчение
3. ALEN - 30 Августа, 2008 - 07:44:26 - перейти к сообщению
Конечно, есть! Но нужно использовать только GD
(Добавление)
Цитата:
Как сохранить картинку с иными размерами - это понятно

В этих строках уже должно быть понятно, что используется GD. Но мне нужно, чтоб картинка не сохранялась, т.е. не использовать imagecopyresized() и imagecopyresampled() т.к. в них происходит сохранение файла.

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

Мне желательно, чтоб функция срабатывла примерно так:
CODE (text):
скопировать код в буфер обмена
  1. resize("http://forum.php.su/im/emoticons/ph34r.gif","1024","768");

т.е. первый параметр адрес исходного изображения , 2-3 - это width и hight , т.е. тут файл не сохраняется а функция врнет обработанный до определенных размеров файл.
4. Andrey5555 - 30 Августа, 2008 - 18:23:50 - перейти к сообщению
Вот код, будут вопросы - отвечу:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. header("Content-type: image/jpeg");
  3. $name = "site.jpg";
  4. $w = 700;
  5. $quality = 100;
  6. $image = imagecreatefromjpeg ($name);
  7. $width = imagesx ($image);
  8. $height = imagesy ($image);
  9. if ($width != $w)
  10. {
  11. $ratio = $width/$w;
  12. $new_width = round ($width/$ratio);
  13. $new_height = round ($height/$ratio);
  14. $new_image = imagecreatetruecolor ($new_width, $new_height);
  15. imagecopyresampled ($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
  16. imagejpeg ($new_image, '', $quality);
  17. imagedestroy ($image);
  18. imagedestroy ($new_image);
  19. }
  20. ?>
5. ALEN - 30 Августа, 2008 - 19:14:14 - перейти к сообщению
Andrey5555
Этот вариант давно использую и он сохраняет картинку, а мне нужно просто вывисти ее с другой массой и размером, не копирую, и не меняя исходную картинку
6. Вездеход - 31 Августа, 2008 - 00:29:59 - перейти к сообщению
ну если тупо вывести - то вот так мона.
сохраните код в отдельный скрипт. и как адрес картинки пишите вот это:
file.php?scr=kartinka.jpg
если вам надо размеры указать сразу (по умолчанию - 100 пикселей)
file.php?scr=kartinka.jpg&s=100
(s=100 - тут вы можете указать размеры картинки в пикселях - ширина и высота.
или же можно написать так:
file.php?scr=kartinka.jpg&s_w=100&s_h=100
(т.е. размеры в пикселях ширивы и высоты)
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $src=$_GET['img'];
  3. if(empty($src)) { exit; }
  4. $rgb=0xFFFFFF;
  5. $quality=100;
  6. $mysizeh=$_GET['s_h'];
  7. $mysizew=$_GET['s_w'];
  8. $mysize=$_GET['s'];
  9. if(empty($mysize)) {$mysize=100;}
  10. if(!empty($mysizeh) and !empty($mysizew)) {$height=$mysizeh; $width=$mysizew; } else
  11.  
  12.         list($width, $height, $type, $attr) = getimagesize($src);
  13.     if($width>$height) { $psize=$height/$width; $width=$mysize; $height=ceil($mysize*$psize); }
  14.     else { $psize=$width/$height; $width=ceil($mysize*$psize); $height=$mysize; }
  15.  
  16.   $size = getimagesize($src);
  17.   $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
  18.  
  19.   $icfunc = "imagecreatefrom".$format;
  20.   function_exists($icfunc);
  21.   $x_ratio = $width / $size[0];
  22.   $y_ratio = $height / $size[1];
  23.   $ratio       = min($x_ratio, $y_ratio);
  24.   $use_x_ratio = ($x_ratio == $ratio);
  25.   $new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio);
  26.   $new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio);
  27.   $new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width) / 2);
  28.   $new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);
  29.   $isrc = $icfunc($src);
  30.   $idest = imagecreatetruecolor($width, $height);
  31.   imagefill($idest, 0, 0, $rgb);
  32.   imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);
  33.   imagejpeg($idest);
  34.   imagedestroy($isrc);
  35.   imagedestroy($idest);
  36. //  return true;
  37. ?>
7. ALEN - 31 Августа, 2008 - 07:39:50 - перейти к сообщению
Вездеход
Ну вот Вы снова меня не поняли. Этот вариант уже проработан давно, и он не устраивает. МНе необходимо, чтоб это было просто функцией.

Т.е.:
1) я не вызываю отдельный файл и т.д.
2) не сохраняется 2 картинки, а все одной

Т.е. при вызове страницы код обрабатывает картинку - естественно возращает меньший размер, хотя по сути по тому адресу находится больший размер.
8. Andrey5555 - 31 Августа, 2008 - 10:25:55 - перейти к сообщению
ALEN
В моем варианте новой картинки не создаеться. Создаеться только переменная с картинкой и все. Исходное изображение не меняеться.
9. Вездеход - 31 Августа, 2008 - 13:03:09 - перейти к сообщению
ALEN
такого вы не сделаете. я пробовал - всё без результатно...
10. ALEN - 31 Августа, 2008 - 13:39:21 - перейти к сообщению
Вездеход
Почему же, можно конечно объеденить идею, хотя не совсем то, что нужно, но самое близкое.

Создаем файл с одним из выше описаных примеров, в него по GET передаем width,hight и адрес картинки.

Создаем функцию, в которой просто указываем width,hight и адресс картинки и все. Тоже но более похоже на нужный результат - хоть - это не реальный метод подгона. КАк в математике 2 в квадрате , для результата не перемножить 2 , а сложить - тот же конечно у меня сейчас пример. Но по крайне мере через функцию, как и требовалось!
11. Andrey5555 - 31 Августа, 2008 - 13:51:39 - перейти к сообщению
Моя функция пропорционально изменяет размер изображения, не изменяя исходной картинки
12. ALEN - 31 Августа, 2008 - 13:55:27 - перейти к сообщению
Andrey5555
))) Начнем с того, что не ваша, а в интернете исходники именно этой функции еще примерно с 2002 года лежат или 2004 , но в общем давно уже!
13. Andrey5555 - 31 Августа, 2008 - 17:41:49 - перейти к сообщению
ALEN вы не правы. Эту функцию я написал вчера по потребности. Не использую никаких исходников.
14. Вездеход - 31 Августа, 2008 - 17:42:10 - перейти к сообщению
ALEN
ну вот я и написал собсна все чтобы передавать через GET
зачем вам искать лишних проблем то собсна? )
у меня работает так - пока не жаловался.
15. ALEN - 31 Августа, 2008 - 18:01:01 - перейти к сообщению
Andrey5555
Хотя да немного другой, просто очень сильно похожи.
Ну концепция в этой задаче одинаковая при решении!
(Добавление)
Вездеход
Мне просто нужно короче это сделать, для заказчика! Поэтому функция будет!

 

Powered by ExBB FM 1.0 RC1