2014-07-10 2 views
1

RAW 파일의 축소판을 만들고 싶지만 RAW 파일을 직접 처리하는 것은 매우 느립니다. 임베디드 JPG에서 축소판을 먼저 처리하고 최후의 수단으로 RAW 파일 만 렌더링하려고합니다. 완드를 사용하여 임베디드 JPG를 추출하려면 어떻게해야합니까?Python의 MagickWand가있는 RAW 파일에서 JPG를 추출합니다.

답변

1

RAW 형식은 장치와 제조 방법에 따라 다릅니다. 일반적으로 완전한 이미지 센서 데이터는 JPEG 미리보기로 TIFF로 저장됩니다. 전체 파일을 도구로로드하는 대신 사양을 찾고 filestruct으로 직접 미리보기를 추출하는 것이 더 빠릅니다. 다음은 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 파일을 읽을 경우 흐름이

dot file

+0

각 제조업체의 원시 형식이 축소판 JPEG에 대해 일정한 오프셋을 갖기를 기대하는 것이 합리적입니까? 형식이 업데이트 될 때 절대 변경되지 않기를 원하십니까? –

+0

그렇게되지 않으므로 [magic bytes] (http://en.wikipedia.org/wiki/Magic_number_%28programming%29#Magic_numbers_in_files)를 읽을 필요가 있습니다. 대부분의 제조업체는 사양을 게시하고 모든 솔루션이이를 따라야합니다. – emcconville

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') 

:

이 썸네일을 추출하려면, 당신은 뭔가를 할 수 있습니다. 당겨 요청을 환영합니다.

관련 문제