将方形图像转换为矩形

时间:2015-11-07 16:21:38

标签: php image imagemagick gd

我想将1200x1200图片转换为1200x600

但是,我不想丢失图像比例,这就是为什么我要在左侧和右侧添加白色边框并将图像放在中间。

最终图像将像左边和右边的边框和中间的方形图像,然后我将它保存到文件夹并在我的项目中使用它。

使用GD库可以实现吗?

1 个答案:

答案 0 :(得分:1)

您可以编写自己的数学函数,以在特定维度的画布中显示图像。这是我使用的数学函数,

function resize_image($img,$maxwidth,$maxheight) {
    //This function will return the specified dimension(width,height)
    //dimension[0] - width
    //dimension[1] - height

    $dimension = array();
    $imginfo = getimagesize($img);
    $imgwidth = $imginfo[0];
    $imgheight = $imginfo[1];
    if($imgwidth > $maxwidth){
        $ratio = $maxwidth/$imgwidth;
        $newwidth = round($imgwidth*$ratio);
        $newheight = round($imgheight*$ratio);
        if($newheight > $maxheight){
            $ratio = $maxheight/$newheight;
            $dimension[] = round($newwidth*$ratio);
            $dimension[] = round($newheight*$ratio);
            return $dimension;
        }else{
            $dimension[] = $newwidth;
            $dimension[] = $newheight;
            return $dimension;
        }
    }elseif($imgheight > $maxheight){
        $ratio = $maxheight/$imgheight;
        $newwidth = round($imgwidth*$ratio);
        $newheight = round($imgheight*$ratio);
        if($newwidth > $maxwidth){
            $ratio = $maxwidth/$newwidth;
            $dimension[] = round($newwidth*$ratio);
            $dimension[] = round($newheight*$ratio);
            return $dimension;
        }else{
            $dimension[] = $newwidth;
            $dimension[] = $newheight;
            return $dimension;
        }
    }else{
        $dimension[] = $imgwidth;
        $dimension[] = $imgheight;
        return $dimension;
    }
}

假设您的图像尺寸为1200x1200(高度:1200,宽度:1200),并且您的画布尺寸(您要显示图像的位置)为1200x600(高度:1200,宽度:600),您可以调用此 resize_image 这样的函数,

$dimension = resize_image("{$your_image_path}.jpg",600,1200);
$width = $dimension[0];
$height = $dimension[1];

并在获得适当的尺寸后,像这样显示您的图片,

<img src="your_image_path.jpg" alt="Image" height="<?php echo $height; ?>" width="<?php echo $width; ?>" />