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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Смена размера изображения

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
ALEN
Отправлено: 29 Августа, 2008 - 15:06:23
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Как сохранить картинку с иными размерами - это понятно. А вот, как указать новый размер при загрузке страницы, не сохраняя картинку.

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



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




ALEN пишет:
и естественно с меньшим размером в кбайтах

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

как ж спать хоцца Огорчение


-----
Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
 
 Top
ALEN
Отправлено: 30 Августа, 2008 - 07:44:26
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Конечно, есть! Но нужно использовать только GD
(Добавление)
Цитата:
Как сохранить картинку с иными размерами - это понятно

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

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

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

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


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




Вот код, будут вопросы - отвечу:

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. ?>
 
 Top
ALEN
Отправлено: 30 Августа, 2008 - 19:14:14
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Andrey5555
Этот вариант давно использую и он сохраняет картинку, а мне нужно просто вывисти ее с другой массой и размером, не копирую, и не меняя исходную картинку
 
 Top
Вездеход
Отправлено: 31 Августа, 2008 - 00:29:59
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




ну если тупо вывести - то вот так мона.
сохраните код в отдельный скрипт. и как адрес картинки пишите вот это:
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. ?>

(Отредактировано автором: 31 Августа, 2008 - 00:36:15)



-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
ALEN
Отправлено: 31 Августа, 2008 - 07:39:50
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Вездеход
Ну вот Вы снова меня не поняли. Этот вариант уже проработан давно, и он не устраивает. МНе необходимо, чтоб это было просто функцией.

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

Т.е. при вызове страницы код обрабатывает картинку - естественно возращает меньший размер, хотя по сути по тому адресу находится больший размер.
 
 Top
Andrey5555
Отправлено: 31 Августа, 2008 - 10:25:55
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




ALEN
В моем варианте новой картинки не создаеться. Создаеться только переменная с картинкой и все. Исходное изображение не меняеться.
 
 Top
Вездеход
Отправлено: 31 Августа, 2008 - 13:03:09
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




ALEN
такого вы не сделаете. я пробовал - всё без результатно...


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
ALEN
Отправлено: 31 Августа, 2008 - 13:39:21
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Вездеход
Почему же, можно конечно объеденить идею, хотя не совсем то, что нужно, но самое близкое.

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

Создаем функцию, в которой просто указываем width,hight и адресс картинки и все. Тоже но более похоже на нужный результат - хоть - это не реальный метод подгона. КАк в математике 2 в квадрате , для результата не перемножить 2 , а сложить - тот же конечно у меня сейчас пример. Но по крайне мере через функцию, как и требовалось!
 
 Top
Andrey5555
Отправлено: 31 Августа, 2008 - 13:51:39
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




Моя функция пропорционально изменяет размер изображения, не изменяя исходной картинки
 
 Top
ALEN
Отправлено: 31 Августа, 2008 - 13:55:27
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Andrey5555
))) Начнем с того, что не ваша, а в интернете исходники именно этой функции еще примерно с 2002 года лежат или 2004 , но в общем давно уже!
 
 Top
Andrey5555
Отправлено: 31 Августа, 2008 - 17:41:49
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




ALEN вы не правы. Эту функцию я написал вчера по потребности. Не использую никаких исходников.
 
 Top
Вездеход
Отправлено: 31 Августа, 2008 - 17:42:10
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




ALEN
ну вот я и написал собсна все чтобы передавать через GET
зачем вам искать лишних проблем то собсна? )
у меня работает так - пока не жаловался.


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
ALEN
Отправлено: 31 Августа, 2008 - 18:01:01
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Andrey5555
Хотя да немного другой, просто очень сильно похожи.
Ну концепция в этой задаче одинаковая при решении!
(Добавление)
Вездеход
Мне просто нужно короче это сделать, для заказчика! Поэтому функция будет!

(Отредактировано автором: 31 Августа, 2008 - 18:02:32)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB