Обрезка изображения с помощью imagecopyresampled() в PHP без fopen

Я пытаюсь обрезать и отображать изображение с помощью 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->myImageparameters и прокомментирую два метода с $this->thumbparameters, исходное изображение отображается правильно, поэтому я думаю, что проблема возникает с imagecopyresampled(). Примечание. У меня нет возможности включить fopen, поэтому я использую curl. Любая помощь будет принята с благодарностью!


person Kevin S.    schedule 10.08.2011    source источник


Ответы (1)


Вам необходимо создать ресурс изображения для места назначения, прежде чем использовать его в imagecopyresampled().

Добавьте это перед строкой imagecopyresampled()

$this->thumb = imagecreatetruecolor(200, 112);

Обновлять

Для обрезки вам, вероятно, следует просто посмотреть на imagecopy() вместо imagecopyresampled()

Не стесняйтесь взглянуть на мой класс обработки изображений для некоторых идей - https://gist.github.com/880506< /а>

person Phil    schedule 10.08.2011
comment
Потрясающий! Большое спасибо. Это сработало отлично. Я попытался использовать imagecopy(), но размер изображения не изменился до указанных мною размеров. Он просто обрезал кусок 200x112 из верхнего левого угла, начиная с (0,45). imagecopyresampled() правильно изменит размер изображения, как указано. Ваш класс по работе с изображениями очень полезен! Я учту это в будущих проектах. Спасибо еще раз! - person Kevin S.; 10.08.2011
comment
@Kevin Извините, я прочитал ваш вопрос как попытку обрезать. Вы упомянули изменение размера позже - person Phil; 11.08.2011