2009-03-10 16 views
11

Windows에서 Python을 사용하여 PNG 이미지를 base64로 어떻게 인코딩합니까?Windows에서 파이썬의 base64 png

iconfile = open("icon.png") 
icondata = iconfile.read() 
icondata = base64.b64encode(icondata) 

리눅스와 OSX의 미세 위의 작동하지만 Windows에서 그것은 처음 몇 문자가 다음 짧게 잘라 인코딩됩니다. 왜 이런거야?

답변

26

Open the file in binary mode :

open("icon.png", "rb") 

나는 윈도우에 익숙하지 않다,하지만 난 무슨 일이 일어나고 있는지 상상하는 것 파일이 (기존의 이유로) Windows is interpreting as the end of the file가 열릴하는 문자 (0x1A)를 포함한다는 것입니다 텍스트 모드에서. 다른 문제는 Windows에서 텍스트 모드 ('b'가없는)로 파일을 열면 줄 끝이 다시 작성되어 일반적으로 줄의 끝을 나타내는 이진 파일이 손상된다는 것입니다.

+0

+1 때문에 효과적입니다. – Brian

+0

그는 정말로 정확합니다. linux/osx에서이 파일이 없으면 이상하게 작동합니다. – directedition

+0

Linus/OSX는 이진 파일과 텍스트 파일을 동일하게 처리하지만 Windows는 이진 파일과 다른 텍스트 파일에서 캐리지 리턴을 처리합니다. 또한 정답 옆에있는 확인란을 클릭하여 정답으로 표시해야합니다. – Powerlord

9

마일에서 답을 증대하기는 first eight bytes in a PNG file 특별히 설계 :

  • 89 - 사람이 읽을 수 있도록 - 첫 번째 바이트가 비트 8
  • "PNG"제거되지 않았 음을 확인하다 도스 파일 끝 문자 - 도스 -> 유닉스 전환
  • 1A가 있다면 확인하는 DOS 끝 (end-of-line) 표시, - 그것은 PNG 형식을
  • 0D 0A가 있다고

귀하의 코드에서 멈추는 UNIX 기반> DOS 변환이 있다면 확인하려면, 유닉스 끝 (end-of-line) 문자 - acter, 파일이 바이너리 모드

  • 0A에서 열린하는지 확인 1a.