Я пытаюсь обрезать и изображение с помощью PHP и библиотеки GD и, похоже, не может заставить обрезку работать. Я хотел бы обрезать черные полосы из следующего изображения и изменить его размер до меньшего размера (200 на 112).
Изображение, расположенное здесь
Ниже мой PHP-код.
<? function load_file_from_url($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $str = curl_exec($curl); curl_close($curl); return $str; } class cropImage{ var $imgSrc,$myImage,$thumb; function setImage($image) { //Your Image $this->imgSrc = $image; //create image from the jpeg $this->myImage = imagecreatefromstring($this->imgSrc) or die("Error: Cannot find image!"); imagecopyresampled($this->thumb, $this->myImage, 0, 0, 0, 45, 200, 112, 480, 270); } function renderImage() { header('Content-type: image/jpeg'); imagejpeg($this->thumb); imagedestroy($this->thumb); //imagejpeg($this->myImage); //imagedestroy($this->myImage); } } $image = new cropImage; $image->setImage(load_file_from_url($_GET['src'])); $image->renderImage(); ?>
Я получаю следующие ошибки:
PHP Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /var/www/html/root/vic/boilerBytes/thumbnail.php on line 21 [Tue Aug 09 22:57:06 2011] [error] PHP Warning: imagejpeg(): supplied argument is not a valid Image resource in /var/www/html/root/vic/boilerBytes/thumbnail.php on line 26 [Tue Aug 09 22:57:06 2011] [error] PHP Warning: imagedestroy(): supplied argument is not a valid Image resource in /var/www/html/root/vic/boilerBytes/thumbnail.php on line 27
Когда я раскомментирую два метода с параметрами $this->myImage
и комментирую два метода с параметрами $this->thumb
, исходное изображение отображается правильно, поэтому я думаю, что проблема возникает с imagecopyresampled()
. Примечание. У меня нет возможности включить fopen, поэтому я использую завиток. Любая помощь будет принята с благодарностью!
Вам необходимо создать ресурс изображения для места назначения, прежде чем использовать его в imagecopyresampled()
.
Добавьте это до imagecopyresampled()
$this->thumb = imagecreatetruecolor(200, 112);
Для обрезки вам следует, скорее всего, просто взглянуть на imagecopy()
вместо imagecopyresampled()
Не стесняйтесь взглянуть на мой класс манипуляции с изображениями для некоторых идей – https://gist.github.com/880506