Преоразмеряване на снимки с php.

При търсене в гугъл за php image resize най-отпред излизат простички алгоритми за преоразмеряване.
Обаче при по-особени размери, се дънят като ученичка на сефтето си. 😀 Разбира се, мрежата е необятна и се намират и цели класове, които вършат черната работа. Обаче правим едно елементарно допълнение и нещата си идват на мястото.

Както обикновено, ще си пусна функцията, за да не я търся когато ми притрябва. 😀

function maintbg($name, $tempname)
{
    global $wd;
    list($width_orig, $height_orig) = getimagesize($tempname);
// същността
    $width = 900;
    $height = 192;
    if (($width_orig > $width) || ($height_orig > $height)) {
        if (($width_orig > $width) && ($height_orig > $height)) {
            if ($width_orig > $height_orig) {
                $k = ($height / $height_orig);
            } else {
                $k = ($width / $width_orig);
            }
        } else {
            if ($width_orig > $width) {
                $k = ($width / $width_orig);
            } elseif ($height_orig > $height) {
                $k = ($height / $height_orig);
            } else {
                $k = 1;
            }
        }
        $width = round($width_orig * $k);
        $height = round($height_orig * $k);
// край
        $small = imagecreatetruecolor($width, $height);
        $im = imagecreatefromjpeg($tempname);
        imagecopyresampled($small, $im, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
        ImageJPEG($small, $wd . "/bg/$name", 80);
        ImageDestroy($im);
        ImageDestroy($small);
    } else {
        move_uploaded_file($tempname, $wd . "/bg/$name");
    }
    chmod($wd . "/bg/$name", 0644);
}

Може пък да свърши на някой работа.

Забележка: При публикуването бях разместил двата коефициента. Сега е наред.

4 thoughts on “Преоразмеряване на снимки с php.”

  1. @Георги
    Георги, благодаря ти за напътствията!
    Да, това, което казваш е 100% така.
    Публикациите ми тук са по-скоро да ми напомнят неща, които рядко ми трябват. Това, което ползвам за по-тясно специализирани нужди. Но и неща, които биха свършили работа на хора, на които малко им трябва, за да достигнат до целта. Ако на някой му е нужно рамо, винаги ще предложа къде да се опре. 😉
    При мен $wd не винаги може да се замени с getcwd(), а е малко по-специална история.
    Ще видя къде са иконките и ще сложа една с бира. А някога ако се срещнем на живо, имаш истинска от мен! 🙂

  2. @Koko
    Ако $wd значи working directory, можеш да ползваш getcwd() . Идеята ми беше, че прекалено много неща приемаш за дадени, което ти ограничава използваемостта на фунцията.
    Виждам, например, че фунцията работи само с tempname на файл, upload-нат от потребителя – не винаги е така…
    Пътечката за запазване също ти е hardcode-ната.
    Има и други неща, но не това ми е идеята – за съжаление много хора смятат, че трябва да отиркват топлата – в такъв случай дай да пишем всички на assembler 🙂 Бих ти препоръчал да се учиш от кода и грешките на другите, вместо да стоиш затворен за външни идеи.
    Но стана прекалено размита дискуия вече 🙂

  3. @Георги
    global $wd; Това се инициализира малко по-горе и ми се струва, че няма как да бъде подменено. Може и да бъркам, знам ли.
    Иначе се старая да си пиша нещата сам – да не завися от това или онова или от бъговете на някой друг. 🙂
    Да, ползвам само jpg в повечето случаи. Просто са такива проектите.

  4. Е, недей така де 🙂
    global $wd; – това хич не звучи добре. И тая функция ще ти свърши работа само за image/jpeg – за никакъв друг вид картинки. А аз лично ти препоръчвам png за Мрежата. Като цяло – по-добре си използвай някой готов клас, не е нужно да откриваш топлата вода 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

Comments links could be nofollow free.

This site uses Akismet to reduce spam. Learn how your comment data is processed.