base64 모듈을 사용하여 이미지를 문자열로 인코딩하고 싶습니다. 그래도 문제가 발생했습니다. 인코딩 할 이미지를 어떻게 지정합니까? 디렉토리를 이미지에 사용하려고 시도했지만 디렉토리가 인코딩되도록합니다. 실제 이미지 파일을 인코딩하고 싶습니다.
편집하다
이 스 니펫을 시도했습니다.
with open("C:\Python26\seriph1.BMP", "rb") as f:
data12 = f.read()
UU = data12.encode("base64")
UUU = base64.b64decode(UU)
print UUU
self.image = ImageTk.PhotoImage(Image.open(UUU))
하지만 다음과 같은 오류가 발생합니다.
Traceback (most recent call last):
File "<string>", line 245, in run_nodebug
File "C:\Python26\GUI1.2.9.py", line 473, in <module>
app = simpleapp_tk(None)
File "C:\Python26\GUI1.2.9.py", line 14, in __init__
self.initialize()
File "C:\Python26\GUI1.2.9.py", line 431, in initialize
self.image = ImageTk.PhotoImage(Image.open(UUU))
File "C:\Python26\lib\site-packages\PIL\Image.py", line 1952, in open
fp = __builtin__.open(fp, "rb")
TypeError: file() argument 1 must be encoded string without NULL bytes, not str
내가 뭘 잘못하고 있죠?
답변
귀하의 질문을 이해하지 못했습니다. 나는 당신이 다음 라인을 따라 무언가를하고 있다고 가정합니다 :
import base64
with open("yourfile.ext", "rb") as image_file:
encoded_string = base64.b64encode(image_file.read())
물론 파일을 먼저 열고 내용을 읽어야합니다. 단순히 인코딩 함수의 경로를 전달할 수 없습니다.
편집 :
좋아, 여기는 원래 질문을 편집 한 후의 업데이트입니다.
우선, Windows에서 경로 구분 기호를 사용할 때 실수로 이스케이프 문자를 누르지 않도록 원시 문자열 ( ‘r’로 문자열 접두어)을 사용해야합니다. 둘째, PIL의 Image.open은 파일 이름 또는 파일과 같은 형식을 허용합니다 (즉, 개체는 읽기, 찾기 및 말하기 방법을 제공해야합니다).
즉, cStringIO를 사용하여 메모리 버퍼에서 이러한 객체를 만들 수 있습니다.
import cStringIO
import PIL.Image
# assume data contains your decoded image
file_like = cStringIO.StringIO(data)
img = PIL.Image.open(file_like)
img.show()
답변
python 2.x에서는 .encode를 사용하여 간단하게 인코딩 할 수 있습니다.
with open("path/to/file.png", "rb") as f:
data = f.read()
print data.encode("base64")
답변
첫 번째 답변은 접두사가 b ‘인 문자열을 인쇄합니다. 즉, 문자열이 b’your_string ‘과 같습니다.이 문제를 해결하려면 다음 코드 줄을 추가하십시오.
encoded_string= base64.b64encode(img_file.read())
print(encoded_string.decode('utf-8'))
답변
이전 질문에서 말했듯이 문자열을 base64로 인코딩 할 필요가 없으므로 프로그램 속도가 느려집니다. repr을 사용하십시오.
>>> with open("images/image.gif", "rb") as fin:
... image_data=fin.read()
...
>>> with open("image.py","wb") as fout:
... fout.write("image_data="+repr(image_data))
...
이제 이미지가 image_data
파일에 호출 된 변수로 저장됩니다 image.py
. 새로운 인터프리터 시작 및 image_data 가져 오기
>>> from image import image_data
>>>
답변
어떤에서 대출 이보의 Wijk 데르 반 및 gnibbler 이전 개발이는 동적 솔루션입니다
import cStringIO
import PIL.Image
image_data = None
def imagetopy(image, output_file):
with open(image, 'rb') as fin:
image_data = fin.read()
with open(output_file, 'w') as fout:
fout.write('image_data = '+ repr(image_data))
def pytoimage(pyfile):
pymodule = __import__(pyfile)
img = PIL.Image.open(cStringIO.StringIO(pymodule.image_data))
img.show()
if __name__ == '__main__':
imagetopy('spot.png', 'wishes.py')
pytoimage('wishes')
그런 다음 Cython 으로 출력 이미지 파일을 컴파일하여 멋지게 만들 수 있습니다. 이 방법을 사용하면 모든 그래픽을 하나의 모듈로 묶을 수 있습니다.
답변
import base64
from PIL import Image
from io import BytesIO
with open("image.jpg", "rb") as image_file:
data = base64.b64encode(image_file.read())
im = Image.open(BytesIO(base64.b64decode(data)))
im.save('image1.png', 'PNG')