PHP中的图像裁剪产生空白结果
问题描述:
我只是试图使用PHP裁剪JPEG图像(不缩放)。这是我的功能,以及输入。PHP中的图像裁剪产生空白结果
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);
}
当我把它作为follows-- cropPicture('image.jpg', 300, 300, 0, 0)
--the功能正常完成,但我留下了一个黑色的形象,是300×300像素(换句话说,一个空白的画布)。我是否传递了错误的观点?
图像存在并且是可写的。
答
作为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。示例脚本中的异常消息对您没有帮助...
答
几件事情:
保存
其中之一不能正常工作的返回值imagecopyresampled和imagejpeg,检查哪个是假的,这将缩小它。
乍一看,我会先看看读写权限。
非常感谢。从现在开始,我将开始编码。问题出在调用'cropPicture()'的函数中。所以为了将来的参考,我上面的代码实际上工作! – 2010-03-28 06:34:34
但请不要抛出异常_everywhere_ ;-)你可以轻易过度使用它们。见http://*.com/questions/77127/when-to-throw-an-exception和http://*.com/questions/1744070/why-should-exceptions-be-used-conservatively – VolkerK 2010-03-28 11:41:52