【问题标题】:Force uploaded image to keep its proportion强制上传的图片保持比例
【发布时间】:2011-05-02 21:50:58
【问题描述】:

我在图片标签中显示图片

<img src="image.jpg" width="100" height="50" />

我用户上传的图片尺寸为 100x100 我希望它像上面的标签一样显示

<img src="image.jpg" width="50" height="50" />

如何实现?

ps

如果是服务器端问题,我正在使用 php。

【问题讨论】:

  • 所以你想保持图像的比例,并设置宽度或高度?
  • 不设置,只是为了在宽度或高度的限制中保持比例。如果原始图片是 100x10 并且标签是 我需要使用整个 50 像素的宽度,并且只有 10 像素的 70 像素可用于高度。这将是很多空白空间,但图像将保持其形状。我希望我说明了这一点。谢谢。

标签: php html image file-upload


【解决方案1】:

使用getimagesize() 获取图像大小。然后这样做以缩小以适应,但保持纵横比:

if ($width > $height)
{
    $ratio = (float)100 / $width;
}
else
{
    $ratio = (float)100 / $height;
}

$width  = (int)round($width  * $ratio);
$height = (int)round($height * $ratio);

【讨论】:

    【解决方案2】:

    此代码将使任何图像适合 maxWidth x maxHeight 框,保持纵横比和白色背景填充。

    $img = new Imagick('orig.jpg');
    $maxWidth = 100;
    $maxHeight = 50;
    
    $geom = $img->getImageGeometry();
    $fitWidth = (($maxWidth/$geom['width'])<($maxHeight/$geom['height']))?true:false;
    if($fitWidth){
        $img->thumbnailImage($maxWidth,0,false);
    }else{
        $img->thumbnailImage(0,$maxHeight,false);
    }
    
    $canvas = new Imagick();
    $canvas->newImage($maxWidth,$maxHeight,'white','jpg');
    
    $geom = $img->getImageGeometry();
    $x = ($maxWidth-$geom['width'])/2;
    $y = ($maxHeight-$geom['height'])/2;
    $canvas->compositeImage($img,imagick::COMPOSITE_OVER,$x,$y);
    
    $canvas->writeImage('thumb.jpg');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-09
      • 2014-10-11
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 2012-01-05
      相关资源
      最近更新 更多