bmp压缩到jpg后图像质量不佳

时间:2014-09-30 14:15:57

标签: android android-camera jpeg bmp

我正在制作自拍照片应用。 一切都很好,但最终保存的图像质量很差。 原始图片大小约为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();
}

1 个答案:

答案 0 :(得分:1)

您可以通过Exif标头设置JPEG旋转而不进行解码。这是最有效的方法,但有些观看者可能仍会显示旋转的图像。

或者,您可以使用JPEG lossless rotation。在SourceForge上,有一个Java开源类LLJTran。 Android端口位于GitHub