디코딩하지 않고 JPEG 이미지의 크기를 변경하고 다시 인코딩 할 수 있습니까?


12

640x480 JPEG 이미지를 320x240으로 변환하고 싶습니다. JPEG 이미지를 원시 YCbCr로 디코딩하고 크기를 조정 한 다음 JPEG로 다시 인코딩하여 수행 할 수 있음을 알고 있습니다. 그러나 JPEG 인코딩을 사용하면 디코딩없이 이미지를 직접 스케일링 할 수 있습니까?

답변:


14

JPEG 뷰어가 SmartScale JPEG 확장을 지원하는 경우에만 가능합니다 . jpegtran 은 N = 1..16의 N / 8 크기에 대해이 작업 을 수행 할 수 있습니다. 기본적으로 DCT 블록 크기는 재 압축시 8x8에서 다른 것으로 변경됩니다 (예 : 4x4).

참고 : SmartScale은 libjpeg 라이브러리 버전 8 에 도입 되었지만 뷰어가 널리 지원하지는 않습니다.

자세한 변경 사항을 설명하는 문서는 Evolution of JPEG 에서 확인할 수 있습니다 .

편집 : 대부분의 시청자는 libjpeg-turbo를 기반으로하므로 실제로 이러한 이미지를 표시 할 수없는 것 같습니다. 그리고 libjpeg-turbo 는이 기능을 구현하지 않기로 선택했습니다 . 사실, 우분투 14.04 및 Windows 8에서 꽤 많은 프로그램을 시도했지만 jpegtrans를 사용하여 작성된 축소 이미지를 표시 할 수 없었습니다. Photoshop, IrfanView 및 김프조차도 실패했습니다.

편집 2 : 실제로 Ubuntu와 Fedora는 libjpeg8 라이브러리도 제공하지 않지만 libjpeg-turbo 버전으로 완전히 바꿉니다. 따라서 어떤 프로그램도 JPEG SmartScale 파일을 읽을 수 없으므로 원래 libjpeg8 라이브러리에 정적으로 링크 된 몇 개의 바이너리를 저장하지 않습니다.


이미지에 추가 데이터를 추가하여 자라는 이미지를 구성하는 코덱이 있습니까?
Necktwi

진보적 인 jpeg는 어떻습니까? 내가 원하는 것을 정확하게하지 않습니까?
Necktwi

아니요, 이미지의 품질을 높이면 (낮음에서 전체로) 약간 다른 작업을 수행하지만 해상도는 항상 변경되지 않습니다 ( reference ). 그러나 다른 해상도를 인코딩하는 "계층 모드"라는 또 다른 JPEG 확장이 있습니다 (여기 참조 ). 그러나 libjpeg-turbo는이를 지원하지 않습니다 ( 여기 에서 "프로그레시브"를 검색 하십시오 ).
jmiserez

1
그리고 첫 번째 의견에 대답하기 위해 물론 그러한 코덱이 있습니다. JPG가 아닙니다. 찾고있는 것을 이미지 피라미드 또는 멀티 스케일 표현이라고합니다. 예를 들어 JPEG2000은 웨이블릿 피라미드를 생성하는 웨이블릿 변환을 사용합니다. Gaussian 또는 Laplacian pyramid와 같은 다른 피라미드가 있습니다. 이 슬라이드 세트 는 작동 방식에 대한 좋은 개요를 제공하고 JPEG2000은 여기여기에서 설명 합니다 .
jmiserez

새로운 JPEG 형식에 대한 정보를 주셔서 감사합니다. 많은 소스 이미지 (카메라, 스캐너 등)가 아직 사용하지 않을 것으로 예상됩니다.
AFH

3

짧은 대답은 '아니요'입니다. JPEG 이미지는 압축을 사용합니다. 즉, 각 출력 바이트는 다른 모든 출력 바이트에 의존합니다. 이미지 바이트 수를 변경하면 압축을 풀고 다시 압축해야합니다.

JPEG는 손실 압축을 사용하기 때문에 재 압축으로 인해 품질 손실이 발생하지만 해상도를 4 분의 1로 줄이면 품질이 떨어집니다. 다시 압축 할 때 JPEG 품질 수준을 높이면 저해상도 이미지에서 최상의 품질을 얻을 수 있지만 파일 크기는 커집니다.

이미지 작업을 많이하는 경우에는 디스크 공간이 충분한 경우 이미지를 완성 할 때만 PNG로 변환하는 PNG와 같은 무손실 압축 형식으로 작업하는 것이 가장 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.