作为bm.compress(Bitmap.CompressFormat.PNG, 50, out); //here 50 will not work as PNG is lossless
如何减小.png镜像大小?同样,仅仅从可绘制的外部位置来处理会使文件大小增加5到10倍吗?
Bitmap bm=BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);
String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
File file = new File(extStorageDirectory, "ic_launcher.PNG");
outStream = new FileOutputStream(file);
bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
outStream.flush();
outStream.close();
发布于 2016-09-30 22:32:40
1)如果您的pngs是预定义的,您可以使用tiny png服务来拥有非常小的pngs。该服务将png大小减少了约60%,没有任何明显的变化。2)如果您的pngs是在运行时创建/获取的,请尝试使用Bitmap.createScaledBitmap()方法。使用此方法,您可以创建小尺寸的pngs。
在该方法中
bm.compress(Bitmap.CompressFormat.PNG, 100, outStream)
;
如果是PNG,则忽略100。因为它是无损的。相反,您可以使用
bm.compress(Bitmap.CompressFormat.JPEG, 80, outStream);
这个会给你更小的尺寸,压缩得更快。
发布于 2017-02-20 00:23:36
我知道这是旧的,但我仍然会回答任何未来的求职者。
Android的Bitmap类在压缩PNG方面相当有限。它只创建有限优化的PNG-32。打包apk文件的aapt程序确实对PNG文件进行了优化。因此,当您将PNG文件解压缩并读取到位图中,然后使用bitmap类对其进行压缩时,您将得到一个大得多的文件。
您可以使用pngj库,它支持更好的压缩PNG文件。
但根据你的描述,你似乎没有编辑应用程序中的文件,你只是从资源复制到卡,所以你需要做的就是包括raw
文件夹中的PNG文件,并通过调用openRawResource()
检索流到它,并将其直接复制到卡中。在将原始PNG文件包含在应用程序中之前,您可以使用TinyPNG对其进行进一步优化。
发布于 2016-09-30 22:28:26
你想严格遵守PNG吗?Bitmap.compressFormat.JPEG将能够压缩得更多。
减小PNG文件大小的唯一方法是将PNG图像尺寸减小到较小的尺寸。我不认为这是直接的纯Android,但有图像库,你可以使用这一点。
您也可以通过创建一个新的Bitmap对象并使用getPixels(...)手动从原始文件读取,将它们放入口袋以缩小比例,然后编写新的来编写它。但我不建议这样做,调整大小可能很难与抗锯齿一起正常工作。
https://stackoverflow.com/questions/39793619
复制相似问题