programing

PIL로 문자열에 PNG 이미지를 쓰는 방법은 무엇입니까?

powerit 2023. 8. 26. 12:23
반응형

PIL로 문자열에 PNG 이미지를 쓰는 방법은 무엇입니까?

저는 PIL을 사용하여 이미지를 생성했습니다.메모리에 있는 문자열에 저장하려면 어떻게 해야 합니까?Image.save()메서드에 파일이 필요합니다.

저는 그런 이미지들을 사전에 몇 개 저장하고 싶습니다.

클래스를 사용하여 파일처럼 동작하는 문자열 주위에 래퍼를 가져올 수 있습니다.BytesIOobject는 파일과 동일한 인터페이스를 제공하지만 메모리에만 내용을 저장합니다.

import io

with io.BytesIO() as output:
    image.save(output, format="GIF")
    contents = output.getvalue()

으로 지정해야 합니다.format매개 변수를 지정하지 않으면 PIL이 자동으로 탐지하려고 할 때 오류가 발생합니다.

파일에서 이미지를 로드한 경우 원래 파일 형식을 포함하는 속성이 있으므로 이 경우에는format=image.format.

파이썬 되기 전의 의 파이썬 io모듈을 대신 사용했을 것입니다.

Python3의 경우 BytesIO를 사용해야 합니다.

from io import BytesIO
from PIL import Image, ImageDraw

image = Image.new("RGB", (300, 50))
draw = ImageDraw.Draw(image)
draw.text((0, 0), "This text is drawn on image")

byte_io = BytesIO()

image.save(byte_io, 'PNG')

자세히 보기: http://fadeit.dk/blog/post/python3-flask-pil-in-memory-image

뭔가의 해결책이 저에게 효과가 없었습니다.
왜냐하면...

Imaging/PIL/Image.pyc line 1423 -> raise KeyError(ext) # 알 수 없는 확장자

String에 존재하지 않는 파일 이름의 확장자에서 형식을 검색하려고 했습니다.IO 케이스

매개 변수에 형식을 직접 설정하여 형식 탐지를 우회할 수 있습니다.

import StringIO
output = StringIO.StringIO()
format = 'PNG' # or 'JPEG' or whatever you want
image.save(output, format)
contents = output.getvalue()
output.close()

save()경로뿐만 과 유사한 를 가져올 수 내인 경뿐만아같가개체수져은다와 같은 버퍼를 할 수 .StringIO:

buf = StringIO.StringIO()
im.save(buf, format='JPEG')
jpeg = buf.getvalue()

최신 버전(2017년 중반 Python 3.5 및 Pillow 4.0 기준):

String IO가 더 이상 예전처럼 작동하지 않는 것 같습니다.바이트IO 클래스가 이 문제를 처리하는 적절한 방법입니다.Pillow's save 함수는 첫 번째 인수로 문자열을 예상하는데 놀랍게도 String이 보이지 않습니다.IO가 그렇습니다.다음은 이전 문자열과 유사합니다.IO 솔루션(바이트 포함)대신 IO가 필요합니다.

from io import BytesIO
from PIL import Image

image = Image.open("a_file.png")
faux_file = BytesIO()
image.save(faux_file, 'png')

"사전에 저장된 이미지 수를 지정했으면 합니다."라고 말하면 메모리 내 구조인지 여부가 명확하지 않습니다.

메모리의 이미지를 확인하기 위해 이 작업을 수행할 필요는 없습니다.그냥 가지고 있어요image개체를 검색합니다.

사전을 파일에 쓸 경우 다음을 참조할 수 있습니다.im.tostring() 및 방법Image.fromstring()를 수행

http://effbot.org/imagingbook/image.htm

im.tostring() => string

표준 "raw" 인코더를 사용하여 픽셀 데이터가 들어 있는 문자열을 반환합니다.

Image.from string(모드, 크기, 데이터) => 이미지

표준 "원시" 디코더를 사용하여 문자열의 픽셀 데이터에서 이미지 메모리를 만듭니다.

"형식"(.jpeg, .png 등)은 파일을 교환할 때만 디스크에서 중요합니다.파일을 교환하지 않을 경우 포맷은 중요하지 않습니다.

언급URL : https://stackoverflow.com/questions/646286/how-to-write-png-image-to-string-with-the-pil

반응형