Forum Webscript.Ru

Программирование => PHP => Тема начата: semya от 29 Января 2003, 12:41:07

Название: изменение размера картинки
Отправлено: semya от 29 Января 2003, 12:41:07
Можно ли на пхп прочитать какую-нибудь картинку (jpg, gif), как нетипизированный файл к примеру, и отмасштабировать то есть более-менее качественным алгоритмом изменить размер изображения? это нужно сделать БЕЗ использования дополнительных модулей пхп для рабты с картинками... и какие вообще алгоритмы существуют...

спасибо
Название: изменение размера картинки
Отправлено: Меняздесьдавнонет от 29 Января 2003, 14:02:17
можно, конечно.
алгоритмы существуют.
Читаешь книжки по графическим форматам, алгоритмам - и реализуешь. PHP в этом случае ничем не хуже Си.
Название: изменение размера картинки
Отправлено: Maniac от 29 Января 2003, 23:48:59
Цитировать
и реализуешь

Хотя рано или поздно ты поймешь, что лучше использовать библиотеки. Кстати, с гифами работать ты скорее всего не сможешь
Название: изменение размера картинки
Отправлено: Stas от 30 Января 2003, 02:14:03
ia pol\'zuius\' ImageMagick cherez system(\'convert -geometry .....

ochen\' kachestvenno..

A takzhe v Php est\' imagecopyresampled(), pomimo imagecopyresized()
Название: изменение размера картинки
Отправлено: Макс от 30 Января 2003, 03:09:19
Цитировать
ia pol\'zuius\' ImageMagick cherez system(\'convert -geometry .....

ochen\' kachestvenno..

A takzhe v Php est\' imagecopyresampled(), pomimo imagecopyresized()
если человеку GD не дают, то imageMagic и подавно. Ксати к нему вроде есть экстеншн на С написанный, так что можно и без system обойтись
Название: изменение размера картинки
Отправлено: semya от 30 Января 2003, 09:47:45
пасибо всем большое, ищу доку по графическим форматам, буду разбираться...

но вот вопрос, насколько это загружает сервер, если к примеру скрипт будет на страницу ресайзить по 10 картинок где-то...

проблема действительнов том, что на моем хостере пхп установлен as is и у них как они сказали нету code support...
Название: изменение размера картинки
Отправлено: Меняздесьдавнонет от 30 Января 2003, 12:12:21
Загружать сервер будет безумно, поскольку картинка, к примеру, 800х600 пикселей с глубиной цвета 24 бита на пиксель будет занимать в памяти... ну, сам посчитай, сколько у тебя одна картинка сожрет памяти.

Хостера надо МЕНЯТЬ и не заниматься глупостями.
Название: изменение размера картинки
Отправлено: Xander от 30 Января 2003, 12:44:11
А еще картинки надо ресайзить один раз. Генерировать превьюшки динамически при просмотре страницы - в корне неправильно.
Название: изменение размера картинки
Отправлено: ThE0ReTiC от 30 Января 2003, 13:48:24
Xander
Цитировать
Генерировать превьюшки динамически при просмотре страницы - в корне неправильно.

Это еще почему?
Название: изменение размера картинки
Отправлено: semya от 30 Января 2003, 14:02:20
Цитировать
Это еще почему?

Скорее всего потому, что придется проделывать одну и ту же операцию для каждого посетителя
Название: изменение размера картинки
Отправлено: Xander от 30 Января 2003, 14:02:38
Если речь идет о превьюшках aka thumbnails, то я не понимаю вопроса. Допустим есть галерейка, 8 картинок на страничку, и превьюшки генерятся в реальном времени. Если увеличится количество просмотров и/или количество превьюшек на странице, или размер исходных изображений, то нагрузка на сервер возрастет просто до неприличия.

А если речь не идет о превьшках и их массовой генерации, то мой ответ не актуален, да.
Правда тогда я не вижу смысла ресайзить картинки PHP, а не фотошопом.
Название: изменение размера картинки
Отправлено: Xander от 30 Января 2003, 14:04:32
P.S. Вот вам URL: http://vcl.ctrl-c.liu.se/vcl/Artists/New/index01-by-date.html
как думаете, они генерят превьюшки на лету? ;)
Название: изменение размера картинки
Отправлено: semya от 30 Января 2003, 14:10:26
Цитировать
нагрузка на сервер возрастет просто до неприличия


абсолютно согласен - 1000 посещений в день и status=suspended на хостере
Название: изменение размера картинки
Отправлено: Stas от 30 Января 2003, 15:13:46
Xander,
A vot photoshopom 100 kartinok, naprimer, srazu ty ne sdelaesh\' takim razmerom kak nado dlia thumbnails. A vot convert -geometry s kakim nit\' sh scriptom raz pliunut\'.

