【问题标题】:Poor image quality after bmp compression to jpgbmp压缩成jpg后画质差
【发布时间】:2014-09-30 14:15:56
【问题描述】:

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

【问题讨论】:

  • Bitmap.CompressFormat.JPEG 将其更改为 Bitmap.CompressFormat.PNG 可能会有所帮助
  • @IllegalArgument ,不幸的是结果相同 :(
  • 可以显示旋转前后的图像吗?您是否在输出上运行了某种 JPEG 转储程序来查看量化值?

标签: android android-camera jpeg bmp


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2012-03-09
    • 1970-01-01
    • 2015-01-16
    相关资源
    最近更新 更多