如何使用php压缩/降低base64图像的质量?

时间:2019-05-15 10:50:41

标签: php base64

我在数据库内的base64中存储了多个图像。我使用php作为图像路径获取图像。但是我想从base64解码时减小图像的尺寸,因为如果加载完整尺寸的图像,它会减慢我的应用程序的速度。 (我只需要在后端使用全尺寸图片)。

new Container(
        width: 50.0,
        height: 50.0,
        decoration: new BoxDecoration(
        shape: BoxShape.circle,
        image: new DecorationImage(
          fit: BoxFit.fill,
          image: new AssetImage('images/lake.jpg')
          )
       )),

一切都很好用这种方式。我这样使用它:

/* 

DB stuff getting base64 string from database

$img = base64 string (can be with 'data:image/jpg;base64,' in front, thats for the str_replace())
*/

if($img){
  header("Content-Type: image/png");
  echo base64_decode(str_replace("data:image/jpg;base64,","",$img));
}

或在CSS中。出于安全原因,我需要这样做,我无法在服务器上存储任何图像,也无法在路径中包含<img src="http://example.com/getimg.php?id=4" /> 变量,因此随机人无法看到图像。

是否可以在不将实际图像存储在服务器中的情况下执行此操作?

1 个答案:

答案 0 :(得分:1)

您可以使用imagecreatefromstringimagecopyresized

实时示例here

<?php
if ($img) {
    $percent = 0.5;

    // Content type
    header('Content-Type: image/jpeg');

    $data = base64_decode($img);
    $im = imagecreatefromstring($data);
    $width = imagesx($im);
    $height = imagesy($im);
    $newwidth = $width * $percent;
    $newheight = $height * $percent;

    $thumb = imagecreatetruecolor($newwidth, $newheight);

    // Resize
    imagecopyresized($thumb, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

    // Output
    imagejpeg($thumb);
}