PHP:重新缩放图像的尺寸

时间:2011-01-09 15:47:32

标签: php

这是PHP: if more than ..px resize to

的后续问题

正如您所看到的,如果符合以下条件,则会调整大小:

if($width > 604 && $height > 453) {

这很好用,宽度和高度都很大。

但是,如果$ width超过604,而$ height低于453(例如604x300)m,那么这将跳过调整大小过程。相反的是相同的(宽度低于,高度结束)。此外,如果图片上的尺寸为500x900,并且调整大小,则会变得非常丑陋。任何好的修复?

对于我应该如何处理这个问题有什么好的建议吗?

编辑:

$rel_difference = array('width'=>0, 'height'=>0);

if($width > 604 || $height > 453) {
    if($width > 604) $rel_difference['width'] = ($width-604)/604;
    if($height > 453) $rel_difference['height'] = ($height-453)/453;

asort($rel_difference);

$newwidth = $width/(1+end($rel_difference));
$newheight = $height/(1+end($rel_difference)); 
$newwidth = round($newwidth);
$newheight = round($newheight);
$jpeg_quality = 90;
$src = "images/users/status/".$org_name;
$path_thumbs = "images/users/status/"; 
$thumb_path = $path_thumbs . '/' . $newfilename;

switch(exif_imagetype($move_me)) {
    case IMAGETYPE_GIF:
        $img_r = imagecreatefromgif($src);
    break;
    case IMAGETYPE_JPEG:
        $img_r = imagecreatefromjpeg($src);
    break;
    case IMAGETYPE_PNG:
        $img_r = imagecreatefrompng($src);
    break;
    default:
            echo "{";
            echo        "error: 'Not a image!'";
            echo "}";
        exit(0);
    break;
}
$dst_r = ImageCreateTrueColor( $newwidth, $newheight );

imagecopyresampled($dst_r, $img_r, 0, 0, 0, 0, $newwidth , $newheight, $width, $height);

imagejpeg($dst_r,$thumb_path,$jpeg_quality);

unlink($move_me);
    }

5 个答案:

答案 0 :(得分:2)

你可以这样做:

$width = 1000;
$height = 900;

$rel_difference = array('width'=>0, 'height'=>0);
if($width > 604 || $height > 453) {
    if($width > 604) $rel_difference['width'] = ($width-604)/604;
    if($height > 453) $rel_difference['height'] = ($height-453)/453;
}

asort($rel_difference);

print_r($rel_difference);

会输出类似的内容:

Array ( width] => 0.65562913907285 [height] => 0.98675496688742 )

现在您知道最大差异

将是:

end($rel_difference);

因此,您可以使用此值按比例缩放。

修改

删除了不必要的array_reverse

EDIT2

// now lets calculate the new dimensions based on our previous code
// I divide the dimensions with the largest difference + 1 to get to the new dimensions

$newwidth = $width/(1+end($rel_difference)); // 503.33333333333
$newheight = $height/(1+end($rel_difference)); // 453

现在按比例缩放图像。

如果不使用某些舍入,不知道是否可以使用那么多小数位。

答案 1 :(得分:1)

由于您在语句中是逻辑,因此执行代码时都必须为true。 你需要一个OR(||),而不是AND(&&)。

if( $X > 500 || $Y > 300 ) {
    resize();
}

答案 2 :(得分:1)

if($width > 604 && $height > 453) {
只有当两个条件都为TRUE时,

才为TRUE,否则为FALSE。如果我正确地得到你的问题,那么如果width = 605并且height = 300那么它是FALSE并且if块中的任何内容都不会被执行。 (PS.604未超过604)

答案 3 :(得分:1)

如果您想设置最大高度宽度,则需要在条件中使用||代替&&

如果你想让图像很好地调整大小,你需要通过某种因素缩小它们,而不是仅使用常量来调整它们。并非每张图片都具有相同的宽高比。

答案 4 :(得分:0)

使用Image Processing (ImageMagick)

这里非常容易的是一些examples