Форум → Программирование → PHP для идиотов → Нетривиальный ресайз
Нетривиальный ресайз
Страницы: ← Следующая страница →
-
Заказчику хочется чтобы все превьюшки фоток были одинакового размера (совершенно все,несмотря на исходный размер.Красиво и в линию).
Решил сделать при загрузке фото ресайз по одной стороне и последующей ручной обрезке ( crop & jquery),т.е если установленный размер 150 на 120,то фото обрежется на 120 по высоте и допустим на 300 по ширине (от исходного),а остальное он сам обрежет через интерфейс.
Но проблема в ином,как сделать такой ресайз,чтобы и высота и ширина были при любом исходном размере шире 150 и выше 120 px,но в пределах разумного. Трудность в том что исходный размер может быть 2000 на 1500 или вообще 2000 на 800. Подскажите универсальный вариант -
Фев. 4, 2011, 1:02 д.п., спустя 7 минут 52 секунды
http://debugger.ru/articles/thumbnails
читай про метод минимального сжатияСпустя 78 сек.если я понял, тебе как тут надо сделать - http://cafeyuga.ru/r-bar
все миниатюры 150 на 150 -
Фев. 4, 2011, 1:28 д.п., спустя 25 минут 34 секунды
imlil, задаешь нужные тебе параметры, а исходную картинку "жмешь" по той стороне, которая будет соответствовать твоей (нужной тебе) меньшей стороне.
То есть при нужной тебе 150*120 тебе сначала нужно найти что у исходника меньше, и если это высота, то её жмешь до 120, далее обрезаешь. Если ширина, то до 150 её жмешь и по высоте подрезаешь.
А если же идет несостыковка (исходник к примеру 900*880), то тут нужно небольшие уравнения математические придумать. -
Фев. 4, 2011, 2:09 д.п., спустя 41 минуту 10 секунд
используй коэффициент AR - аспект ратио.
считаешь AR фотки - в зависимости от того как сказал Givi - обрезаешь нужную сторону, потом resize (а AR у тебя уже верный) и ву аля
AR - отношение высоты к ширине к примеру
стоит добавить, что кропить лучше с обеих сторон и сторона фотки лучше пусть будет четное число -
Фев. 4, 2011, 2:12 д.п., спустя 3 минуты 46 секунд
http://community.livejournal.com/ru_php/1424646.html
там про создание миниатюр с примерамиСпустя 22 сек.на самом деле довольно тривиальный случайне всё полезно, что в swap полезло -
Фев. 4, 2011, 11:27 д.п., спустя 9 часов 14 минут 52 секунды
imlil, все что тебе надо это одна функция:
http://ru2.php.net/manual/en/function.imagick-cropthumbnailimage.php
Только стоит обратить внимание на первый коммент, в некоторых версиях наблюдается некорректая работа (в некоторых 100 пудово работает). Там приведено решение и на этот случай.
Спустя 125 сек.Да еще, как вариант, помню r2d2 приводил код своей функции, основанной на GD. Ищи по форуму. -
-
Фев. 14, 2011, 12:54 д.п., спустя 1 день 22 часа 57 минут
Наверное, не то, что тебе нужно, но всё-таки…
Для создания превью писал свою функцию. Однако она ужимала фото пропорционально реальному размеру и вписывала его в рамки, переданные в качестве праметров в функцию. То есть, фото по большей своей стороне вписывалось в рамки, за пределы которого превью не имеет права выходить.
В функцию передаются некоторые "левые" параметры - UID юзера и папка назначения. На них можно не обращать внимание.function resized_image ($image, $UID, $Xmax, $Ymax, $folder)
{
$type = $image ['type'];
$file = $image ['tmp_name'];
$name = $image ['name'];
if ($type=="image/png" || $type=="image/gif" || $type=="image/jpeg")
{
$arr = getimagesize($file);
$width = $arr[0];
$height = $arr[1];
if ($width <= $Xmax && $height <= $Ymax)
{
if ($type == "image/jpeg")
{
copy ($file, $folder."/".$UID.".jpg");
}
if ($type == "image/png")
{
copy ($file, $folder."/".$UID.".png");
}
if ($type == "image/gif")
{
copy ($file, $folder."/".$UID.".gif");
}
}
else
{
if ($width > $Xmax && (16/9) * $width > $height)
{
$W=$Xmax;
$H=($W * $height) / $width;
}
if ($height > $Ymax && (9/16) * $height > $width)
{
$H = $Ymax;
$W = ($width * $H) / $height;
}
if ($type == "image/png")
{
$dst=imagecreatefrompng($file);
$src=imagecreatetruecolor($W, $H);
imagecopyresampled ($src, $dst, 0, 0, 0, 0, $W, $H, $width, $height);
imagepng($src, $folder."/".$UID.".png");
}
if ($type == "image/gif")
{
$dst = imagecreatefromgif($file);
$src = imagecreatetruecolor($W, $H);
imagecopyresampled ($src, $dst, 0, 0, 0, 0, $W, $H, $width, $height);
imagejpeg($src, $folder."/".$UID.".gif");
}
if ($type == "image/jpeg")
{
$dst=imagecreatefromjpeg($file);
$src=imagecreatetruecolor($W, $H);
imagecopyresampled ($src, $dst, 0, 0, 0, 0, $W, $H, $width, $height);
imagejpeg($src, $folder."/".$UID.".jpg");
}
}
return true;
}
else return false;
} -
Фев. 14, 2011, 11:11 д.п., спустя 10 часов 17 минут 44 секунды
Я, конечно, не знаю чего окончательно ТС надо. Но вписывание в рамки с пропорциональным изменением размеров, однозначно не дает эффекта "все превью одного размера", о котором идет речь в первом посте.
и вписывала его в рамки -
Фев. 14, 2011, 12:20 п.п., спустя 1 час 8 минут 29 секунд
ололол!!!!! даешь саол!Сапожник без сапог -
Фев. 14, 2011, 1:39 п.п., спустя 1 час 19 минут 39 секунд
if ($type == "image/jpeg")
{
$dst=imagecreatefromjpeg($file);
$img = 'imagecreatefrom'.$ext;
$img($file); -
-
-
-
Фев. 14, 2011, 3:14 п.п., спустя 41 минуту 25 секунд
pjpeg (progressive)
и что? делаешь функцию imagecreatefrompjpeg(); и возвращаешь im
Страницы: ← Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!