una recorrer procesamiento por para manipular manipulacion librerias leer imagenes imagen filtros convertir con como cargar binario python python-imaging-library

recorrer - python leer imagenes



Python PIL: cómo escribir una imagen PNG en una cadena (6)

Con moderno (a mediados de 2017 Python 3.5 y Pillow 4.0):

StringIO ya no parece funcionar como solía hacerlo. La clase BytesIO es la forma correcta de manejar esto. La función de guardado de Pillow espera una cadena como primer argumento, y sorprendentemente no ve a StringIO como tal. Lo siguiente es similar a las soluciones anteriores de StringIO, pero con BytesIO en su lugar.

from io import BytesIO from PIL import Image image = Image.open("a_file.png") faux_file = BytesIO() image_data = faux_file.getvalue() image.save(faux_file, ''png'')

He generado una imagen usando PIL . ¿Cómo puedo guardarlo en una cadena en la memoria? El método Image.save() requiere un archivo.

Me gustaría tener varias de esas imágenes almacenadas en el diccionario.


Cuando dices "Me gustaría tener varias de esas imágenes almacenadas en el diccionario", no está claro si se trata de una estructura en memoria o no.

No necesita hacer nada de esto para moderar una imagen en la memoria. Solo mantén el objeto de image en tu diccionario.

Si va a escribir su diccionario en un archivo, es posible que desee ver el método im.tostring() y la función Image.fromstring()

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

im.tostring () => cadena

Devuelve una cadena que contiene datos de píxeles, utilizando el codificador estándar "en bruto".

Image.fromstring (modo, tamaño, datos) => imagen

Crea una memoria de imagen a partir de datos de píxeles en una cadena, utilizando el decodificador estándar "en bruto".

El "formato" (.jpeg, .png, etc.) solo importa en el disco cuando intercambia los archivos. Si no está intercambiando archivos, el formato no importa.


Para Python3, se requiere el uso de 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'')

Leer más: http://fadeit.dk/blog/post/python3-flask-pil-in-memory-image


Probablemente pueda usar la clase StringIO para obtener un contenedor de cadenas que se comporte como un archivo. El objeto StringIO proporciona la misma interfaz que un archivo, pero guarda los contenidos solo en la memoria:

try: # python 2 from StringIO import StringIO except ImportError: # python 3 from io import StringIO output = StringIO() image.save(output) contents = output.getvalue() output.close()

Esto podría llevar a un KeyError si PIL intenta detectar automáticamente el formato de salida. Para evitar este problema, puede especificar el formato manualmente:

image.save(output, format="GIF")


la solución de sth no funcionó para mí
porque en ...

Imaging / PIL / Image.pyc línea 1423 -> raise KeyError (ext) # extensión desconocida

Intentaba detectar el formato de la extensión en el nombre de archivo, que no existe en el caso de StringIO

Puede omitir la detección de formato estableciendo el formato usted mismo en un parámetro

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


save () puede tomar un objeto similar a un archivo así como una ruta, por lo que puede usar un búfer en memoria como un StringIO:

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