PHP中的图像裁剪产生空白结果

Posted

技术标签:

【中文标题】PHP中的图像裁剪产生空白结果【英文标题】:Image cropping in PHP is producing blank result 【发布时间】:2010-03-28 00:33:55 【问题描述】:

我只是尝试使用 php 裁剪 JPEG 图像(无缩放)。这是我的函数以及输入。

function cropPicture($imageLoc, $width, $height, $x1, $y1) 
    $newImage = imagecreatetruecolor($width, $height);

    $source = imagecreatefromjpeg($imageLoc);
    imagecopyresampled($newImage,$source,0,0,$x1,$y1,$width,$height,$width,$height);
    imagejpeg($newImage,$imageLoc,90);

当我按如下方式调用它时--cropPicture('image.jpg', 300, 300, 0, 0)--该函数正常完成,但我留下了一个 300x300 像素的黑色图像(换句话说,一个空白画布)。我是否传递了错误的论点?

图像存在且可写。

【问题讨论】:

【参考方案1】:

作为对 sobedai 答案的补充:任何您在cropPicture() 中使用的那些函数都可能失败。你必须测试每一个的返回值。如果出现错误,它们会返回 false 并且您的函数无法(正确)继续。

function cropPicture($imageLoc, $width, $height, $x1, $y1) 
  $newImage = imagecreatetruecolor($width, $height);
  if ( !$newImage ) 
    throw new Exception('imagecreatetruecolor failed');
  

  $source = imagecreatefromjpeg($imageLoc);
  if ( !$source ) 
    throw new Exception('imagecreatefromjpeg');
  

  $rc = imagecopyresampled($newImage,$source,0,0,$x1,$y1,$width,$height,$width,$height);
  if ( !$rc ) 
    throw new Exception('imagecopyresampled');
  

  $rc = imagejpeg($newImage,$imageLoc,90);
  if ( !$rc ) 
    throw new Exception('imagejpeg');
  

编辑:您可能还对http://docs.php.net/error_get_last 感兴趣。示例脚本中的异常消息没有那么有用...

【讨论】:

非常感谢。从现在开始,我将开始这样编码。问题出在调用cropPicture() 的函数中。所以为了将来参考,我上面的代码确实有效! 但是请不要抛出异常everywhere ;-) 你很容易过度使用它们。见***.com/questions/77127/when-to-throw-an-exception和***.com/questions/1744070/…【参考方案2】:

有几点:

保存 imagecopyresampled 和 imagejpeg 的返回值

其中一个不能正常工作,检查哪个是错误的,这将缩小范围。

乍一看,我会先看读写权限。

【讨论】:

以上是关于PHP中的图像裁剪产生空白结果的主要内容,如果未能解决你的问题,请参考以下文章

你如何摆脱在opencv c ++中裁剪图像后留下的空白?

使用纵横比和空白区域裁剪图像

避免图像裁剪并将其投射到固定的图像尺寸

PHP图像调整大小和裁剪功能

PHP 图像居中裁剪函数

在 C# 中从图像中裁剪空白 [重复]