微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么下载的图片大小大于原始图片?

如何解决为什么下载的图片大小大于原始图片?

我正在开发一个从Internet下载JPG图片功能

当我使用BitmapFactory.decodeStream()下载并保存到内部存储器中时,文件大小大于原始文件

原始图像文件(.JPG)的大小为114KB 我保存的文件大小为261KB

b = BitmapFactory.decodeStream(urlConnection.getInputStream()); //Download original image

FileOutputStream fos = openFileOutput("x.jpg",MODE_PRIVATE);

b.compress(Bitmap.CompressFormat.JPEG,100,fos);

File ne = new File(getFilesDir()+"/x.jpg");

String l = ""+ Formatter.formatFileSize(MainActivity.this,ne.length())+"byte"//261KB

编辑:

InputStream is = urlConnection.getInputStream();

OutputStream outStream = MainActivity.this.openFileOutput("x.jpg",MODE_PRIVATE);

byte[] buf = new byte[1024]; int len = 0;
int total_len=0;

while ((len = is.read(buf)) > 0) {

outStream.write(buf,len);
total_len+=len;

} 
is.close(); outStream.close();

//total_len = 116797 byte
//saved image file size = 116797 byte

Bitmap z = BitmapFactory.decodeFile(getFilesDir()+"/x.jpg");

img.setimageBitmap(z);

解决方法

您将其设置为100质量,而无需压缩。原始图像的压缩质量小于100,但是在对流进行解码时,会将其转换为未压缩的位图。并且当您以100质量保存时,它肯定会比原始质量大得多。

因此,请尝试使用类似b.compress(Bitmap.CompressFormat.JPEG,70,fos); ...之类的东西,使其看起来不会变差。它将随您所愿。

编辑:如果您希望完整无缺地下载图像文件,请查看How to download file/image from url to your android app

,

您不应该首先将jpg文件转换为位图。

取消使用Bitmap和BitmapFactory。

循环读取的字节直接保存到目标文件的FileOutputStream中。

然后,将与下载时一样多的字节写入文件。

已经确定您的代码适合下载任何文件类型。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。