A to chto ih delat\' nado vsego 1 raz - eto po-moemu ochevidno. Skorei nado pisat\' skripty tak, chto esli thumbnaila net, togda generirovali i sohraniali, a esli est\' - to ispol\'zovali sushestvuiushei...
Название: изменение размера картинки
Отправлено: Xander от 30 Января 2003, 15:25:20
Stas
На самом-то деле сделаю, если нужно будет. Там появились такие функции. Но сделать это консольной alchemy под винды будет раз в 10 быстрее :))

Ну, по-моему тоже очевидно. Но были же вопросы...
Цитировать

Генерировать превьюшки динамически при просмотре страницы - в корне неправильно.

Это еще почему?
Название: изменение размера картинки
Отправлено: Maniac от 30 Января 2003, 17:39:05
Stas
Во-первых, сделает. Там есть пакетная обработка фоток. Правда лично я пользуюсь пятым ACDSee - и вполне доволен (а обрабатываю я фоток по сто ежедневно)
Название: изменение размера картинки
Отправлено: Stek от 30 Января 2003, 21:07:42
Кстати, а кто нибудь знает как с ImageMagic делать тумбы правильной формы, т.е. получать скажем всегда 130*90 в нормальной пропорции, не сжатой и не вытянутой. А то сейчас приходится сначала делать тумбу размерами 130*90+ или же 130+*90, а потом ее при помощи crop подгонять под правильные 130*90.
Название: изменение размера картинки
Отправлено: Меняздесьдавнонет от 31 Января 2003, 01:34:35
Лично мне такие тумбы не нравятся.
Я делаю сохраняя пропорции.
Беру высоту и ширину, и что больше - то и уменьшаю до предела. Если широта допустим, больше высоты, то уменьшаю до 130 и пропорционально - высоту.
А залить незанятое пространство можно и бэкграундом банальным.
Название: изменение размера картинки
Отправлено: semya от 31 Января 2003, 10:07:31
Цитировать
Правда лично я пользуюсь пятым ACDSee - и вполне доволен (а обрабатываю я фоток по сто ежедневно)

Самое мудрое решение - быстро, практично, качественно! Тем же пользуюсь

Цитировать
Лично мне такие тумбы не нравятся.


Stek
thumbnails должны быть пропорциональными - это точно! и нельзя все картинки, например, скриншоты веб-сайтов, если они разной высоты, подгонять под одну с жесткой шириной... теряется правильность форм и корректное отображение... но при  этом все зависит от картинок конечно...
Название: изменение размера картинки
Отправлено: Stek от 31 Января 2003, 21:45:24
Цитировать
thumbnails должны быть пропорциональными

Вот только не надо всех под одну гребенку, часто эта правильность вовсе и не нужна,  она портит весь вид. В то же время ровненькие тумбы очень приятны для глаза :)
Название: изменение размера картинки
Отправлено: dub от 05 Февраля 2003, 02:56:59
Stek
Согласен. Пример: две различные разметки при просмотре вертикальных и горизонтальных фоток. Дизайн разметки в этом случае определяется главным элементом страницы - большой фоткой. При этом существует еще несколько thumbnailов, которые позволяют просмотреть гругие катинки. Так вот, в этом случае никак нельзя с точки зрения уравновешенности композиции использовать одни и те же превьюшки, когда большая фотка - горизонтальная и вертикальная. Когда она вертикальная, превьюшки должны повторять вертикальные пропорции, когда горизонтальная - горизонтальные. Пример (http://podium.com.ua/model.phtml?s=f&id=33).

Вопрос: как с помощью GD генерить оба варианта превьюшек?

Если загружается, к примеру,  foto.jpg 100*200px (ширина*высота) то:
а) уменьшать пропорционально, сохранять как fotothumbver.jpg (25*50px)
б) уменьшать ширину до 50px, а высоту обрезать до 25px. Сохранять как fotothumbhor.jpg (50*25px)

И то же, только наоборот, если фотка изначально горизонтальная.

Это алгоритм, а можно ли его с помощью gd реализовать? Конкретнее, поддерживает ли gd cropping?
Название: изменение размера картинки
Отправлено: Меняздесьдавнонет от 05 Февраля 2003, 11:47:26
О, господи, еще один.
какой кроппинг?
тут никакая гд не нужна.
Чем у тебя сделан белый фон - в самой он картинке, или  это фон ячейки в таблице - этого НЕ ВИДНО!

