ФорумПрограммированиеPHP для идиотов → Загрузка изображений, изменение ширины и высоты на лету.

Загрузка изображений, изменение ширины и высоты на лету.

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 апреля 2009 г. 15:03, спустя 1 минуту 10 секунд

    adw0rd, полная хуйня получилась?)) а то я ребеной одновременно сидел + памперс менял, потом спать укладывал, а когда нажал запостить мне "уже 14 новых сообщений" )))))))))))
    Сапожник без сапог
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 3 апреля 2009 г. 15:19, спустя 15 минут 41 секунду

    phpdude, не, мне понравилось :)))
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 3 апреля 2009 г. 15:26, спустя 7 минут 10 секунд


    AlexB, смешной ты человек. возьми фотошоп, сделай ресайз 100 по длинной стороне с сохранением пропорций. какой будет результат?
    хочешь с обрезкой? поставь параметр $do_cut=true


    1. Каким боком здесь фотошоп? Кто будет фотошоп брать? Секретарша, которая фотки на сайт размещает? Она вообще не в курсе таких слов. Какие ей дали фотки, такие и аплоадит.

    2. Насчет параметра do_cut, да ты прав, не заметил сразу, с ним работает вроде аналогично cropThumbnailImage, только непонятно зачем нужно писать 70 строк кода, для того чтобы сделать, то для чего уже есть инструмент? Причем инструмент на базе более быстрой и качественнее работающей с графикой библиотеки. Собственно с этого разговор и начался.

    3. Насчет того что "в большинстве случаев нужно масштабирование БЕЗ обрезки", не согласен ибо дизайн требует определенных размеров, а заливают как уже было сказанно в п.1 что  бог на душу положит. Кроме того, открою тебе еще один секрет. )) Есть еще функция thumbnailImage, которая делает все без обрезки т.е. вписывает в прямоугольник. Еще все функции ресайза в imagick умеют расчитывать второе измерение сами, если скормить false. В общем, полно всяких вкусностей. Нафига тратить время и плодить код?

    4. И наконец, ты в курсе, что когда делаешь превьюшки нефигово бы делать sharpen?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 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;
    }


    короче в этйо теме писать такие вещи имхо не айс :) лучше юзать готовое. артедоо я не против этого, ты молодец конечно. просто наиболее ПРОФЕССИОНАЛЬНО я бы сказал - юзать либы. ведь! ты мускуль юзаешь? можно написать неплохую бд на сериалайз + плейт текст файлы индексов и тп. но ты же мускуль юзаешь, ага? :)
    Сапожник без сапог
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 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(…);
    }


    я выбираю безопасный кроп-ресайз! (ц)
    все умрут, а я изумруд
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 апреля 2009 г. 15:54, спустя 3 минуты 35 секунд

    md5, ну я собственно об этом же :)
    Сапожник без сапог
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 апреля 2009 г. 15:57, спустя 2 минуты 59 секунд

    посмотрел бегло доку про имагик екстеншн. могу сказать, да. это пиздато. объектная модель для работы с картинками - айс. а не хуйня из либгд когда ебешься с индексами картинок, размерами да и просто очевидными вещами.
    Сапожник без сапог
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 3 апреля 2009 г. 16:43, спустя 45 минут 44 секунды


    …поэтому они чаще плюсуют пыхокрабовладельцу за всякую чушь и флейм.



    phpdude, тебе бы писать рассказы :) ++ в карму


    Дуд не выкладывает свои фотки в аватарку чтоб никто не видел его мега-пыхокраба, который позволяет ему получать "+"ы в карму за флуд )))
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 апреля 2009 г. 16:46, спустя 3 минуты 42 секунды

    Givi, суко! ))))))))))

    просто у мну головы изза пыхокрабу невидно ((( тока крабо
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 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ι унц-унц
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 3 апреля 2009 г. 17:36, спустя 19 минут 44 секунды

    artoodetoo, у меня как раз GD не полный пример, а только функция, надо её ещё вызвать ))
    а вот Imagick — полный

    ps, Зае-Peace! :)
    все умрут, а я изумруд
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 3 апреля 2009 г. 18:16, спустя 40 минут 3 секунды

    256!
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 апреля 2009 г. 18:20, спустя 3 минуты 39 секунд

    собака забавная. у меня кот чем то на нее похож :))
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 3 апреля 2009 г. 18:24, спустя 4 минуты 2 секунды


    собака забавная. у меня кот чем то на нее похож :))

    размером?
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 апреля 2009 г. 18:33, спустя 9 минут 7 секунд

    artoodetoo, судя по фотке характером))
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!