Форум → Программирование → PHP для идиотов → Загрузка изображений, изменение ширины и высоты на лету.
Загрузка изображений, изменение ширины и высоты на лету.
Страницы: ← Предыдущая страница • Следующая страница →
-
3 апреля 2009 г. 15:03, спустя 1 минуту 10 секунд
adw0rd, полная хуйня получилась?)) а то я ребеной одновременно сидел + памперс менял, потом спать укладывал, а когда нажал запостить мне "уже 14 новых сообщений" )))))))))))Сапожник без сапог -
3 апреля 2009 г. 15:19, спустя 15 минут 41 секунду
phpdude, не, мне понравилось :)))https://smappi.org/ - платформа по созданию API на все случаи жизни -
3 апреля 2009 г. 15:26, спустя 7 минут 10 секунд
AlexB, смешной ты человек. возьми фотошоп, сделай ресайз 100 по длинной стороне с сохранением пропорций. какой будет результат?
хочешь с обрезкой? поставь параметр $do_cut=true
1. Каким боком здесь фотошоп? Кто будет фотошоп брать? Секретарша, которая фотки на сайт размещает? Она вообще не в курсе таких слов. Какие ей дали фотки, такие и аплоадит.
2. Насчет параметра do_cut, да ты прав, не заметил сразу, с ним работает вроде аналогично cropThumbnailImage, только непонятно зачем нужно писать 70 строк кода, для того чтобы сделать, то для чего уже есть инструмент? Причем инструмент на базе более быстрой и качественнее работающей с графикой библиотеки. Собственно с этого разговор и начался.
3. Насчет того что "в большинстве случаев нужно масштабирование БЕЗ обрезки", не согласен ибо дизайн требует определенных размеров, а заливают как уже было сказанно в п.1 что бог на душу положит. Кроме того, открою тебе еще один секрет. )) Есть еще функция thumbnailImage, которая делает все без обрезки т.е. вписывает в прямоугольник. Еще все функции ресайза в imagick умеют расчитывать второе измерение сами, если скормить false. В общем, полно всяких вкусностей. Нафига тратить время и плодить код?
4. И наконец, ты в курсе, что когда делаешь превьюшки нефигово бы делать sharpen? -
3 апреля 2009 г. 15:42, спустя 15 минут 54 секунды
AlexB, еще раз уважаю :)
сам раньше спиной за подобнуюхуйнюфункциюfunction img_resize($src, $fname= false, $width= 100, $leaveoldration = true, $height= 100, $rgb= 0xFFFFFF)
{
if (!file_exists($src))
{
return false;
}
$size= getimagesize($src);
if ($size === false)
{
return false;
}
$format= strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
$icfunc= "imagecreatefrom" . $format;
if (!function_exists($icfunc))
{
return false;
}
$x_ratio= $width / $size[0];
$y_ratio= $height / $size[1];
$ratio= min($x_ratio, $y_ratio);
$use_x_ratio= ($x_ratio == $ratio);
$new_width= $leaveoldration ? ($use_x_ratio ? $width : floor($size[0] * $ratio)) : floor($size[0] * $ratio);
$new_height= $leaveoldration ? (!$use_x_ratio ? $height : floor($size[1] * $ratio)) : floor($size[1] * $ratio);
$new_left= $leaveoldration ? ($use_x_ratio ? 0 : floor(($width - $new_width) / 2)) : 0;
$new_top= $leaveoldration ? (!$use_x_ratio ? 0 : floor(($height - $new_height) / 2)) : 0;
$isrc= $icfunc ($src);
$idest= imagecreatetruecolor($width, $height);
imagefill($idest, 0, 0, $rgb);
imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);
if (!$fname)
{
header('Content-type: image/jpg');
imagejpeg($idest,null,100);
} else
{
imagejpeg($idest, $fname, 100);
}
imagedestroy($isrc);
imagedestroy($idest);
return true;
}
вот поделочка какаято
вот еще поделочки какие тоfunction img_resize($src, $fname= false, $width= 100, $leaveoldration = true, $height= 100, $rgb= 0xFFFFFF)
{
if (!file_exists($src))
{
return false;
}
$size= getimagesize($src);
if ($size == false || max($size[0],$size[1])>1280)
{
return false;
}
else
$format= strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
$icfunc= "imagecreatefrom" . $format;
if (!function_exists($icfunc))
{
return false;
}
$x_ratio= $width / $size[0];
$y_ratio= $height / $size[1];
$ratio= min($x_ratio, $y_ratio);
$use_x_ratio= ($x_ratio == $ratio);
$new_width= $leaveoldration ? ($use_x_ratio ? $width : floor($size[0] * $ratio)) : floor($size[0] * $ratio);
$new_height= $leaveoldration ? (!$use_x_ratio ? $height : floor($size[1] * $ratio)) : floor($size[1] * $ratio);
$new_left= $leaveoldration ? ($use_x_ratio ? 0 : floor(($width - $new_width) / 2)) : 0;
$new_top= $leaveoldration ? (!$use_x_ratio ? 0 : floor(($height - $new_height) / 2)) : 0;
$isrc= $icfunc ($src);
$idest= imagecreatetruecolor($width, $height);
imagefill($idest, 0, 0, $rgb);
imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);
if (!$fname)
{
header('Content-type: image/jpg');
imagejpeg($idest,null,100);
} else
{
imagejpeg($idest, $fname, 80);
}
imagedestroy($isrc);
imagedestroy($idest);
return true;
}
function resize($src, $filename = false, $h = false, $w = false, $fill=false, $color = 0xffffff)
{
if(!file_exists($src) && ($w || $h) && $filename)
{
return false;
}
$size = getimagesize($src);
if (!$size || max($size[0],$size[1])>1280)
{
return false;
}
$format= strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
$icfunc= "imagecreatefrom" . $format;
if (!function_exists($icfunc))
{
return false;
}
$src = $icfunc($src);
if (!$h) { $h = $size[1]*$w/$size[0]; }
if (!$w) { $w = $size[0]*$h/$size[1]; }
if ($size[0]*$h/$size[1]<=$w) { $multipler = $h/$size[1]; }
if ($size[1]*$w/$size[0]<=$h) { $multipler = $w/$size[0]; }
$new_h = $multipler*$size[1];
$new_w = $multipler*$size[0];
if ( ($w &&($new_w>$size[0])) || ($h &&($new_h>$size[1])) ) { $new_w = $size[0]; $new_h = $size[1]; }
if ($fill)
{
$x_pos = round(($h-$new_h)/2);
$y_pos = round(($w-$new_w)/2);
$target = imagecreatetruecolor($w, $h);
imagefill($target, 0, 0, $color);
}
else
{
$x_pos = 0;
$y_pos = 0;
$target = imagecreatetruecolor($new_w, $new_h);
}
imagecopyresampled($target, $src, $y_pos, $x_pos, 0, 0, $new_w, $new_h, $size[0], $size[1]);
imagejpeg($target, $filename, 100);
imagedestroy($src);
imagedestroy($target);
return true;
}
function img_cutcenter($src, $filename = false, $n)
{
$size = getimagesize($src);
$multiplier = $size[0] / $size[1];
$nwidth = $multiplier >= 1 ? ceil($n*$multiplier) : $n;
$nheight = $multiplier <= 1 ? ceil($n*(1/$multiplier)) : $n;
$format= strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
$icfunc= "imagecreatefrom" . $format;
if (!function_exists($icfunc))
{
return false;
}
$src = $icfunc($src);
$tmp = imagecreatetruecolor($nwidth,$nheight);
$out = imagecreatetruecolor($n,$n);
imagecopyresized($tmp,$src,0,0,0,0,$nwidth,$nheight,$size[0],$size[1]);
if($multiplier>1)
{
imagecopyresized($out,$tmp,0,0,ceil(($nwidth-$n)/2),0,$n,$n,$n,$n);
}
else
{
imagecopyresized($out,$tmp,0,0,0,ceil(($nheight-$n)/2),$n,$n,$n,$n);
}
if($filename)
{
@unlink($filename);
imagejpeg($out, $filename, 100);
}
else
{
imagejpeg($out);
}
imagedestroy($src);
imagedestroy($tmp);
imagedestroy($out);
return true;
}
короче в этйо теме писать такие вещи имхо не айс :) лучше юзать готовое. артедоо я не против этого, ты молодец конечно. просто наиболее ПРОФЕССИОНАЛЬНО я бы сказал - юзать либы. ведь! ты мускуль юзаешь? можно написать неплохую бд на сериалайз + плейт текст файлы индексов и тп. но ты же мускуль юзаешь, ага? :)Сапожник без сапог -
3 апреля 2009 г. 15:50, спустя 8 минут 40 секунд
хы
раньше было hResizeCut →function hResizeCut($source, $destionation, $outputsize, $quality=75)
{
if (!file_exists($source)) return(false);
$size = getimagesize($source);
if ($size === false) return(false);
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$icfunc = 'imagecreatefrom' . $format;
if (!function_exists($icfunc)) return(false);
if ($size[0]>$size[1]) {
$newsize = $size[1];
$newleft = ($size[0]-$size[1])/2;
$newtop = 0;
}
else {
$newsize = $size[0];
$newleft = 0;
$newtop = ($size[1]-$size[0])/2;
}
$isource = $icfunc($source);
$image = imagecreatetruecolor($newsize, $newsize);
imagecopyresampled($image, $isource, -$newleft, -$newtop, 0, 0, $size[0], $size[1], $size[0], $size[1]);
imagedestroy($isource);
$newimage = imagecreatetruecolor($outputsize, $outputsize);
imagecopyresampled($newimage, $image, 0, 0, 0, 0, $outputsize, $outputsize, $newsize, $newsize);
imagejpeg($newimage, $destionation, $quality);
imagedestroy($image);
imagedestroy($newimage);
return(true);
}
а теперь
try {
$image = new Imagick(…);
$image->setImageFormat('jpg');
$image->cropThumbnailImage(45, 45);
$image->writeImage(…);
}
…
я выбираю безопасный кроп-ресайз! (ц)все умрут, а я изумруд -
3 апреля 2009 г. 15:54, спустя 3 минуты 35 секунд
md5, ну я собственно об этом же :)Сапожник без сапог -
3 апреля 2009 г. 15:57, спустя 2 минуты 59 секунд
посмотрел бегло доку про имагик екстеншн. могу сказать, да. это пиздато. объектная модель для работы с картинками - айс. а не хуйня из либгд когда ебешься с индексами картинок, размерами да и просто очевидными вещами.Сапожник без сапог -
3 апреля 2009 г. 16:43, спустя 45 минут 44 секунды
…поэтому они чаще плюсуют пыхокрабовладельцу за всякую чушь и флейм.
phpdude, тебе бы писать рассказы :) ++ в карму
Дуд не выкладывает свои фотки в аватарку чтоб никто не видел его мега-пыхокраба, который позволяет ему получать "+"ы в карму за флуд ))) -
3 апреля 2009 г. 16:46, спустя 3 минуты 42 секунды
Givi, суко! ))))))))))
просто у мну головы изза пыхокрабу невидно ((( тока крабоСапожник без сапог -
3 апреля 2009 г. 17:16, спустя 29 минут 51 секунду
Вы, господа, на лету подменяете понятия. Для вас самих очень убедительно :)
Да, на Imagic можно сделать resize & cropresize, причем короче на несколько строк, чем на gd :) Только никто из вас полный пример не привел… md5 молодец, гд-шный пример полный, а им-эшный куцый… дуд еще более молодец, им-шный вообще не потрудился писать, зато про профессионализм вставил. Голимая пропаганда и главное непонятно зачем. GD есть везде, а Imagic нет. Сейчас мы придем к тому что "за настоящие деньги будет всё" :)
1. Каким боком здесь фотошоп? Кто будет фотошоп брать? Секретарша, которая фотки на сайт размещает? Она вообще не в курсе таких слов. Какие ей дали фотки, такие и аплоадит.
таким боком, что ты был невнимателен и поторопился с выводами. читай ниже:
2. Насчет параметра do_cut, да ты прав, не заметил сразу, с ним работает вроде аналогично cropThumbnailImage, только непонятно зачем нужно писать 70 строк кода, для того чтобы сделать, то для чего уже есть инструмент? Причем инструмент на базе более быстрой и качественнее работающей с графикой библиотеки. Собственно с этого разговор и начался.
так значит одной функцией не обойтись. надо еще cropThumbnailImage, надо несколько строк на инициализацию, + if …
А ты сравнивал затраты времени, памяти и субъективное качество результата? думаю — нет.
3. Насчет того что "в большинстве случаев нужно масштабирование БЕЗ обрезки", не согласен ибо дизайн требует определенных размеров, а заливают как уже было сказанно в п.1 что бог на душу положит. Кроме того, открою тебе еще один секрет. )) Есть еще функция thumbnailImage, которая делает все без обрезки т.е. вписывает в прямоугольник. Еще все функции ресайза в imagick умеют расчитывать второе измерение сами, если скормить false. В общем, полно всяких вкусностей. Нафига тратить время и плодить код?
))) т.е. кладем фотографию в жертву "дизайну"? Тебя фотографы сожрут за это.
4. И наконец, ты в курсе, что когда делаешь превьюшки нефигово бы делать sharpen?
Нюню ))) Шарп не добавляет качество, а пытается замаскировать "мыло". Эффективнее многоходовый ресампинг. Шарп на автомате — это полный пэ. Тема для фотографов, а не для пыхофорума.
Так получилось, что я в теме, а вы — нет.
Peace?ιιlllιlllι унц-унц -
3 апреля 2009 г. 17:36, спустя 19 минут 44 секунды
artoodetoo, у меня как раз GD не полный пример, а только функция, надо её ещё вызвать ))
а вот Imagick — полный
ps, Зае-Peace! :)все умрут, а я изумруд -
-
3 апреля 2009 г. 18:20, спустя 3 минуты 39 секунд
собака забавная. у меня кот чем то на нее похож :))Сапожник без сапог -
3 апреля 2009 г. 18:24, спустя 4 минуты 2 секунды
собака забавная. у меня кот чем то на нее похож :))
размером?ιιlllιlllι унц-унц -
3 апреля 2009 г. 18:33, спустя 9 минут 7 секунд
artoodetoo, судя по фотке характером))Сапожник без сапог
Страницы: ← Предыдущая страница • Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!