I'm wondering how could I know the file size of a base64_encoded string? For instance:
$data = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl'
. 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr'
. 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r'
. '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==';
$data = base64_decode($data);
Thanks
strlen(base64_decode($encoded_data));
And as a rough rule of thumb, base64 encoding increases the original data in size by about 33%
If you want to know the size without decoding, I believe the following works:
$size = (int) (strlen(rtrim($data, '=')) * 3 / 4);
Or:
$size = (strlen($data) * 3 / 4) - substr_count(substr($data, -2), '=');
Otherwise, just use strlen()
on the decoded data as Marc as suggested.
Try this one, gives you size in Bytes, KB and MB too..
public function getBase64ImageSize($base64Image){ //return memory size in B, KB, MB
try{
$size_in_bytes = (int) (strlen(rtrim($base64Image, '=')) * 3 / 4);
$size_in_kb = $size_in_bytes / 1024;
$size_in_mb = $size_in_kb / 1024;
return $size_in_mb;
}
catch(Exception $e){
return $e;
}
}
Use the following code :
function getFileSizeInKb($base64string){
$bytes = strlen(base64_decode($base64string));
$roughsize = (((int)$bytes) / 1024.0)* 0.67;
return round($roughsize,2);
}