PHP压缩/减少blob图像数据大小

时间:2018-06-10 08:29:19

标签: php image-processing

我试图将图片blob大小减少到150 KB以下

我已经创建了一个php函数来执行此操作,但imagejpeg继续输出数据而不是将其存储到变量中。

基本上,是否有人知道如何将图像压缩到150KB或更低? 质量损失是可以的。

它以base64的形式出现。然后我将它解码为blob并通过此函数传递。

function compressImageBlob($image_blob, $type, $loop = 0) {

    global $MAX_IMAGE_SIZE;

    $blob_size = strlen($image_blob);
    $loop++;

    if($loop > 10){
        return $image_blob;
    }

    if($blob_size >= $MAX_IMAGE_SIZE){
        $quality = ($MAX_IMAGE_SIZE/$blob_size)*10;

        if($quality >= 100){
            // it should never come here, but just in case
            $quality = 10;
        }

        $img = imagecreatefromstring($image_blob);
        $image_blob = imagejpeg($img, NULL, $quality);
        $image_blob = compressImageBlob($image_blob,$type,$loop);
    }

  return $image_blob;
}

1 个答案:

答案 0 :(得分:1)

我无法判断您的问题是创建blob而不是文件,还是如何压缩。我认为它是前者。我认为您需要执行以下操作来创建blob而不是文件:

ob_start();                      // Start output buffering
imagejpeg($img,NULL,$quality);   // Generate JPEG into buffer
$blob=ob_get_contents();         // Load output buffer into $blob var
ob_end_clean();                  // Clean up buffer

如果你不熟悉,它被称为“输出缓冲”,并且有一个例子here