Как загрузить ресурс изображения из URL-адреса в скрипт PHP, используя cURL?

Я использую службу Google Charts для создания некоторых QR-кодов, которыми мне впоследствии нужно манипулировать (например, поворачивать, масштабировать) в PHP-скрипте и объединять с другими изображениями для создания одного окончательного изображения.

Как мне правильно загрузить такой ресурс (из URL-адреса) в PHP-скрипт таким образом, чтобы я мог им манипулировать?

Пример URL: https://chart.googleapis.com/chart?cht=qr&chs=500x500&chl=xghsdfgsdfg&choe=UTF-8&chld=L%7C0

В настоящее время у меня есть следующий код для получения изображения с помощью 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;
}

Но когда я использую это так:

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

Возвращается следующая ошибка:

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

person Andrei Oniga    schedule 24.11.2012    source источник


Ответы (2)


Вместо imagecreatefrompng() вам нужно imagecreatefromstring(), потому что первый ожидает имя файла вместо самого содержимого файла.

person Ja͢ck    schedule 24.11.2012
comment
Вы правы, это работает! Любая идея, что я могу сделать, если я использую класс SimpleImage? (ссылка). Потому что мне нужно было бы использовать его так: $image = new SimpleImage(getImage($url));. - person Andrei Oniga; 24.11.2012
comment
Если SimpleImage нужен файл, возможно, вам придется записать его во временное место? - person Ja͢ck; 24.11.2012
comment
Я боялся, что ты это скажешь :) - person Andrei Oniga; 24.11.2012

Это сработало для меня

$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);

Примечание. Мне пришлось использовать http, а не https, потому что я не настроил ssl на своем локальном сервере.

person Dale    schedule 24.11.2012