public void onPictureTaken(byte[] data, Camera camera) {
Uri imageFileUri = null;
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inJustDecodeBounds = true;
Bitmap mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, bmpFactoryOptions);
Log.d("SIZE", "mBitmap size :" + data.length);
bmpFactoryOptions.inJustDecodeBounds = false;
mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, bmpFactoryOptions);
imageFileUri = getApplicationContext().getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());
OutputStream imageFileOS = getContentResolver().openOutputStream(imageFileUri);
mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, imageFileOS);
imageFileOS.flush();
imageFileOS.close();
ByteArrayOutputStream stream1 = new ByteArrayOutputStream();
mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream1);
byte[] imageInByte1 = stream1.toByteArray();
long lengthbmp1 = imageInByte1.length;
Log.d("SIZE", "ByteArrayOutputStream1 size :" + lengthbmp1);
日志的输出如下所示:
D / SIZE(23100):mBitmap size:4858755
D / SIZE(23100):ByteArrayOutputStream1大小:8931843
任何人都可以帮助我为什么会有这种差异。 我需要根据大小压缩图像,但不会压缩大小变得不同..
答案 0 :(得分:0)
您似乎正在加载图像,然后重新压缩到位图
mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream1);
然后你想知道为什么图像尺寸不一样?答案是你重新编码了它。压缩率是100吗?如果加载压缩率为80%的位图,然后在任何图像编辑器中将其重新保存为100%,则尺寸将会增大。
答案 1 :(得分:0)
第一个问题是当你已经拥有字节时重新编码位图的原因。您观察到的尺寸差异来自不同的压缩。相机应用程序通常会以低于100的质量压缩图像,但您将其重新压缩为100.很明显,您的图像表示将需要更多空间。
如果确实需要重新压缩(例如,如果您以某种方式更改了图像),请尝试降低质量因素以获得更好的压缩效果。根据你的形象,90到100之间可能会有效。