При търсене в гугъл за 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); }
Може пък да свърши на някой работа.
Забележка: При публикуването бях разместил двата коефициента. Сега е наред.
@Георги
Георги, благодаря ти за напътствията!
Да, това, което казваш е 100% така.
Публикациите ми тук са по-скоро да ми напомнят неща, които рядко ми трябват. Това, което ползвам за по-тясно специализирани нужди. Но и неща, които биха свършили работа на хора, на които малко им трябва, за да достигнат до целта. Ако на някой му е нужно рамо, винаги ще предложа къде да се опре. 😉
При мен $wd не винаги може да се замени с getcwd(), а е малко по-специална история.
Ще видя къде са иконките и ще сложа една с бира. А някога ако се срещнем на живо, имаш истинска от мен! 🙂
@Koko
Ако $wd значи working directory, можеш да ползваш getcwd() . Идеята ми беше, че прекалено много неща приемаш за дадени, което ти ограничава използваемостта на фунцията.
Виждам, например, че фунцията работи само с tempname на файл, upload-нат от потребителя – не винаги е така…
Пътечката за запазване също ти е hardcode-ната.
Има и други неща, но не това ми е идеята – за съжаление много хора смятат, че трябва да отиркват топлата – в такъв случай дай да пишем всички на assembler 🙂 Бих ти препоръчал да се учиш от кода и грешките на другите, вместо да стоиш затворен за външни идеи.
Но стана прекалено размита дискуия вече 🙂
@Георги
global $wd; Това се инициализира малко по-горе и ми се струва, че няма как да бъде подменено. Може и да бъркам, знам ли.
Иначе се старая да си пиша нещата сам – да не завися от това или онова или от бъговете на някой друг. 🙂
Да, ползвам само jpg в повечето случаи. Просто са такива проектите.
Е, недей така де 🙂
global $wd; – това хич не звучи добре. И тая функция ще ти свърши работа само за image/jpeg – за никакъв друг вид картинки. А аз лично ти препоръчвам png за Мрежата. Като цяло – по-добре си използвай някой готов клас, не е нужно да откриваш топлата вода 🙂