0

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 Answer 1

2

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.

Sign up to request clarification or add additional context in comments.

2 Comments

thanks for the response. I'm able to create a blob and pass it to the function. However whenever I call imagejpeg. It directly prints the blob to the screen instead of storing it in the variable
ah! Just read about object buffering. This may be my problem.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.