|
|
|
| Здравствуйте.
Вот функия:
******************************
function resizeimg($filename, $w, $h)
{
$ratio=$w/$h;
$size_img=getimagesize($filename);
if (($size_img[0]<$w) && ($size_img[1]<$h)) return true;
$src_ratio=$size_img[0]/$size_img[1];
if ($ratio<$src_ratio) $h=$w/$src_ratio;
else $w=$h*$src_ratio;
$dest_img=imagecreatetruecolor($w, $h);
//$dest_img=imagecreatetruecolor(354, 210);
if ($size_img[2]==2) $src_img=imagecreatefromjpeg($filename);
else if ($size_img[2]==1) $src_img=imagecreatefromgif($filename);
else if ($size_img[2]==3) $src_img=imagecreatefrompng($filename);
if (!imagecopyresampled ($dest_img, $src_img, 0,0,0,0, $w, $h,
$size_img[0], $size_img[1])) return false;
$path_parts=pathinfo($filename);
if ($path_parts["extension"]=="jpg")
{
header("Content-type: image/jpeg");
imagejpeg($dest_img);
}
else if ($path_parts["extension"]=="gif")
{
header("Content-type: image/gif");
imagegif($dest_img);
}
else if ($path_parts["extension"]=="png")
{
header("Content-type: image/png");
imagegif($dest_img);
}
imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}
******************************
Вызываю вот таким образом:
********************************
$img=$_GET['img'];
resizeimg($img, 354, 210);
********************************
$img - путь к рисунку.
Как сделать так, чтобы рисунки (не только горизонтальные, но и вертикальные) нормально масштабировались и отображались с размерами 354х210. Проблема в том, что рисунки при масштабировании не обрезаются, и в результате получаются растянутыми. Особенно, если изображение вертикальное... | |
|
|
|
|
|
|
|
для: Jaroslav
(20.02.2008 в 10:09)
| | Вам не так поступать надо. После масштабирования входного изображения (как это нормально сделать, на форуме выложено приличное количество примеров) накладывать его на подложку 354х210, центрируя его. | |
|
|
|
|
|
|
|
для: sim5
(20.02.2008 в 11:58)
| | функцию масштабирования и привел.
Взята из книги "PHP5 - на примерах".
Ее надо таким образом доработать, чтобы рисунок (если вертикальный), обрезался под нужные размеры... Как сделать так, чтобы рисунок точно масштабировался заданных размеров? Получается или больше по ширине, или больше по высоте... | |
|
|
|
|
|
|
|
для: Jaroslav
(20.02.2008 в 13:44)
| | Не читал, что вы привели - трудно читать код без подсветки. Вы хотите масштабировать с учетом фиксированного размера, а значит, если у вас проблемы, то вы это не учитываете. В общем случае это так: получив отношение ширины к высоте входного изображения, вы будете знать ориентацию его - альбомная, портрет (в ширину/в высоту), исходя из этого масштабируете. И второе, если на выходе нужен именно фиксированный размер, независимо от входного, накладывайте результат на шаблон вашего размера. | |
|
|
|