PIL로 문자열에 PNG 이미지를 쓰는 방법은 무엇입니까?
저는 PIL을 사용하여 이미지를 생성했습니다.메모리에 있는 문자열에 저장하려면 어떻게 해야 합니까?Image.save()
메서드에 파일이 필요합니다.
저는 그런 이미지들을 사전에 몇 개 저장하고 싶습니다.
클래스를 사용하여 파일처럼 동작하는 문자열 주위에 래퍼를 가져올 수 있습니다.BytesIO
object는 파일과 동일한 인터페이스를 제공하지만 메모리에만 내용을 저장합니다.
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
'programing' 카테고리의 다른 글
CSS로 특정 텍스트를 선택할 수 없도록 만드는 방법 (0) | 2023.08.26 |
---|---|
C#이 있는 압축/압축 해제 문자열 (0) | 2023.08.26 |
메이븐에서 Spring Boot 테스트를 실행하지 않음 (0) | 2023.08.26 |
FFMPEG 라이브러리를 사용하여 RTSP 스트림 수신 (0) | 2023.08.26 |
어떻게 하면 1000개의 숫자로 구성된 두 집합을 서로 비교할 수 있습니까? (0) | 2023.08.21 |