2012-08-30 3 views
0

ImageMagick의 변환 유틸리티를 사용하여 S3에 저장된 이미지의 축소판을 만들려고합니다. 나는 이것을 파이썬으로 작성하고있다.ImageMagick을 사용하여 Amazon S3에 저장된 이미지의 축소판을 생성합니다.

어떻게 접근해야합니까?

S3에서 이미지를 읽고 EC2 인스턴스의 임시 폴더에 저장하고 임시 디렉토리에 축소판을 생성 한 다음 임시 파일을 S3에 넣고 삭제해야합니까?

또는 S3에서 결과를 로컬 디스크에 저장하지 않고 ImageMagick으로 "파이프"할 수 있습니까?

이렇게하는 것이 좋습니다.

미리 감사드립니다.

답변

1

파일 개체와 함께 하위 프로세스를 사용할 수 있으며 직접 이미지 개체로 파이프 할 수 있습니다. 예를 들어 여기서는 임시 파일을 사용하지 않고 온라인 PNG를 jpg로 직접 변환합니다.

import subprocess 
import urllib2 
import sys 
source = urllib2.urlopen('http://cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png') 
p = subprocess.Popen(['convert','png:-', 'jpg:-'], stdin=source, stdout=subprocess.PIPE) 
p.communicate()[0] # this is your converted image 
+0

많은 메모리를 사용합니까? – ensnare

+0

프로세스를 다른 디스크립터에 파이프하면 메모리 사용량이 최소화되어야합니다. 즉, 구현 프로세스에 따라 완전히 추측되지만 압축 해제 된 이미지의 크기 + 압축 해제 된 축소판의 크기가되어야하는 변환 프로세스 버퍼 만 있어야합니다. 그들이 그보다 잘 수행하면 내부 구현이 매우 좋습니다;) – gbin

+0

감사합니다. 여러 축소판 크기를 생성하려면 어떻게 확장해야합니까? 다른 치수로 다른 서브 프로세스를 넣으면. (...) 선이 S3에서 전체 전체 이미지를 다시 다운로드합니까? – ensnare

관련 문제