2016-11-15 44 views
1

我使用下面的代码来显示图像在输出上更改php base64_decode分辨率?

$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

对于这一点,你就需要对图像进行解码,并创建该图像一个新的,无论是使用GD或Imagick或相似。您只能通过回显数据来“放大”图像。 –

回答

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或更早的版本,你需要提供宽度和高度PARAMS到imagescale的宽高比计算为不正确。

而且你的形象,因为你是向上扩展(使它更大),将质量差相比原来......不会有原始图像中足够的数据来创建一个漂亮的高分辨率版本它。

简单的解决方案

当你实际上并没有从增加的规模,如果你有控制的地方时,你可以简单地添加CSS样式形象,增加大小中受益。

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

这将实现相同的效果,没有任何PHP代码来改变图像。

+0

完美,这正是需要的。谢谢! – NiftyPixel