tutorial pil descargar python python-3.x python-imaging-library

python - descargar - PIL cómo escalar la imagen en relación con el texto dibujado en la imagen



pillow python (4)

Desafortunadamente, nadie puede responder mi pregunta.

Básicamente, no puede establecer el ancho y la altura de los arreglos al configurar el tamaño de fuente. Ambos dependen unos de otros. Así que si uno aumenta, el segundo también aumenta.

Así que he encontrado otra solución. Solo estoy configurando el tamaño de fuente y luego, en base a ese tamaño de fuente, estoy configurando el ancho y la altura.

from PIL import (Image, ImageDraw, ImageFont,) name = ''Adil Malik'' selected_font=''simply_glomrous.ttf'' font_size=30 font = ImageFont.truetype(selected_font, font_size) font_size = font.getsize(name) img = Image.new(''RGBA'', (font_size[0], font_size[0]), (255, 255, 255, 0)) draw = ImageDraw.Draw(img) font = ImageFont.truetype(selected_font, font_size) draw.text((0,0), name, (0,0,0), font) img.save(''signature.png'')

Estoy tratando de aumentar dinámicamente el tamaño de la imagen con respecto a la fuente y el texto dado a draw.text() .

El problema original es crear una imagen de firma basada en el nombre y la fuente que seleccione el usuario.

Aqui esta mi codigo

from PIL import (Image, ImageDraw, ImageFont,) width=20 height=20 selected_font=''simply_glomrous.ttf'' font_size=30 img = Image.new(''RGBA'', (width, height), (255, 255, 255, 0)) draw = ImageDraw.Draw(img) font = ImageFont.truetype(selected_font, font_size) draw.text((0,0), "Adil Malik", (0,0,0), font) img.save(''signature.png'')

Pero sigo teniendo el mismo tamaño de imagen definido en ancho y alto. ¿Podemos redimensionar dinámicamente la imagen en función de la fuente y su tamaño?

Nota : esta pregunta es opuesta a esta pregunta de stackoverflow


La funcionalidad que está buscando es el método Draw.textsize que toma una cadena de texto y las opciones de dibujo como entrada y devuelve el ancho y el alto del texto representado.

http://effbot.org/imagingbook/imagedraw.htm#tag-ImageDraw.Draw.textsize

Puede usar la clase Draw con una imagen que tenga un ancho y una altura de cero y luego llamar al método para determinar las dimensiones del texto que desea representar. Una vez que conozca esas dimensiones, puede cambiar el tamaño de la imagen en consecuencia. Por ejemplo:

from PIL import ImageDraw, ImageFont, Image # parameters text = "My Name" selected_font = "simply_glomrous.ttf" font_size = 30 # get the size of the text img = Image.new(''RGBA'', (0,0), (255, 255, 255, 0)) font = ImageFont.truetype(selected_font, font_size) draw = ImageDraw.Draw(img) text_size = draw.textsize(text, font) # resize and draw img = img.resize(text_size) draw.text((0,0), text, (0,0,0), font) img.save(''signature.png'')


Primero, necesita hacer las escalas correctamente: está comenzando desde un tamaño de fuente dado en puntos, que se define como 1/72 de pulgada; esas son escalas del "mundo real". La imagen que está dibujando se define en píxeles. Los píxeles se relacionan con pulgadas / puntos solo si también define la proporción de píxeles por pulgada.

Entonces, la forma en que piensa sobre el problema es un poco hacia atrás: debe comenzar con los píxeles que tiene (ya sea desde la fuente o la imagen de destino) y luego calcular el tamaño de fuente adecuado. Si desea que el usuario seleccione un tamaño de fuente, debe definir (o solicitar) un valor de DPI objetivo para poder cambiar entre las unidades de escala involucradas.


Si puedes usar openCV y numpy, puedes

  1. Compruebe el tamaño del texto utilizando getTextSize
  2. Cree una imagen en blanco usando numpy.ones ((altura, anchura, 3), np.uint8) * 255

  3. Añadir texto a la imagen usando putText,

  4. Guarda la imagen usando imwrite.

Vea here y here para referencias.