Android如何将png格式的图像转换为jpeg格式而不丢失质量

Android如何将png格式的图像转换为jpeg格式而不丢失质量,android,image,Android,Image,我开发了一个应用程序,它涉及到将图像上传到服务器的步骤。但是服务器只支持jpeg格式的图像,所以我必须转换用户在客户端拾取或捕获的png格式的图像。因此我使用以下代码进行图像格式转换: bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream); 但是与png格式相比,有些图像会失去质量,眼睛可以看到损失。这种方法是否有一些缺陷?在Android中是否有一些好方法可以在不损失质量的情况下进行png到jpeg的转换?jpeg是一种

我开发了一个应用程序,它涉及到将图像上传到服务器的步骤。但是服务器只支持jpeg格式的图像,所以我必须转换用户在客户端拾取或捕获的png格式的图像。因此我使用以下代码进行图像格式转换:

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);

但是与png格式相比,有些图像会失去质量,眼睛可以看到损失。这种方法是否有一些缺陷?在Android中是否有一些好方法可以在不损失质量的情况下进行png到jpeg的转换?

jpeg是一种有损压缩格式,它会有数据损失。请看这里的帖子:

“压缩”背后的想法是减少文件大小,但总有一个折衷方案。您可以尝试增大PNG文件的大小,然后进行“压缩”——但随后您可能需要将其缩小,这样您就回到了开始的位置

注:PNG与其他一些格式(如位图)相比不是“有损”的,而是“压缩”的。我最初发布的假设是压缩=有损,但有些格式被认为是“压缩”的,因为它们需要更少的存储空间,而且不会丢失。例如,Zip是一种文件格式,它将改变文件数据组织,以更少的空间和不丢失的方式存储它们


这是一种不同于JPEG的压缩方式,JPEG通过改变信息来“压缩”文件,并将其存储在较小的文件中。这种类型的压缩是完全不同的。

我想问一下,为什么我的压缩PNG文件比原始PNG文件大?可能有几个原因-首先,jpeg的“100%”或尝试零丢失不是很有效。而且,就像你的例子一样,它比其他无损算法做得更糟。可能还有其他参数可以更改,例如PNG上的颜色深度可能较低,或者对于平面分布和多种颜色的图像,JPEG算法通常效率很低。我不将PNG转换为JPG,而是将PNG转换为PNG(这意味着我从drawable文件夹中的资源PNG文件创建字节数组以上载到web服务)例如,我将一些PNG图像转换为jpeg,然后它将变暗before@Jim:my code here
private byte[]getFileDataFromDrawable(上下文,int-id){Drawable Drawable=ContextCompat.getDrawable(上下文,id);位图位图=((BitmapDrawable)drawable.getBitmap();ByteArrayOutputStream ByteArrayOutputStream=新建ByteArrayOutputStream();Bitmap.compress(Bitmap.CompressFormat.PNG,0,ByteArrayOutputStream);返回ByteArrayOutputStream.ToByByByByteArray();}
检查服务器上传的PNG文件后,其大小和纵横比始终大于原始文件