2012-01-12 4 views
0

데스크탑의 gif 파일 데이터를 원격 데스크톱 (데스크톱 공유 용) 소켓을 통해 보내려고하지만 PIL을 사용하여 데이터 문자열을 가져올 수 없습니다. 어떻게해야할지 모르겠습니다. 문자열에 Pil 개체를 변환, 여기 내 코드 (btw 나는 그냥 파일에 쓸 수있는 그런 다음 같은 데이터를 읽을 수 있지만 비효율적 인 생각하고 거기에 더 좋은 방법이있을 것 같아?).파이썬 PIL 이미지 개체에서 문자열 데이터를 가져 오는 방법은 무엇입니까?

from PIL import ImageGrab 
    import cStringIO 
    fakie = cStringIO.StringIO() 
    ImageGrab.grab().save(fakie, 'GIF') 
    data = fakie.getvalue() 
    fakie.close() 
    # This last bit of code is to see if the var data stored the right info in a str bc i need to send it through a socket 
    with open('C:\something\something\Desktop\image.gif', 'w') as f: 
     f.write(data) 

문제는 파일이 작성된 후 GIF 사진 만 페이지 (GIF 파일이 엉망)의 상단 1/10 표시하고, 그래서 난 문제가 내부에있는 경우 궁금하네요 것을 내 컴퓨터 또는 나의 코드 (나는 아주 오래된 컴퓨터에 비스타를 사용하고있다. 적어도 6 년은 내가 생각하고 곧 새로운 것을 얻는다). 모든 입력을 부탁드립니다.

+2

"wb"인수로 gif 파일을 열어보십시오. – HYRY

+0

'Image.tostring()'메서드는 어떤가요? – wim

+0

고맙습니다. – Baboon

답변

1

@HYRY는 "w"대신 "wb"모드로 이미지 파일을 열어야합니다. - "b"가 없으면 텍스트 모드로 열 때 파이썬 기본값이 사용됩니다 - 윈도우에서는 0x0a 바이트 파일, OS에 기록됩니다. 줄 끝 시퀀스를 Windows 기본 줄 끝으로 변환하기 때문에 대신 0x0d 0x0a 시퀀스를 씁니다.

"wb"모드에서는 변환이 없으므로 이미지 파일이 손상되지 않습니다.

관련 문제