将图像高度和宽度减小50%,但磁盘上的图像尺寸保持不变

cod*_*441 0 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);
Run Code Online (Sandbox Code Playgroud)

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

Kai*_*Kai 5

Per Bitmap的Android文档:

质量提示压缩机,0-100.0表示压缩小尺寸,100表示​​压缩以获得最高质量.某些格式,如无损的PNG,将忽略质量设置

您的原始输入是JPG,但您将其输出到PNG.由于JPG将始终具有引入工件的质量下降,因此在转换时使生成的PNG文件更大.尝试将其保存为JPG,而不是80-100质量.

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

  • 你的代码:`resized.compress(Bitmap.CompressFormat.PNG,100,mOutputStream);`,尝试用'Bitmap.CompressFormat.JPEG`替换'Bitmap.CompressFormat.PNG`,看看它是否有帮助. (2认同)