Превьюшки делаются разными.
И все.
Не надо ничего резать.
Надо просто уменьшать пропорционально.

Если же ты хочешь, чтобы фона вообще не было, и ради этого резать картинку ,например голову своей модели отрезать - ха-ха, как смешно - то для чего тебе координаты в параметрах функций - для красоты?
Название: изменение размера картинки
Отправлено: dub от 05 Февраля 2003, 13:39:40
RomikChef
Ты пример (http://podium.com.ua/model.phtml?s=f&id=33)-то посмотри повнимательней чуток, прежде чем так эмоционально советовать сделать все банальным бэкграундом. Раз уж я не совсем ясно сформулировал ситуацию словами.

Цитировать
Чем у тебя сделан белый фон - в самой он картинке, или это фон ячейки в таблице - этого НЕ ВИДНО!


Это смотря в какой таблице. Повторюсь: в моем случае разметка меняется. Сморти здесь (http://podium.com.ua/model.phtml?s=f&id=33) и здесь (http://podium.com.ua/modelv2.phtml?s=f&id=33). А превьюшки для обоих вариантов разметки желательно сгенерить еще в процессе загрузки больших фоток. И кроппинг нужен.

Цитировать
для чего тебе координаты в параметрах функций - для красоты?


Спасибо. Чем не кроппинг.
Название: изменение размера картинки
Отправлено: AlieN от 09 Февраля 2003, 08:16:18
от блин языкочесалки :)


$file="fotos/foto_".$HTTP_GET_VARS["f_id"].".jpg";
$im=imagecreatefromjpeg($file);
$data=getimagesize($file);
$width=$data[0];
if($width>150)
 {
 $height=round((150*$data[1])/$data[0])+1;
 $width=150;
 }else{
$width=$data[0];
$height=$data[1];
}
$new_im = ImageCreateTrueColor($width, $height);
imagecopyresized ( $new_im, $im, 0,0,0,0,$width, $height,$data[0],$data[1]);
header("Content-type: image/jpeg");
imagejpeg($new_im,"",90);


Здесь картинка урезается по горизонтали до 150 пикселей
Название: изменение размера картинки
Отправлено: Меняздесьдавнонет от 09 Февраля 2003, 13:22:30
AlieN
Ну, спасибо, родной - а без тебя мы бы не знали, как это сделать.

и спасибо за функцию. я-то, дурак, вместо imagecopyresized - imagecopyresampled использовал!
Название: изменение размера картинки
Отправлено: AlieN от 10 Февраля 2003, 09:11:15
RomikChef
Ну это личное дело каждого: я лично основывался на мануале PHP
Название: изменение размера картинки
Отправлено: dub от 10 Февраля 2003, 19:19:02
AlieN
Спасибо.
Название: изменение размера картинки
Отправлено: Меняздесьдавнонет от 11 Февраля 2003, 07:10:30
AlieN, я тоже.
Но не на таком ископаемом, как у тебя.

dub , скажи, а чего в этом приведенном коде такого, чего ты не знал?
Или свои превьюшки ты не сам генерил?
Название: изменение размера картинки
Отправлено: dub от 11 Февраля 2003, 19:23:33
RomikChef Не то чтобы не знал. Общее представление имел о функциях работы с изображениями, но на практике не использовал пока. Свои превьюшки резал ручками. А сейчас нужно будет этот процесс автоматизировать. Так что любой живой пример впрок.
Название: изменение размера картинки
Отправлено: Меняздесьдавнонет от 11 Февраля 2003, 20:50:12
Настоятельно рекомендую imagemagick
я сам раньше пользовался GD, но imagemagick на порядку лучше. Удобнее, мощнее, проще, ширше.
Хотя для простого уменьшения джипегов подойдет и imagecopyresampled
Название: изменение размера картинки
Отправлено: dub от 12 Февраля 2003, 04:03:07
RomikChef
Этот? http://www.imagemagick.org
Что-то сайтец у них лежит вроде :(
Так что вся инфа пока - то что это вроде как command line tool. Значит, скорее всего, использовать его на чужом хостинге будет проблематично. Или?
Название: изменение размера картинки
Отправлено: Меняздесьдавнонет от 12 Февраля 2003, 11:14:17
На любом нормальном хостинге можно поставить и использовать imagemagick. или он уже стоит.
Название: изменение размера картинки
Отправлено: AlieN от 12 Февраля 2003, 14:38:51
Цитировать
вместо imagecopyresized - imagecopyresampled использовал!

Ну я всю картинку сжимаю а не кусок
Может у тебя картинка теряется?

Собственно кто дурак-то? %)