Resizing base64 Images Resizing base64 Images php php

Resizing base64 Images


I agree to the method from Jon Hanna: Do Parsing the Base64code then load it to GD Image before Resample. However to get it back as data it is not as easy as I though. On php in GAE it will need to enable output buffering by setting output_buffering = "On" in php.ini file.

Here I explain the step in detail.

This doc is taken as reference to Create Image Resource using the Parsing of 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));

This is an image resource which can be directly put to the Resample function: 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);

The result is also an image resource. To get it as a data we need Buffering.
Seehow to create a base64encoded string from image resource

// Bufferingob_start();imagepng($image_p);$data = ob_get_contents();ob_end_clean();

Using doc below I set a GCS bucket on my project as a website so I can Store & Display it directly: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");


No idea how to do that (or well, anything) in node.js, but the PHP bit of your question is certainly possible. After parsing the Base64, load it into a GD image and then resample it.

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