我试图将图片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;
}
答案 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。