TIFF에 포함된 lossless JPEG을 읽어서 변환할 수 있겠냐는 질문을 받았다.
모 장비에서 생성하는 엑스레이 파일이 그 포맷인 것 같았다.
이미 소스가 공개된 JPEG 바닥에 불가능한 건 없겠지만, 찾아보니 뭔가 이상한 점이 있었다.
lossless JPEG? 이거 적용한 파일을 내가 본 적이나 있었나? Arithmetic coded JPEG보다도 더 희귀한 존재 아니었나?
공부할 때나 들었던 전설 속의 존재 아니었나?
다행히 구글링을 통해 누군가가 이미 libjpeg 6b를 기준으로 lossless-jpeg를 지원하는 패치를 만들었다는 것을 확인했다.
아이고 감사하여라…
첫번째 단계는 TIFF에서 JPEG를 추출하는 것.
TIFF 태그 중에 참고할 부분은 0x0103(Compress)와 0x0111(Strip offset) 뿐이다.
Compress가 6 또는 7일 때가 JPEG[각주:1]이다. 참고로, 내가 받은 파일들은 이 값이 항상 7이었음.
두번째 단계는 libjpeg의 수정.
추출된 jpeg 파일을 패치가 적용된 libjpeg로 읽어보려니 컴파일이 잘 되지 않는다.
파일은 패치가 됐는데, 프로젝트 파일은 수정이 제대로 돼있지 않다.
이건 열심히 수작업으로 수정.
이렇게 수정하자 아래처럼 파일을 읽을 수 있었다.
세번째 단계는 16bpp 이미지에 대한 처리 보강.
내가 받은 파일들 중에는 8bpp 이미지 외에 16bpp 이미지[각주:2]도 있다.
libjpeg는 12bpp/16bpp 소스를 읽을 땐 알아서 8bpp로 downscale 해준다.
문제는 이 소스가 엉터리여서 0~65535의 범위 중에 0~4095 만을 사용한다는 것.
즉, 8bpp로 downscale 하면 0~15 만 사용하는 엉터리 파일이라 downscale 하기 전에 별도의 처리를 하거나 raw data를 읽어야 한다.
이런 부분을 적절히 처리하도록 수정해서 읽은 결과는 아래와 같다.
ffmpeg용 H.264/HEVC 인코더 품질/성능 비교 1/3 (4) | 2019.04.28 |
---|---|
ffmpeg을 이용한 HW 비디오 인코딩 테스트 결과 (2) | 2018.02.04 |
구글의 ZopfliPNG는 얼마나 파일 크기를 더 줄여주는가 (0) | 2017.01.05 |
PNG 파일의 크기를 극단적으로 줄여보자: ZopfliPNG (0) | 2016.12.27 |
구글이 공개한 두 가지 압축 기술: Zopfli와 Brotli (0) | 2016.12.27 |
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.