Чтобы записать результат в файл, используйте fwrite () вместо fpassthru ().
Вы можете использовать file_get_contents () и file_put_contents (), но для этого необходимо сохранить все изображение в строке, чтоможет быть большой объем памяти для больших изображений.Это не проблема, поскольку изображения qrcode маленькие, но в целом стоит подумать.
Вам не нужно создавать потоковый контекст, поскольку вместо этого веб-служба будет работать с HTTP GET.POST.
Существует также функция с именем http_build_query (), которую можно использовать для упрощения построения URL.
<?php
$url = 'https://chart.googleapis.com/chart?' . http_build_query(array(
'chs' => '150x150',
'cht' => 'qr',
'chl' => 'Hello World!'
));
$src = fopen($url, 'rb');
$dst = fopen('file.png', 'w');
while (!feof($src)) {
fwrite($dst, fread($src, 1024));
}
?>