我只是尝试使用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像素的黑色图像(换句话说,空白画布)。我是在传递错误的论点吗?
图像存在且可写。
答案 0 :(得分:3)
作为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感兴趣。示例脚本中的异常消息没有用......
答案 1 :(得分:2)
有几件事:
保存imagecopyresampled和imagejpeg的返回值
其中一个工作不正常,检查哪个是错误的,这会缩小范围。
乍一看,我会首先看一下阅读和写作权限。