duanbixia7738 2018-06-10 00:29
浏览 131
已采纳

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

I'm trying to reduce an images blob size to under 150 KB

I've made a php function to do this however imagejpeg keeps on outputing data instead of storing it into a variable.

Basically, does anybody know how to compress an image into 150KB or lower? Quality loss is okay.

It comes in as base64. Then I decode it to a blob and pass it through this function.

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条回答 默认 最新

  • douxian1770 2018-06-10 01:05
    关注

    I can't tell if your issue is creating a blob instead of a file, or how to compress. I assume it is the former. I think you need to do the following to create a blob rather than a file:

    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
    

    In case you are unfamiliar, it is called "output buffering" and there's an example here.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部