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

3

我正在使用以下代码将来自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%的质量和大小,我该如何解决这个问题。


1
它不应该影响图像质量。我会研究一下 bmp.compress(Bitmap.CompressFormat.PNG, 90, stream); - 我猜那里的 90 是一个质量设置。尝试将其调整为100,并根据您可接受的质量/文件大小适当降低它。 - JimL
2
don't compress the image - Adnan Amjad
我把它改成了100,但图片的质量和大小仍然相同。 - Laidi Oussama
“我失去了80%的质量和大小”-- 请编辑您的问题并提供获取此“位图”并进行比较以确定80%指标的代码。 - CommonsWare
这是关于编程的内容,翻译成中文:我尝试显示我失去了许多质量和大小,感谢您的建议,我已进行编辑。 - Laidi Oussama
显示剩余3条评论
1个回答

1

我认为如果你将压缩格式设置为 JPEG,并将图像质量降至 50,那就可以解决问题了:

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

如果你压缩成JPEG格式,那么你不会失去图像质量吗? - martijnn2008
是的,你说得对,但这里失去的质量并不明显,图像将以其原始质量和大小显示。-martijnn2008 - Wael AL-ameen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接