RAW 파일의 축소판을 만들고 싶지만 RAW 파일을 직접 처리하는 것은 매우 느립니다. 임베디드 JPG에서 축소판을 먼저 처리하고 최후의 수단으로 RAW 파일 만 렌더링하려고합니다. 완드를 사용하여 임베디드 JPG를 추출하려면 어떻게해야합니까?Python의 MagickWand가있는 RAW 파일에서 JPG를 추출합니다.
1
A
답변
1
RAW
형식은 장치와 제조 방법에 따라 다릅니다. 일반적으로 완전한 이미지 센서 데이터는 JPEG 미리보기로 TIFF로 저장됩니다. 전체 파일을 도구로로드하는 대신 사양을 찾고 file
및 struct
으로 직접 미리보기를 추출하는 것이 더 빠릅니다. 다음은 Fujifilm's spec의 예입니다.
from struct import unpack
fd = file('source.raf','rb')
# Skip over header + directory
# See manufacture specification
offset = 16 # Magic bytes
offset += 12 # Version
offset += 32 # Camera name
offset += 24 # Directory start & meta
fd.seek(offset, 0)
jpeg_offest = unpack('i', fd.read(4)) # Read where JPEG data starts
jpeg_length = unpack('i', fd.read(4)) # Read size of JPEG data
fd.seek(jpeg_offset, 0)
jpg_blob = fd.read(jpeg_length)
이제 모든 RAW 데이터가 동일한 제조 사양으로 생성 된 경우이 솔루션은 작동
from wand.image import Image
if jpeg_blob:
img = Image(blob=jpg_blob)
else:
img = Image(filename='source.raf')
RAW 이미지에 다시 wand
에 BLOB, 또는 기본 놓습니다. 그렇지 않으면 각 사양에 대한 파일 프로필을 작성하고 각 RAW 파일의 매직 바이트를 평가하여 JPEG 데이터의 위치를 확인해야합니다. 당신은 캐논 CR2 파일을 읽을 경우 흐름이
0
...과 같이 보일 수 있습니다, 당신이 (이 pypi에이기도합니다) 사용할 수있는 rawphoto
라는 라이브러리를 작성했습니다. 나중에 다른 원시 형식에 대한 지원을 추가 할 수 있습니다
from rawphoto.raw import Raw
from wand.image import Image
with Raw(filename="example.CR2") as rawfile:
blob = rawfile.fhandle.get_thumbnail()
// Do something with your JPEG thumbnail, eg. convert it to a PNG with Wand:
with Image(blob=blob) as image:
image.format = 'png'
image.save(filename='someimage.png')
:
이 썸네일을 추출하려면, 당신은 뭔가를 할 수 있습니다. 당겨 요청을 환영합니다.
각 제조업체의 원시 형식이 축소판 JPEG에 대해 일정한 오프셋을 갖기를 기대하는 것이 합리적입니까? 형식이 업데이트 될 때 절대 변경되지 않기를 원하십니까? –
그렇게되지 않으므로 [magic bytes] (http://en.wikipedia.org/wiki/Magic_number_%28programming%29#Magic_numbers_in_files)를 읽을 필요가 있습니다. 대부분의 제조업체는 사양을 게시하고 모든 솔루션이이를 따라야합니다. – emcconville