Resizing base64 Images

前端 未结 4 1254
无人及你
无人及你 2020-12-10 12:38

I have multiple Images - saved as Base64 Strings and now i want to resize these images to get thumbnails of them...

Best would be using Javascript (Node-Server) to r

相关标签:
4条回答
  • 2020-12-10 13:08

    Maybe you just can use a lib to handle that. Try WideImage. I have used it and worked nicely.

    Example:

    $image = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $req->image));
    
    $thumbnail = WideImage::load($image)
      ->resize(300, 300, 'inside')
      ->crop('center', 'center', 300, 300);
    

    Library Documentation: http://wideimage.sourceforge.net/

    0 讨论(0)
  • 2020-12-10 13:15

    Your best bet is to use PHPThumb in PHP.

    An alternative is to invoke ImageMagick however you prefer:

    • http://coffeeshopped.com/2009/01/creating-image-thumbnails-using-php-and-imagemagick

    • http://www.hacksparrow.com/node-js-image-processing-and-manipulation.html

    0 讨论(0)
  • 2020-12-10 13:17

    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.
    See how to create a base64encoded string from image resource

    // Buffering
    ob_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");
    
    0 讨论(0)
  • 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

    0 讨论(0)
提交回复
热议问题