• Авторизация


Масштабирование фотографий 18-10-2006 07:25 к комментариям - к полной версии - понравилось!


Вопрос по php. Имеется ряд фотографий. Надо их отмасштабировать под определенный размер. Да и не просто обрезать по краям. А сделать так, чтобы как можно больше фотки сохранилось. Т.е. уменьшить максимально, а края обрезать. В итоге надо получить фотку размерами X на Y. (X и Y я задаю сам).

До этого я делал это так:
PHP:

$thumbsize 
150;
$imginfo getimagesize($imgfile);
$width $imginfo[0];
$height $imginfo[1];
$imgratio $width $thumbsize;
$imgratio max($imgratio1.0);
$newwidth = (int)($width $imgratio);
$newheight = (int)($height $imgratio);
$thumb ImageCreateTrueColor($newwidth,$newheight);
$source imagecreatefromjpeg($imgfile);
imagecopyresampled($thumb$source0000$newwidth, (int)$newheight$width$height);
imagejpeg($thumb,"../images/gallery/main/main_".$filename,100);
font>



Но это лишь давало примерные результаты. Т.е. добится так, чтобы фотка по размеру была "пиксель в пиксель" мне не удавалось (да и не нужно было).
У кого-нибудь есть какие-то идеи?
вверх^ к полной версии понравилось! в evernote
Комментарии (4):
mesca1ito 18-10-2006-11:49 удалить
животрепещущая тема... у меня на РНР это сделать тоже н получается... хотя есть скрипт на Perl'и на bash'е. перловый работает нормально (могу скомпилить в двоичку, если надо) а с башем трабл -- картинки по горизонтали перекашивает, хотя вроде как все написано нормально..
ellesar2001 18-10-2006-15:09 удалить
Пропорциональное уменьшение:
code:
function imageresize($path, $newwidth) {
list($width, $height) = @getimagesize($path);

$newheight = $height/($width/$newwidth);

$new = @imagecreatetruecolor($newwidth, $newheight);
$source = @imagecreatefromjpeg($path);

@imagecopyresized($new, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

@imagejpeg($new, $path);
}

Или тебе иное нужно?
av3nger 18-10-2006-15:33 удалить
ellesar2001, не, пропорциональное уменьшение пойдет лишь в том случае, если рисунки везде одной и той же пропорции. а если у меня одни 150px на 20px, другие 150х150, а третие 60х120. все равно уменьшить все рисунки одновременно до 32х11 не получится.
av3nger 21-10-2006-01:28 удалить
вроде бы, разобрался.

cropW и cropH отвечают за ширину и высоту.

code:
$imginfo = getimagesize($imgfile);
$width = $imginfo[0];
$height = $imginfo[1];
$cropStartX = round($width/2)-80;
$cropStartY = round($height/2)-60;
$cropW = 144;
$cropH = 119;
$origimg = imagecreatefromjpeg($imgfile);
$cropimg = imagecreatetruecolor($cropW,$cropH);
list($width, $height) = getimagesize($imgfile);
imagecopyresized($cropimg, $origimg, 0, 0, $cropStartX, $cropStartY, $width, $height, $width, $height);
imagejpeg($cropimg,"../images/gallery/main/main_".$filename,100);
imagedestroy($cropimg);
imagedestroy($origimg);


да. и предварительно я уменьшаю фотку пропорционально до более маленького размера (в этом случае до 200 по ширине). и тогда при обрезании фотки как раз видно большую часть фотографии.


Комментарии (4): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Масштабирование фотографий | community_coding - Сообщество программистов | Лента друзей community_coding / Полная версия Добавить в друзья Страницы: раньше»