본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Bitmap 변환시 exif 정보 유지시키기

by 돼지왕 왕돼지 2015. 11. 9.
반응형


 [android] Bitmap 변환시 exif 정보 유지시키기


Android, bitmap, createscaledbitmap, Exchangeable image file format, exif, ExifInterface, field, file path, format, getAttribute, getField, getname, Gif, jpeg, jpg, meta data, png, Riff, saveattributes, setAttribute, tag_image_length, tag_image_width, tiff, wav, 교환 이미지 파일 형식, 날짜, 메타데이터, 시간, 안드로이드, 위치, 유지, 저작권, 카메라 설정, 포맷


-

Bitmap.createScaledBitmap 을 사용해서 이미지 크기를 변경하면 exif 정보가 날아간다.


-

exif 정보는 Exchangeable Image File Format ( 교환 이미지 파일 형식 ) 의 약자로,
이미지 파일에 이미지에 대한 정보를 포함하는 메타데이터가 들어있다.
jpeg, tiff, riff, wav 포맷에 사용되며, png, gif 에서는 지원되지 않는다.


-

보통의 exif 정보는 날짜, 시간, 카메라 설정, 저작권, 위치 등의 정보가 저장된다.


-

여튼 exif 를 유지시켜주려면 아래와 같이 하면 된다.

ExifInterface srcExif = new ExifInterface(srcFile.getAbsolutePath());

ExifInterface dstExif = new ExifInterface(dstFile.getAbsolutePath());
copyExifWithoutLengthAndWidth(srcExif,dstExif);
dstExif.saveAttributes();

private static void copyExifWithoutLengthAndWidth(ExifInterface src, ExifInterface dst) {
    for (Field f:ExifInterface.class.getFields()) {
        String name = f.getName();
        if (!name.startsWith("TAG_")) {
            continue;
        }

        String key = null;
        try {
            key = (String)f.get(null);
        } catch (Exception e) {
            continue;
        }


        if (key == null) {
            continue;
        }

        if (key.equals(ExifInterface.TAG_IMAGE_LENGTH) || key.equals(ExifInterface.TAG_IMAGE_WIDTH)) {
            continue;
        }

        String value = src.getAttribute(key);
        if (value == null) {
            continue;
        }
        dst.setAttribute(key, value);
    }
}






반응형

댓글