Форум → Программирование → 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 Фев. 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, задаешь нужные тебе параметры, а исходную картинку "жмешь" по той стороне, которая будет соответствовать твоей (нужной тебе) меньшей стороне. Фев. 4, 2011, 1:28 д.п., спустя 25 минут 34 секунды
                                    
                                imlil, задаешь нужные тебе параметры, а исходную картинку "жмешь" по той стороне, которая будет соответствовать твоей (нужной тебе) меньшей стороне.
 То есть при нужной тебе 150*120 тебе сначала нужно найти что у исходника меньше, и если это высота, то её жмешь до 120, далее обрезаешь. Если ширина, то до 150 её жмешь и по высоте подрезаешь.
 А если же идет несостыковка (исходник к примеру 900*880), то тут нужно небольшие уравнения математические придумать.
- 
                    
                    
                         Фев. 4, 2011, 2:09 д.п., спустя 41 минуту 10 секунд
                                    
                                используй коэффициент AR - аспект ратио. Фев. 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 Фев. 4, 2011, 2:12 д.п., спустя 3 минуты 46 секунд
                                    
                                http://community.livejournal.com/ru_php/1424646.html
 там про создание миниатюр с примерамиСпустя 22 сек.на самом деле довольно тривиальный случайне всё полезно, что в swap полезло
- 
                    
                    
                         Фев. 4, 2011, 11:27 д.п., спустя 9 часов 14 минут 52 секунды
                                    
                                imlil, все что тебе надо это одна функция: Фев. 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 минут
                                    
                                Наверное, не то, что тебе нужно, но всё-таки… Фев. 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, 11:11 д.п., спустя 10 часов 17 минут 44 секунды
 Я, конечно, не знаю чего окончательно ТС надо. Но вписывание в рамки с пропорциональным изменением размеров, однозначно не дает эффекта "все превью одного размера", о котором идет речь в первом посте.
 и вписывала его в рамки
- 
                    
                    
                         Фев. 14, 2011, 12:20 п.п., спустя 1 час 8 минут 29 секунд
                                    
                                ололол!!!!! даешь саол!Сапожник без сапог Фев. 14, 2011, 12:20 п.п., спустя 1 час 8 минут 29 секунд
                                    
                                ололол!!!!! даешь саол!Сапожник без сапог
- 
                    
                    
                         Фев. 14, 2011, 1:39 п.п., спустя 1 час 19 минут 39 секунд Фев. 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 секунд Фев. 14, 2011, 3:14 п.п., спустя 41 минуту 25 секунд
 pjpeg (progressive)
 и что? делаешь функцию imagecreatefrompjpeg(); и возвращаешь im
Страницы: ← Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!
 
         
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                    