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 » » Вопросы новичков » Сложный ресайз фотографий

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

1. GEN_18 - 23 Октября, 2012 - 22:25:26 - перейти к сообщению
Ребят, ни как не могу решить одну проблему:
Дали задание - написать скрипт, который при загрузке любого изображения(горизонтального, вертикального, квадратного), делал ресайз этого изображения размером 300 на 204. Вроде все просто, но есть условие, что если размер загружаемого изображения не пропорционален размеру выходного, то нужно его обрезать так, чтоб после ресайза обрезанного изображения можно было получить не искаженную, без потерь качества, картиночку 300 на 204 (грубо говоря, просто уменьшенную копию)

как обычный ресайз делать - это я знаю. Не могу найти как обрезать изображение(горизонтальное, вертикальное, квадратное) так, чтоб потом провести этот ресайз
2. Okula - 23 Октября, 2012 - 22:43:15 - перейти к сообщению
GEN_18, для того чтобы изображение не исказилось придётся изменять один из параметров (ширину или высоту). И уже пропорционально расчитывать второе значение.
В школе пропорции научили считать? Так вот тут так же Улыбка
3. dubasua - 23 Октября, 2012 - 22:59:20 - перейти к сообщению
Сначала пропорционально уменьшаешь картинку до те тех пор пока у тебя высота не станет 204 или ширина 300. А потом и смотришь что тебе нужно обрезать. Как правило обрезают или средину или с левого верхнего угла.
4. DlTA - 24 Октября, 2012 - 00:01:22 - перейти к сообщению
есть у меня вот такая функция немного иной функционла, но можно допилить
описание: есть входное, любого размер, и есть выходной размер, исходное пропорционально масштабируется, максимально подгоняясь под выходной размер,
Спойлер (Отобразить)
5. GEN_18 - 24 Октября, 2012 - 09:13:43 - перейти к сообщению
Okula, вот именно, только как это сделать...я пока не врубил, но пытаюсь ))

DlTA, Ваш скрипт отлично работает, подгонят под заданные параметры(или высоту, или ширину), впрочем, как и писали, нужно доработать, чтоб картинки получались точно выходного размера

Откапал в старых скриптах что то похожее:
PHP:
скопировать код в буфер обмена
  1. function imageresize($outfile,$infile,$neww,$newh,$quality) {
  2.     $im=imagecreatefromjpeg($infile);
  3.     $k1=$neww/imagesx($im);
  4.     $k2=$newh/imagesy($im);
  5.     $k=$k1>$k2?$k2:$k1;
  6.  
  7.     $w=intval(imagesx($im)*$k);
  8.     $h=intval(imagesy($im)*$k);
  9.  
  10.     $im1=imagecreatetruecolor($w,$h);
  11.     imagecopyresampled($im1,$im,0,0,0,0,$w,$h,imagesx($im),imagesy($im));
  12.  
  13.     imagejpeg($im1,$outfile,$quality);
  14.     imagedestroy($im);
  15.     imagedestroy($im1);
  16.     return true;
  17.     }


но у DlTA все равно лучше
ура, теперь я получаю всегда на выходе изображение размером 300 на xxx
теперь осталось только обрезать его, как сказал dubasua
А как сделаю - выложу скрипт
6. Panoptik - 24 Октября, 2012 - 10:14:46 - перейти к сообщению
Спойлер (Отобразить)
вот мое наработанное. несколько параметризированное. режет пропорционально картинку согласно размерам и центрирует согласно параметрам
7. GEN_18 - 24 Октября, 2012 - 10:41:18 - перейти к сообщению
Panoptik АААААААааффигенно!!! как раз то, что нужно
спасибо!!!
И всем спасибо за свои скрипты и помощь.
Но, все же, я для себя, попробую еще усовершенствоать скрипт DlTA


еще раз спасибо!!! очень выручили

 

Powered by ExBB FM 1.0 RC1