简体   繁体   中英

Cropping an image with imagecopyresampled() in PHP without fopen

I am trying to crop and image using PHP and the GD library and cannot seem to get the cropping to work. I would like to crop the black bars out of the following image and resize it to a smaller size (200 by 112).

Image located here

Below is my PHP code.

<?
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();

?>

I receive the following errors:

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

When I uncomment the two methods with $this->myImage parameters and comment the two methods with $this->thumb parameters, the original image properly displays, so I'm thinking the issue arises with imagecopyresampled() . Note: I do not have the ability to enable fopen, so this is why I'm using curl. Any help would be greatly appreciated!

You need to create an image resource for the destination before using it in imagecopyresampled() .

Add this before the imagecopyresampled() line

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

Update

For cropping, you should probably just look at imagecopy() instead of imagecopyresampled()

Feel free to have a look at my image manipulation class for some ideas - https://gist.github.com/880506

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM