我正在制作自拍照片应用。 一切都很好,但最终保存的图像质量很差。 原始图片大小约为3MB,压缩图片大约为500kb。 我使用bmp压缩的原因是图片的旋转。 我无法找到另一种解决方案来获得正确的旋转。
有人知道如何通过轮换来获得更好的质量?
这是我的代码:
camera = Camera.open();
camera.setDisplayOrientation(orient);
Camera.Parameters params = camera.getParameters();
params.setJpegQuality(100);
params.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
camera.setParameters(params);
camera.takePicture(null,null, myPictureCallback_RAW);
回调:
public void onPictureTaken(byte[] rawData, Camera arg1) {
Matrix m = new Matrix();
if(rotation == 3){
m.postRotate(180);
}else if(rotation == 1){
m.postRotate(0);
}else{
m.postRotate(90);
}
Bitmap bitmap = BitmapFactory.decodeByteArray(rawData, 0, rawData.length);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m, true);
Uri uriTarget = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, new ContentValues());
OutputStream imageFileOS;
try {
imageFileOS = getContentResolver().openOutputStream(uriTarget);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, imageFileOS);
imageFileOS.close();
Toast.makeText(CameraSnapshotActivity.this,
"Image saved: " + uriTarget.toString(),
Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
camera.startPreview();
finish();
}
答案 0 :(得分:1)
您可以通过Exif标头设置JPEG旋转而不进行解码。这是最有效的方法,但有些观看者可能仍会显示旋转的图像。
或者,您可以使用JPEG lossless rotation。在SourceForge上,有一个Java开源类LLJTran。 Android端口位于GitHub。