ресайз картинок

R00miss

Guest
ресайз картинок

Привет... делаю галерею, нужно в превью как то картинки уменьшать... чтобы не 800x600 была, а например 100x150. как это сделать?
 

Zeratul

Guest
Ну коли уж тема недавно поднималась, то новую создавать не буду.
Вопрос: у меня при пережатии картинок в меньшие "правильным" методом качество картинок теряется - они становятся резкими. То же саме фотошопе дает размытие. Как можно ресайзить картинки с сохранением размытия?
 

Zeratul

Guest
:)
уже нашел в ImageJPEG есть настройка - качество. Очень даже хорошо получается.
 

Zeratul

Guest
ЗЫ: кстати, орёл, если бы я хотел делать фотошопом, то здесь бы этот вопрос незадавал :)
А до примерения ImageMagic надо еще дорасти - т.е. осознать необходимость использования :) Кстати, если кинешь ссылку на код, использующий эту фичу буду премного благодарен.
 

fixxxer

К.О.
Партнер клуба
С точки зрения PHP все крайне просто - один Exec.
:)
по поводу использования - man ImageMagick. Там мнооого параметров. :)
По поводу именно ресайза -
man convert
/-resize
:)
 

commando

Guest
Я обычно использую следующую функцию:
PHP:
function ResizeImg($image, $new_width, $new_height)
{
  eregi(".(.*)$",$image,$regs);
  switch($regs[1])
  {
     case "gif": $srcImage = ImageCreateFromGIF($image);
                             break;
     case "jpg": $srcImage = ImageCreateFromJPEG($image);
            		     break;
     case "png": $srcImage = ImageCreateFromPNG($image);
            		     break;
     default   : $srcImage = ImageCreateFromJPEG($image);
            		     break;
  }
  $srcWidth = ImageSX($srcImage);
  $srcHeight = ImageSY($srcImage);

  $ratioWidth = $srcWidth/$new_width;
  $ratioHeight = $srcHeight/$new_height;
  if( $ratioWidth < $ratioHeight)
  {
    $destWidth = $srcWidth/$ratioHeight;
    $destHeight = $new_height;
  }
  else
  {
    $destWidth = $new_width;
    $destHeight = $srcHeight/$ratioWidth;
  }
  $destImage = imagecreate($destWidth, $destHeight);
  ImageCopyResized($destImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);
  header ("Content-type: image/jpeg");
  ImageJPEG($destImage,"",100);
  ImageDestroy($srcImage);
  ImageDestroy($destImage);
}
 

Фанат

oncle terrible
Команда форума
Коммандо, программы писать - это тебе не террористов по джунглям щелкать.
Так что я покритикую немножко.
default : $srcImage = ImageCreateFromJPEG($image);
break;
}
как всегда - видна гигантская работа мысли.
если человек пишет "а я делаю вот так" и вываливает код, то можно не сомневаться - код гениальный.
Ты не мог бы прокомментировать вышепроцитированный кусок?
В каких случаях и с каким успехом он будет выполняться?

$srcWidth = ImageSX($srcImage);
$srcHeight = ImageSY($srcImage);
А использовать данные, полученные выше, через getimagesize - некошерно?
Тебе не кажется, что при использовании этой функции качество немного страдает?
А мне кажется.

Судя по всему, функция эта служит для ресайза на лету, а не в файл. причем вызывается явно для показа целой галереи превьюшер. Ты не проьбовал мерять загрузку своего сервера в момент, когда идет обращение к галерее?
попробуй. Запасись валидолом.
ВпрочеМ, если количество посетителей составляет полтора человека в день, включая тебя, то можешь не беспокоиться.
 

Altex

Новичок
>> eregi(".(.*)$",$image,$regs)
этого бы тоже не понадобилось если делать через getimagesize() -> в результате вместо 3-х операций была бы одна
 

Zeratul

Guest
Фанат разошелся... Сразу вспоминается что "утро добрым не бывает" :)))
Ну теперь по твоему посту.
1. Человек привел код как он делает. Делать так или не делать другим - этих самых других дело. Он просто показал как ему нравится. Мы можем посмотреть и сказать: у нас лучше, у нас хуже или опа... а вот так я не пробовал (и запомнить на всякий пожарный).
А поливать грязью код видимо не стоит по одной единственной причине - код работает. Кстати, тебя учительница в школе тупорылым дол...ом не называла когда ты делал ошибки по русскому языку и математике? Думаю,
нет. Тогда при чем тут "видна гигантская работа мысли"?
...
босс пришел - срочняк. По коду выскажусь позже.
 

Фанат

oncle terrible
Команда форума
Altex, упс, сорри, не заметил, что там нету гетимаджсайз вообще.
вот что значит инерция мышления!

Zeratul, А, ну конечно. Надо похвалить и оставить, как есть? Типа, приходите другие люди на форум, смотрите, как правильно?
А еще надо было облизать его с ног до головы и посюсюкать?
А почему я не выкладываю код если не уверен в нем на сто процентов? А если в нем находят ошибку, то не нуждаюсь в услугах адвокатов, а говорю СПАСИБО?

Работает, говоришь?
А если внимательно прочесть мой комментарий и представить, в каких случаях работать не будет?

Сюсюкай, сколько влезет.
Однако умный человек и без него возьмет и исправит.
А глупому твое сюсюканье и вовсе не поможет.
 

Фанат

oncle terrible
Команда форума
и это я еще оставил без внимания сомнительную ценность ресайза гифа в джпг.

Все, что я хочу от людей - это чтобы в программе была видна логика.
простая логика.
Зачем происходит та или иная операция.
Правда, сейчас я вижу, для чего был оставлен дефолт - поскольку тип файла определяется по расширению, то есть вероятность. Однако отдельный кейс для джипега все равно теряет смысл.
 

Zeratul

Guest
to Фанат: вспоминаю как я свою первую прогу с использованием mysql делал. Был таблица, в которую добавлялись записи. Про auto_increment я тогда даже не слышал. И чтобы добавлять новое значение, я писал текущий максимальный инфекс в текстовый файл. При записи в БД я из файла считывал индекс, увеличивал на единицу, записывал в БД, перезаписывал файл с увеличенным значением.
Бред? Да. Но работает до сих пор. :)
 

Фанат

oncle terrible
Команда форума
но ты не вываливаешь это в форум?
И ты прекрасно сейчас можешь представить случаи, когда это работать не будет.
У всех обиженных почему-то одна проблема.
Вы все думаете, что я, ругая код, ругаю человека.
И начинаете оправдываться и оправдывать.
Вместо того, чтобы либо исправить, либо обосновать свою позицию. Не нужно. Это все лишнее.

Ты хотел что-то по функции написать.
 

Zeratul

Guest
ближе к вечеру :)
Кстати, я так и непонял чем тебе ImageCopyResized не понравился.
Я использую ImageCopyResampled. Не знаю. Вроде все ок.
------------------------
Судя по всему, функция эта служит для ресайза на лету, а не в файл. причем вызывается явно для показа целой галереи превьюшер. Ты не проьбовал мерять загрузку своего сервера в момент, когда идет обращение к галерее?
попробуй. Запасись валидолом.
------------------------
Ну не факт... :) Человек в итоге пишет в файл. Думаю, файл он потом и использует. Я чего плохого в том чтобы один раз пройтись по огромному количеству картинок, отресайзить из и потом пусть юзаются? Скорость тут не определяющая - админу пофиг - 5 или 10 минут он будет пить чай.
А на лету ресайз это конечно смертельный номер :)
 
Сверху