如何在Android中的位图压缩后保存Exif数据

时间:2015-11-17 09:44:00

标签: android bitmap

我需要从SD卡获取图像,创建,旋转和保存更改的图像。 我尝试使用此代码

Bitmap original = BitmapFactory.decodeFile(file.getAbsolutePath());

    ExifInterface originalExif = new ExifInterface(file.getAbsolutePath());
    int orientation = originalExif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);

    Matrix matrix = new Matrix();
    int rotate = 90;
    if(orientation == ExifInterface.ORIENTATION_ROTATE_90){
        rotate = 180;
    }else if(orientation == ExifInterface.ORIENTATION_ROTATE_180){
        rotate = 270;
    }else if(orientation == ExifInterface.ORIENTATION_ROTATE_270){
        rotate = 0;
    }

    matrix.postRotate(rotate);

    Bitmap bitmap = Bitmap.createBitmap(original, 0, 0, original.getWidth(), original.getHeight(), matrix, true);

    try {
        FileOutputStream out = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
        out.flush();
        out.close();

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        original.recycle();
        bitmap.recycle();
    }


    ExifInterface newExif = new ExifInterface(file.getAbsolutePath());

    newExif.setAttribute(ExifInterface.TAG_ORIENTATION, String.valueOf(ExifInterface.ORIENTATION_ROTATE_90));

    newExif.saveAttributes();

但我无法保存ExifInterface中的更改。这只是清除所有标签。

1 个答案:

答案 0 :(得分:5)

saveAttributes方法仅将标签数据保存到JPEG文件中。

检查此链接

http://developer.android.com/reference/android/media/ExifInterface.html#saveAttributes()

所以如果你改变你的代码

bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);

到这个

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);

它将为您节省exif标签数据

希望这个帮助

如有任何其他问题,请告诉我