Java 将图像高度和宽度降低50%,但磁盘上的图像大小保持不变

Java 将图像高度和宽度降低50%,但磁盘上的图像大小保持不变,java,android,Java,Android,我试图通过重新调整图像的长度和宽度来减小图像的大小,但它保持相同的大小(以兆字节为单位),有时甚至更大,尽管它只有原来的一半大 String compressPath = Environment.getExternalStorageDirectory()+"/test2.jpg"; FileInputStream in = new FileInputStream(path); Bitmap fullSizeBitmap = BitmapFactory.decodeStream(in); Bitm

我试图通过重新调整图像的长度和宽度来减小图像的大小,但它保持相同的大小(以兆字节为单位),有时甚至更大,尽管它只有原来的一半大

String compressPath = Environment.getExternalStorageDirectory()+"/test2.jpg";
FileInputStream in = new FileInputStream(path);
Bitmap fullSizeBitmap = BitmapFactory.decodeStream(in);
Bitmap resized = Bitmap.createScaledBitmap(
    fullSizeBitmap, 
    (int)(fullSizeBitmap.getWidth()*0.5), 
    (int)(fullSizeBitmap.getHeight()*0.5), 
    true
);

FileOutputStream mOutputStream = new FileOutputStream(compressPath);
resized.compress(Bitmap.CompressFormat.PNG, 100, mOutputStream);

有什么问题吗?我必须降低质量吗?

每个位图的Android文档:

压缩机的质量提示,0-100。0表示压缩为小 尺寸,100意味着压缩可获得最高质量某些格式,如PNG 它是无损的,将忽略质量设置

您的原始输入是JPG,但您正在将其输出到PNG。由于JPG总是会出现质量下降,从而引入工件,因此在转换时会使生成的PNG文件变大。尝试将其保存为质量为80-100的JPG


此外,在我的测试中,压缩到PNG比压缩到JPG需要2-5倍的时间,因为PNG压缩是在软件中完成的,JPG是在硬件中完成的。因此,对于大多数图像,最好压缩为JPG。

每个位图的Android文档:

压缩机的质量提示,0-100。0表示压缩为小 尺寸,100意味着压缩可获得最高质量某些格式,如PNG 它是无损的,将忽略质量设置

您的原始输入是JPG,但您正在将其输出到PNG。由于JPG总是会出现质量下降,从而引入工件,因此在转换时会使生成的PNG文件变大。尝试将其保存为质量为80-100的JPG


此外,在我的测试中,压缩到PNG比压缩到JPG需要2-5倍的时间,因为PNG压缩是在软件中完成的,JPG是在硬件中完成的。因此,对于大多数图像,压缩为JPG可能更好。

我如何将其输出为PNG?您的代码:
resized.compress(Bitmap.CompressFormat.PNG,100,mOutputStream)
,尝试将
Bitmap.CompressFormat.PNG
替换为
Bitmap.CompressFormat.JPEG
,看看是否有帮助。如何将其输出为PNG?您的代码:
已调整大小。压缩(Bitmap.CompressFormat.PNG,100,mOutputStream)
,尝试将
Bitmap.CompressFormat.PNG
替换为
Bitmap.CompressFormat.JPEG
,看看是否有帮助。