java - 将图像高度和宽度减少 50%,但磁盘上的图像大小保持不变

标签 java android

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

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 文档:

quality Hint to the compressor, 0-100. 0 meaning compress for small size, 100 meaning compress for max quality. Some formats, like PNG which is lossless, will ignore the quality setting

您的原始输入是 JPG,但您将其输出为 PNG。由于 JPG 始终会出现质量下降,从而引入伪影,从而使生成的 PNG 文件在转换时变得更大。尝试将其另存为质量为 80-100 的 JPG。

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

关于java - 将图像高度和宽度减少 50%,但磁盘上的图像大小保持不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18083919/

相关文章:

java - javafx 中的自动完成文本字段

Android switchcompat禁用文本点击

android - Activity 生命周期?

java - Android 上的互联网可用性

android - Git 在 bash 中工作但在 Android Studio 中不工作

android - Android Assets 文件夹的安全性

Java 简单的日期格式化程序,用于字符串日期

java - 什么使这个上下文静态?怎么办?

java - Mockito:验证在特定点调用方法

java - Java 简单LinkedList 的 self 实现