如何在不损失图像质量和大小的情况下对base64图像进行解码和编码


how to decode and encode base64 image without losing the quality and the size

Am使用以下代码将图像从android编码到base64:

ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.PNG, 90, stream); //compress to which format you want.
            byte [] byte_arr = stream.toByteArray();
            image_str = Base64.encodeToString(byte_arr, Base64.DEFAULT);

然后将其插入mysql数据库,然后使用以下代码用php对其进行解码:

$filename_path = md5(time().uniqid()).".jpeg"; 
$decoded=base64_decode($image_str);
 file_put_contents("uploads/".$filename_path,$decoded);
//echo '<img src="uploads/".$filename_path"/>';
echo '<img src="uploads/'.$filename_path.'"/>';

一切都很好,我能看到图片,没有错误,但问题是质量和尺寸都下降了大约80%,我该怎么修复呢。

我认为如果你将压缩格式设置为JPEG,并将图像质量降低到50,那么就可以了:

ByteArrayOutputStream baos = new  ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, baos);
byte [] b = baos.toByteArray();
return Base64.encodeToString(b, Base64.DEFAULT);