차곡차곡 성 쌓기
article thumbnail

쓰던 것이 있었으나 날아간 관계로... 중요한 것만 다시 쓴다..

문제 발생

이번에 발생된 문제는 기본 사진에 All-in JPEG 사진이나 인터넷에서 다운 받은 사진을 넣으면 아예 이미지가 손상되어 보이지 않는 문제가 발생했다. 이미지 손상은 이때까지의 경험으로 정말 1~2 바이트의 오차만 있어도 깨지는 것을 봐왔기 때문에 우선 내 코드의 문제인지를 확인 하기 위해 어디가 잘못 된것인지를 다 뜯어 봐야 했다.. 내 코드 내가 봐도 이해하기 어려워서 계속 뜯어 고치고 고치고를 반복 했다. 덕분에 한결 깨끗해졌다! ㅎ 

 

사진 데이터 분석

 아무튼 내 코드를 다 뜯어 본 결론은 코드를 잘못 짠 것은 없었다. 이제 이게 구조상의 문제인지를 확인해야 했다! 손수 마커들의 종류와 위치를 확인해보고 일반 사진과 All-in JPEG 사진과 다운받은 사진의 구조를 노트에 적어가며 분석해보았다. 

 

 

알아낸 차이점은 표로 정리해 봤다.

 

사진 종류 기본 카메라로 찍은 사진 All-in JPEG 파일(Camera2 사용) 인터넷에서 다운 받은 사진
특징 - APP1에 메타데이터를 저장하며 썸네일이 존재.

- APP1 세그먼트의 크기는 약 28000byte

- 하나의 SOF, DQT, DHT

- DHT가 SOF보다 이후에 존재

- 정의된 JPEG format 구조와 가장 일치함 
- APP0과 APP1이 동시에 존재

- APP0 세그먼트의 사이즈는 약 20 정도로 작음

- 카메라 기종에 따라 APP1에 썸네일이 존재하기도 없기도 함

- SOS 뒤에 RST0~RST7 세트가 약 20개 연속으로 매우 많음
(이 특징은 다운 받은 사진에서도 나타남)
- APP0(JFIF)에 메타 데이터를 저장. 여기에는 색상 프로필도 존재함

- 여러개의 SOF, DQT, DHT, RST 가 존재

- DHT가 SOF보다 이잔에 존재

- 정의된 JPEG format 구조와 매우 다름

 

 분석의 결과

 All-in JPEG 사진에 APP0와 APP1이 동시에 사용되는 것을 알아냈다. 바뀐 All-in JPEG의 구조는 이미지를 추가할 때 APP1의 데이터만을 함께 추출한다. ( APP1만 추출하는 이유는 디지털 카메라에서 대부분 사용하는 메타데이터 포맷(Exif)이기 때문이다.) 그렇기 때문에 APP0의 데이터는 사라지게 되는데 APP0에는 주로 색상 프로파일, 화이트 밸런스, 선택적 색상공간을 저장된다. 보통의 메타데이터는 카메라의 정보나 이미지 크기 또는 위치 정보같은 사진에 대한 정보가 저장되기 때문에 메타 데이터가 없다고 하더라도 이미지가 깨지지 않는다. 그렇기 때문에 APP0의 여부가 이미지를 해석하지 못하게 될것이라 생각을 못했다. 하지만 색상 프로파일을 저장하는 것을 봤을 때 충분히 깨질 수 있는 요소 였다.

 

과연 APP0가 문제였을까?

APP0의 존재 여부가 이미지를 깨지게 하는 확실한 에러 요소인지를 확인하기 위해 다음과 같은 테스트를 진행했다.

 

메타데이터를 모두 추출하여 붙이기

 

정말 APP1만 추가해서가 문제였는지 이제 APP0 모두 다 추출하여 추가해보았다. 

결과

결과는 ... 이미지가 손상되지 않고 정상적으로 잘 보였다! 정말 문제는 APP0를 떼어서가 문제였다. 문제 원인은 알아냈으나 이 에러는 고칠수가 없었다. 왜냐하면 지금 당장은 APP0가 있고 없고가 문제지만 앞서 보았듯이 JPEG마다 모두 서로 다른 형식을 갖고 있다. 이렇게 하나 하나 맞춰갔다가는 코드도 아주 더러워질 것이고 모든 상황을 커버할 수 있을거라고 보장도 할 수 없다. 때문에 기본 사진에는 오로지 기본 사진만 추가할 수 있도록 코드를 변경하였다. 

 내가 JPEG 구조에 대해 공부한 것은 ISO/IEC 10918-2:1995 논문을 보고 참조하였는데 그 후에 포맷이 점점 발전되면서 다양한 형식들이 쓰이고 있는 것 같다. 하지만 지금 당장 JPEG 구조에 대해 구글링 해도 저 논문의 구조와 똑같이 나온다! 다시 보니 새롭다.. 처음 봤을 때 왜이리 자세히 안 그렸나 했는데 지금 보니 모든 상황을 다 열어두었던 그림 같다.. 하지만 저기에는 DQT도 하나이고 SOF 마커 이전에 DQT가 나오고 하는데 내가 분석한 사진들은 안그렇다..

 

profile

차곡차곡 성 쌓기

@nagrang

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!