调整大小的base64图片

问题描述:

我有多个图片 - 保存为Base64编码字符串,现在我想调整这些图片,让他们的缩略图...调整大小的base64图片

最好将使用Javascript(节点服务器)来调整它们的大小,但也可以用php调整它们的大小。

由于在node.js中提前

不知道该怎么做(或嗯,什么事),但你的问题的PHP位当然是可能的。解析Base64后,将其加载到GD image然后resample它。

http://php.net/manual/en/function.imagecopyresampled.php

+0

好吧,我没有直写在我的服务器上的权利 - 我怎么能连接这个拇指到我的node.js应用程序?任何想法? –

+0

这是属于“不知道如何在node.js中做到这一点(或者说,任何事情)”的问题。希望其他人可能有一个好主意。 –

+0

寻找这个答案一2天,现在... 通常它会很好地工作节点 - 但在我节点应用程序我有没有写权限,太......,吸 –

+0

任何想法如何访问他们在我的node.js应用程序后,调整大小与PHP? –

我同意the method from Jon Hanna:你解析的Base64code然后将其加载到重采样前的GD图像。然而,要将它作为数据取回,它并不像我那么容易。在GAE的php中,需要通过在php.ini文件中设置output_buffering = "On"来获得enable output buffering

下面我详细解释了一步。

此文档被取为参考使用Base64code的解析,以创建图像资源http://php.net/manual/en/function.imagecreatefromstring.php

// Create image resource from Base64code 
$data64 = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl' 
     . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr' 
     . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r' 
     . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='; 
$image = imagecreatefromstring(base64_decode($data64)); 

这是可以直接付诸重新取样功能的图像资源:http://php.net/manual/en/function.imagecopyresampled.php

// Resample 
$image_p = imagecreatetruecolor($new_w, $new_h); 
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_w, $new_h, $org_w, $org_h); 

结果也是一个图像资源。为了将其作为数据,我们需要Buffering
how to create a base64encoded string from image resource

// Buffering 
ob_start(); 
imagepng($image_p); 
$data = ob_get_contents(); 
ob_end_clean(); 

使用文档下面我设置my project一个GCS桶的网站,所以我可以商店&显示它直接: https://cloud.google.com/storage/docs/website-configuration#tips

//Store & Display 
$context = stream_context_create([ 
    'gs' =>[ 
     'acl'=> 'public-read', 
     'Content-Type' => 'image/jpeg', 
     'enable_cache' => true, 
     'enable_optimistic_cache' => true, 
     'read_cache_expiry_seconds' => 300, 
    ] 
]); 
file_put_contents("gs://mybucket/resample/image.jpeg", $data, false, $context); 
header("Location: http://mybucket/resample/image.jpeg"); 
+0

值得指出的是'imagecopyresampled()'比'imagecopyresized()'产生更好的质量,因为它插值了。 – garrettlynch