3

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

图像存在并且是可写的。

4

2 回答 2

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感兴趣。示例脚本中的异常消息没有那么有用...

于 2010-03-28T01:00:48.747 回答
2

有几件事:

保存 imagecopyresampled 和 imagejpeg 的返回值

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

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

于 2010-03-28T00:43:02.400 回答