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

时间:2010-03-28 00:33:56

标签: php image-manipulation gd crop

我只是尝试使用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像素的黑色图像(换句话说,空白画布)。我是在传递错误的论点吗?

图像存在且可写。

2 个答案:

答案 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的返回值

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

乍一看,我会首先看一下阅读和写作权限。