4

I'm using the Google Charts service to generate some QR codes that I afterward need to manipulate (e.g. rotate, scale) in a PHP script and merge with other images to generate one final image.

How do I correctly load such a resource (from a URL) into a PHP script, in a way that will allow me to manipulate it?

An example URL is: https://chart.googleapis.com/chart?cht=qr&chs=500x500&chl=xghsdfgsdfg&choe=UTF-8&chld=L|0

I currently have the following code to retrieve the image using cURL:

function getImage($url){
        $ch = curl_init ($url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
        $resource = curl_exec($ch);
        curl_close ($ch);

        return $resource;
}

But when I use it like this:

$image = imagecreatefrompng(getImage("https://chart.googleapis.com/chart?cht=qr&chs=500x500&chl=xghsdfgsdfg&choe=UTF-8&chld=L|0"));

The following error is returned:

Warning: imagecreatefrompng(‰PNG  ) [function.imagecreatefrompng]: failed to open stream: No such file or directory in /home/picselbc/public_html/projects/cakemyface/preview.php on line 383
https://chart.googleapis.com/chart?cht=qr&chs=500x500&chl=xghsdfgsdfg&choe=UTF-8&chld=L|0
Andrei Oniga
  • 8,219
  • 15
  • 52
  • 89

2 Answers2

3

What you need instead of imagecreatefrompng() is imagecreatefromstring(), because the former expects a filename instead of the file contents itself.

Ja͢ck
  • 170,779
  • 38
  • 263
  • 309
  • You're right, that works! Any idea what I can do if I use the SimpleImage class though? ([link](http://www.abeautifulsite.net/blog/2011/11/the-simple-image-class-for-php/)). Because I'd need to use it like so: `$image = new SimpleImage(getImage($url));`. – Andrei Oniga Nov 24 '12 at 07:31
  • If `SimpleImage` needs a file you have to write one in a temporary location perhaps? – Ja͢ck Nov 24 '12 at 07:58
  • I was afraid you would say that :) – Andrei Oniga Nov 24 '12 at 08:02
2

This worked for me

$image = imagecreatefromstring(file_get_contents('http://chart.googleapis.com/chart?cht=qr&chs=500x500&chl=xghsdfgsdfg&choe=UTF-8&chld=L|0'));
header('Content-Type: image/png');
imagepng($image);

Note: I had to use http rather than https because I haven't set up ssl on my local server.

Dale
  • 10,384
  • 21
  • 34