2014-12-26 4 views
4

이미지를 집중적으로 사용하는 애플리케이션을 작성 중입니다. 그것은 두 부분으로 구성됩니다. 클라이언트 부분은 Python으로 작성됩니다. 이미지에서 일부 사전 처리를 수행하고 TCP를 통해 Node.js 서버로 전송합니다. 는 전처리 한 후, 이미지 객체는 다음과 같습니다저장하지 않고 PIL 이미지의 바이너리 표현 얻기

window = img.crop((x,y,width+x,height+y)) 
window = window.resize((48,48),Image.ANTIALIAS) 

이 소켓을 통해 그것을 보내려면, 나는 바이너리 형식으로 그것을 가지고해야합니다. 내가 지금 뭐하는 거지 것은 : 다음 바이너리 형식을 얻기 위해 다시로드, 먼저 하드 디스크에 이미지를 저장하고 있기 때문에

window.save("window.jpg") 
infile = open("window.jpg","rb") 
encodedWindow = base64.b64encode(infile.read()) 
#Then send encodedWindow 

이,하지만 큰 오버 헤드이다. 이로 인해 응용 프로그램이 매우 느려집니다. PIL Image의 설명서를 읽었으나 유용한 것은 없습니다.

+0

다음과 같은 예외가 있습니다 http://stackoverflow.com/questions/23225738/convert-image-to-binary-stream –

답변

3

(effbot.org에서) 문서에 따르면 :..

는 "당신은 파일 이름 대신에 파일 객체를 사용할 수 있습니다이 경우, 당신은 항상 형식을 지정해야합니다 파일 객체가 구현해야하는 추구 말하고, 쓰고, 바이너리 모드로 열 수 있습니다. "

즉, StringIO 객체를 전달할 수 있습니다. 그것에 쓰고 디스크를 치지 않고 크기를 얻으십시오. 이처럼

:

s = StringIO.StringIO() 
window.save(s, "jpg") 
encodedWindow = base64.b64encode(s.getvalue()) 
+0

: 파일 "를/usr/local/lib로 /python2.7/dist-packages/PIL/Image.py ", 줄 1670, 저장 중 raise KeyError (ext) # 알 수없는 내선 – Wahbivic

+0

@Wahbivic은'window.save (s,"jpg ")'를 사용합니다. PIL/Pillow를 사용하면 파일 이름으로 형식을 감지 할 수 없거나 여기에 파일 이름이없는 경우 원하는 형식을 지정해야합니다. – MattDMo

+0

@MattDMo 감사합니다 백만. 이상한 이유로 window.save (s, "jpg")도 예외를 발생 시켰습니다. 그래도 window.save (s, "jpeg")는 잘 작동했습니다. – Wahbivic

관련 문제