이미지를 저장하지 않고 pyBarcode의 출력을 PIL 이미지 파일로 변환하려고합니다.pyBarcode 출력을 PIL 이미지 파일로 변환
>>> import barcode
>>> from barcode.writer import ImageWriter
>>> ean = barcode.get_barcode('ean', '123456789102', writer=ImageWriter())
>>> filename = ean.save('ean13')
>>> filename
u'ean13.png'
은 위에서 볼 수 있듯이, 내가 출력이 PIL 이미지로 처리 할 원하기 때문에 이미지가 실제로 내 파일 시스템에 저장하지 않으려는 : 첫째, pyBarcode은 같은 이미지 파일을 생성 .
i = StringIO()
ean = barcode.get_barcode('ean', '123456789102', writer=ImageWriter())
ean.write(i)
지금 내가있는 StringIO 파일 객체를 가지고 있고 그것을 "읽기"및 PIL 이미지 파일로 변환 PIL 원하는 : 그래서 일부 수정했다.
Image.new
또는
Image.frombuffer
을 사용하고 싶었지만이 두 가지 기능 모두 내가 크기를 입력해야했습니다 ... 바코드 StringIO 데이터에서 크기를 결정할 수 없습니까?
Image.open
은 해당 설명서에서 다음과 같이 설명합니다.
문자열 (파일 이름) 또는 파일 개체를 사용할 수 있습니다. 후자의 경우 파일 객체는 read, seek 및 tell 메서드를 구현하고 바이너리 모드로 열어야합니다.
StringIO 인스턴스도 파일 객체가 아닌가요? 이진 파일로 어떻게 열 수 있습니까?
Image.open(i, 'rb')
>>> Image.open(i, 'rb')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/mark/.virtualenvs/barcode/local/lib/python2.7/site-packages/PIL/Image.py", line 1947, in open
raise ValueError("bad mode")
ValueError: bad mode
나는 누군가의지도가 필요하다는 대답에 꽤 가깝다. 미리 감사드립니다.
당신이'Image.open'은 (내 말은, 단지 기본 모드로 엽니 다)에서 두 번째 매개 변수를 생략하려고 있나요? –
'.seek (0)'은'StringIO'?의 처음으로 되돌아 갔습니까? 그런 다음 PauloScardine이 제안했듯이 두 번째 매개 변수는 생략하십시오. 'io.BytesIO'도 사용하려고 할 것입니다. –
고마워요! seek (0)과 두 번째 매개 변수를 생략하면 트릭을 만들었습니다! – Mark