반응형
반응형

 

개발을 진행하다 보면 사진 속성값을 수정해야 하는 경우가 있다

사진에 GPS 데이터 값을 넣는다던가 회전값을 알아온다던가...

실제 개발을 하다가 사용해 본 내용을 정리해보고자 한다.

 

물론 ExifInterface를 이용해서 다른 정보들을 확인하는 글들은 많이 확인할 수 있을 것이다.

아래 구글 공식문서를 확인해도 가능하니 확인해 본다면 좋을 것이다.


# 개요 : 전달받은 사진에 현재 GPS 데이터를 삽입해라!! 

# 사용 라이브러리 : https://developer.android.com/jetpack/androidx/releases/exifinterface?hl=ko

 

Exifinterface  |  Android 개발자  |  Android Developers

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Exifinterface 이미지 파일 EXIF(데이터) 태그를 읽고 씁니다. 최근 업데이트 안정화 버전 출시 후보 버전 베타 버

developer.android.com

androidx.exifinterface:exifinterface:1.3.6

# GPS 데이터 삽입 코드

// 사진 속성 함수 선언
ExifInterface exif;

// GPS 데이터 중 위경도 좌표가 있는 GPRMC 데이터
String Avalid_GPS_DATA = "$GPRMC,232023.00,A,3724.769351,N,12705.867068,E,019.2,270.0,290419,,,A*5F";

// LAT, LON 값 추출
double latitude = Objects.requireNonNull(DRAW_LOCATION(Avalid_GPS_DATA)).latitude;
double longitude = Objects.requireNonNull(DRAW_LOCATION(Avalid_GPS_DATA)).longitude;

try {
    exif = new ExifInterface(사진파일경로);    // Photo.getpath()
    
    // 도분초 좌표 변환 : LAT
    int num1Lat = (int) Math.floor(latitude);
    int num2Lat = (int) Math.floor((latitude - num1Lat) * 60);
    double num3Lat = (latitude - ((double) num1Lat + ((double) num2Lat / 60))) * 3600000;

	// 도분초 좌표 변환 : LON
    int num1Lon = (int) Math.floor(longitude);
    int num2Lon = (int) Math.floor((longitude - num1Lon) * 60);
    double num3Lon = (longitude - ((double) num1Lon + ((double) num2Lon / 60))) * 3600000;

	// GPS 좌표 삽입
    exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, num1Lat + "/1," + num2Lat + "/1," + num3Lat + "/1000");
    exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, num1Lon + "/1," + num2Lon + "/1," + num3Lon + "/1000");

	// 북위, 남위 정보 삽입
    if (latitude > 0) {
        exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, "N");
    } else {
        exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, "S");
    }

	// 동경, 서경  정보 삽입
    if (longitude > 0) {
        exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, "E");
    } else {
        exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, "W");
    }

	// 정보 갱신
    exif.saveAttributes();
} catch (IOException e) {
    Log.e("PictureActivity", Objects.requireNonNull(e.getLocalizedMessage()));
}

 

이렇게 하면 끝~~~!! 

 

사진정보를 확인해 보면 GPS 정보가 삽입되어 있는 것을 확인할 수 있다.

 

이상으로 GPS 정보가 없는 사진에 휴대폰이나 다른 장치에서 전달받은 GPS 데이터를 삽입하는 방법이었다.

 

오늘도 모두 즐코딩 합시다~!!

반응형

+ Recent posts