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.