Обрезка изображения в PHP дает пустой результат - PullRequest
3 голосов
/ 28 марта 2010

Я просто пытаюсь обрезать изображение 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);
}

Когда я вызываю это следующим образом - cropPicture('image.jpg', 300, 300, 0, 0) - функция завершается правильно, но у меня остается черное изображение размером 300x300 пикселей (другими словами, пустой холст) Я передаю неправильные аргументы?

Изображение существует и доступно для записи.

Ответы [ 2 ]

3 голосов
/ 28 марта 2010

В дополнение к ответу 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');
  }
}

edit: Вас также может заинтересовать http://docs.php.net/error_get_last. Сообщения об исключениях в примере сценария не так уж полезны ...

2 голосов
/ 28 марта 2010

Пара вещей:

сохранить возвращаемые значения для imagecopyresampled и imagejpeg

Один из них не работает должным образом, проверьте, что является ложным, и это сузит его.

На первый взгляд, я бы сначала посмотрел на права на чтение и запись.

...