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中的图像裁剪产生空白结果的主要内容,如果未能解决你的问题,请参考以下文章