640x480 JPEG 이미지를 320x240으로 변환하고 싶습니다. JPEG 이미지를 원시 YCbCr로 디코딩하고 크기를 조정한 다음 JPEG로 다시 인코딩하면 이 작업이 수행될 수 있다는 것을 알고 있습니다. 하지만 JPEG 인코딩을 사용하여 디코딩 없이 이미지 크기를 직접 조정하는 것이 가능합니까?
답변1
가능합니다. 단, JPEG 뷰어가 다음을 지원하는 경우에만 가능합니다.스마트스케일JPEG 확장자.jpegtranN=1..16인 N/8 크기에 대해 이 작업을 수행할 수 있습니다. 기본적으로 DCT 블록 크기는 재압축 중에 8x8에서 다른 크기(예: 4x4)로 변경되어 이미지 크기가 효과적으로 조정됩니다.
참고: SmartScale은버전 8libjpeg 라이브러리에 포함되어 있지만 시청자가 널리 지원하지는 않습니다.
변경 사항을 자세히 설명하는 문서는 여기에서 찾을 수 있습니다.JPEG의 진화.
편집하다:libjpeg-turbo를 기반으로 하기 때문에 대부분의 뷰어에서는 이러한 이미지를 실제로 표시할 수 없는 것 같습니다. 그리고 libjpeg-turbo이 기능을 구현하지 않기로 결정했습니다. 실제로 저는 꽤 많은 프로그램(Ubuntu 14.04 및 Windows 8)을 사용해 보았지만 jpegtrans를 사용하여 생성된 축소된 이미지를 표시할 수 있는 프로그램은 없었습니다. Photoshop, IrfanView 및 GIMP도 실패했습니다.
편집 2:실제로 Ubuntu와 Fedora는 libjpeg8 라이브러리도 제공하지 않고 libjpeg-turbo 버전으로 완전히 대체합니다. 따라서 원본 libjpeg8 라이브러리에 정적으로 링크된 몇 가지 바이너리를 제외하면 어떤 프로그램도 JPEG SmartScale 파일을 읽을 수 없습니다.
답변2
짧은 대답은 '아니요'입니다. JPEG 이미지는 압축을 사용합니다. 즉, 각 출력 바이트는 다른 모든 바이트에 종속됩니다. 이미지 바이트 수를 변경하는 경우 압축을 풀고 다시 압축해야 합니다.
JPEG는 손실 압축을 사용하기 때문에 재압축의 결과로 품질이 저하되지만 어쨌든 해상도를 4등분하면 품질이 저하됩니다. 재압축할 때 JPEG 품질 수준을 높이면 저해상도 이미지에서 최상의 품질을 얻을 수 있습니다. 물론 이렇게 하면 파일 크기가 커지게 됩니다.
이미지 작업을 많이 하는 경우에는 PNG와 같은 무손실 압축 형식으로 작업하는 것이 가장 좋습니다. 물론 추가 디스크 공간이 있는 경우 이미지가 완성된 경우에만 JPEG로 변환합니다.