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 px の黒い画像 (つまり、空白のキャンバス) が残ります。間違った引数を渡していますか?

イメージが存在し、書き込み可能です。

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 の戻り値を保存する

そのうちの 1 つが正しく機能していません。どれが間違っているかを確認してください。それによって絞り込まれます。

一見すると、最初に読み取りと書き込みのアクセス許可を確認します。

于 2010-03-28T00:43:02.400 に答える