Php 相应地调整图像宽度和缩放高度

Php 相应地调整图像宽度和缩放高度,php,image,gd,scale,Php,Image,Gd,Scale,我正在编写一个上传脚本,目前我正在使用gd调整图像大小的方法,这在总体上效果不错。唯一的问题是,当用户上传肖像图像时,它们会对准中心,画布外的部分会被切断。我已经添加了一个检查来确定图像是否是portait,但是现在我需要调整一些代码来按照我需要的方式操作portait图像 例如,如果上载分辨率为2000x3000像素的图像,则需要执行以下操作: 自动将宽度缩放到800px 根据新宽度缩放高度,保持原始比例 我成功地扩展了它,但它只是保持了原始的分辨率,这不是想要的效果。也许这里有人可以帮我

我正在编写一个上传脚本,目前我正在使用gd调整图像大小的方法,这在总体上效果不错。唯一的问题是,当用户上传肖像图像时,它们会对准中心,画布外的部分会被切断。我已经添加了一个检查来确定图像是否是portait,但是现在我需要调整一些代码来按照我需要的方式操作portait图像

例如,如果上载分辨率为2000x3000像素的图像,则需要执行以下操作:

  • 自动将宽度缩放到800px
  • 根据新宽度缩放高度,保持原始比例
我成功地扩展了它,但它只是保持了原始的分辨率,这不是想要的效果。也许这里有人可以帮我

提前谢谢// 乔纳森


EDIT:我用我以前的技术解决了这个问题,只需在上传的图像指向它时更改尺寸即可。谢谢你的回答简单的缩放功能

function img_scale($source,$width,$height,$extra='border=0')
{
     $w=$width;
     $h=$height;
     $size = @getimagesize($abu_source); 
    if($w > $size[0] && $h > $size[1] )
    {
        $neww = $size[0];//$w;
        $newh = $size[1];//$h;
    }
    else if( $w < $size[0] && $h > $size[1] )
    {
        $diff=$size[0]-$w;
        $dec_per=(100*$diff)/$size[0];
        $neww=$size[0]-(($size[0]*$dec_per)/100);
        $newh=$size[1]-(($size[1]*$dec_per)/100);
    }
    else if( $w > $size[0] && $h < $size[1] )
    {
        $diff=$size[1]-$h;
        $dec_per=(100*$diff)/$size[1];
        $newh=$size[1]-(($size[1]*$dec_per)/100);
        $neww=$size[0]-(($size[0]*$dec_per)/100);
    }
    else//( $w < $size[0] && $h < $size[0] )
    {
        if( ($size[0]-$w) >= ($size[1]-$h))
        {
            $diff=$size[0]-$w;
            $dec_per=(100*$diff)/$size[0];
            $neww=$size[0]-(($size[0]*$dec_per)/100);
            $newh=$size[1]-(($size[1]*$dec_per)/100);
            $cc='w';
        }
        else
        {
            $diff=$size[1]-$h;
            $dec_per=(100*$diff)/$size[1];
            $newh=$size[1]-(($size[1]*$dec_per)/100);
            $neww=$size[0]-(($size[0]*$dec_per)/100);
            $cc='h';                    
        }
    }
    return "<img src='".$source."' width='".$neww."' height='".$newh."'  ".$extra." >";
}
函数img\u比例($source、$width、$height、$extra='border=0'))
{
$w=$width;
$h=$height;
$size=@getimagesize($abu-source);
如果($w>$size[0]&&$h>$size[1])
{
$neww=$size[0];//$w;
$newh=$size[1];//$h;
}
如果($w<$size[0]&&$h>$size[1])
{
$diff=$size[0]-$w;
$dec_per=(100*$diff)/$size[0];
$neww=$size[0]-($size[0]*$dec_per)/100);
$newh=$size[1]-($size[1]*$dec_per)/100);
}
如果($w>$size[0]&&$h<$size[1])
{
$diff=$size[1]-$h;
$dec_per=(100*$diff)/$size[1];
$newh=$size[1]-($size[1]*$dec_per)/100);
$neww=$size[0]-($size[0]*$dec_per)/100);
}
else/($w<$size[0]&&&h<$size[0])
{
如果($size[0]-$w)>=($size[1]-$h))
{
$diff=$size[0]-$w;
$dec_per=(100*$diff)/$size[0];
$neww=$size[0]-($size[0]*$dec_per)/100);
$newh=$size[1]-($size[1]*$dec_per)/100);
$cc='w';
}
其他的
{
$diff=$size[1]-$h;
$dec_per=(100*$diff)/$size[1];
$newh=$size[1]-($size[1]*$dec_per)/100);
$neww=$size[0]-($size[0]*$dec_per)/100);
$cc='h';
}
}
返回“”;
}

这是一个常见的问题,有大量易于找到的解决方案。到目前为止你试过什么?任何库(PHP类)、第三方工具(例如imagick)?顺便说一句,我不建议检查图像是肖像还是风景。只有当理想结果的最大高度和最大宽度相同时,它才起作用。如果它们不同(例如,图像必须适合800x600像素框),您应该做一个常规检查-将原始宽度和高度的比率与所需的宽度和高度的比率进行比较。@binaryLV我目前没有使用任何库,因为我想在使用GD之前学习如何以最佳方式使用GD。我现在使用的是一组我试图完善的代码,以满足我的需要。现在唯一缺少的关键点是纵向缩放。