我正在创建一个Android应用程序,并希望从SD卡读取文件并将其发送到其他Web服务。一切正常但是当我从SD卡读取文件时,它的文件大小比原始文件大得多。一个10 KB的文件正在获得260 KB。
我正在做以下事情......
File f = new File(uri);
Log.d("ORIGINAL FILESIZE:"+f.length());
在SDCARD上存档10752字节。
这与手机上的图片尺寸完全相同。
Bitmap bmp = BitmapFactory.decodeFile(uri);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, bao);
Log.d("FILESIZE AFTER:"+bao.size());
解码/压缩后文件大小为260904字节。
这是服务器接收和写入磁盘的文件大小。 这是相同的图像和质量,但大约20倍。
有谁知道我做错了什么?
答案 0 :(得分:0)
如果您的原始文件是具有高压缩率的jpeg,则解码位图要大得多是正常的,特别是如果您在compress()
方法中使用质量100(这意味着高质量)。
您是否尝试使用质量较低的compress()
(参考documentation)?
答案 1 :(得分:0)
没错。或者至少它可能是。内存中位图的字节表示需要(32位图像)height * widht * 4
个字节。当然,它与文件大小不同,因为压缩。