在输出上更改php base64_decode分辨率?

时间:2016-11-15 16:43:40

标签: php base64

我正在使用以下代码来显示图片

$imgstring = file_get_contents("https://www.googleapis.com/pagespeedonline/v1/runPagespeed?url=".$_GET['url']."&screenshot=true");

$imgstring = json_decode($imgstring);
$imgstring = $imgstring->screenshot->data;

$imgstring = str_replace("_", "/", $imgstring);
$imgstring = str_replace("-", "+", $imgstring);

header('Content-Type: image/png');
echo base64_decode($imgstring);

我想知道在页面上呈现之前是否可以缩放或更改图像的尺寸。由于Google Insight图片本身只有320x240,因此我需要将其扩展为例如600x600。

感谢您提供任何帮助/意见。

1 个答案:

答案 0 :(得分:0)

Base64数据是二进制数据的文本表示。正如@MagnusEriksson所说,如果你想增加它的大小,你将不得不转换它。

复杂的解决方案

您可以使用imagecreatefromstring在PHP中创建图像,通过使用imagescale进行扩展,最后输出新缩放的图像。

$imgstring = file_get_contents("https://www.googleapis.com/pagespeedonline/v1/runPagespeed?url=".$_GET['url']."&screenshot=true");

$imgstring = json_decode($imgstring);
$imgstring = $imgstring->screenshot->data;

$imgstring = str_replace("_", "/", $imgstring);
$imgstring = str_replace("-", "+", $imgstring);

$im = imagecreatefromstring(base64_decode($imgstring));
$im = imagescale($im, 600);
if ($im !== false) {
    header('Content-Type: image/png');
    imagepng($im);
    imagedestroy($im);
} else {
    header('Content-Type: text/plain');
    echo 'An error occurred.';
}

值得一提的是,如果你有PHP 5.5.18或更早版本的PHP版本,或PHP 5.6.2或更早版本,你需要提供imagescale的宽度和高度参数,因为宽高比计算是不正确。

此外,您的图像,当您放大(使其变大)时,与原始图像相比质量较差...原始图像中没有足够的数据来创建它的高分辨率版本

更轻松的解决方案

由于您实际上没有从增加比例中受益,如果您可以控制它的使用位置,您可以简单地将CSS样式添加到图像以增加大小。

<img src="myphp.php?url=someurl" style="width:600px;height:auto;" />

这样可以达到同样的效果,不需要任何PHP代码来改变图像。