Romance del programador: Treinta líneas de código para hacer una imagen con su nombre - Edición Python

Participo en el "Concurso creativo de principios de verano" para obtener más información, consulte: Concurso creativo de principios de verano

Hola a todos, soy gris y presenté un artículo sobre cómo usar su nombre para dibujar sus bellas imágenes, que se implementa principalmente en Java. Hoy, usemos Python para implementarlo.

Además, el tamaño del código final no excederá las treinta líneas.

Enlace a la publicación de blog anterior: Programador's Romance: Treinta líneas de código para hacer una imagen en su nombre - Edición Java

1. Relacionado con el medio ambiente

Aquí elegimos python como nuestra principal arma de dibujo. En cuanto a la instalación del entorno python, no lo presentaremos aquí. Los socios interesados ​​pueden explorar por sí mismos.

En el mundo de Python, PIL es una herramienta poderosa para manipular imágenes. Creo que todos lo conocen. A continuación, lo usaremos para lograr nuestros objetivos.

Instalar dependencias

pip install Pillow
复制代码

2. Puntos básicos de conocimiento

Antes del inicio oficial, para aquellos que no están familiarizados con el funcionamiento de PIL, presentaré brevemente su uso básico y, por supuesto, también destacaré varios métodos que usaremos.

2.1 Cargando imágenes

from PIL import Image

img = Image.open("图片地址")
复制代码

Sí, es así de simple, solo Image.open()úsalo para leer la imagen.

2.2 Obtención de información básica de imágenes

Después de obtener la imagen, generalmente hay varios parámetros a los que se debe prestar atención, como ancho y alto, canal

width, height = img.size
# RGBA 表示包含透明度,如png
# RGB 不包含透明度,如jpg
mode = img.mode
复制代码

2.3 Crear mesas de trabajo para editar

Si queremos dibujar información en esta imagen, o queremos crear una mesa de trabajo vacía, primero debemos obtener un objeto ImageDraw

from PIL import ImageDraw

# 获取图片对应的画板
draw = ImageDraw.Draw(img)
复制代码

Después de obtener el objeto de dibujo anterior, podemos dibujar varias figuras geométricas, texto, imágenes, etc. de acuerdo con los diversos métodos que proporciona; si queremos obtener un tablero de dibujo vacío, ¿qué podemos hacer?


# 创建一个待透明度的图,第二个元组参数为图的宽高,第三个表示背景全透明
new_img = Image.new("RGBA", (width, height), (255, 255, 255, 0))
复制代码

ImageDraw proporciona muchos métodos de dibujo. Los siguientes son algunos casos de uso común, que no se describirán en detalle.

new_img = Image.new("RGBA", (480, 640), (255, 255, 255, 0))
# 创建绘制对象
draw = ImageDraw.Draw(new_img)

# 从 (10, 10) -> (100, 100) 画一条黄色直线
draw.line((10, 10, 100, 100), 'red')

# 绘制矩形 (100, 110) -> (200, 200),黑色填充,黄色填充
draw.rectangle((100, 110, 200, 200), 'black', 'red')

# 绘制椭圆
draw.ellipse((300, 300, 500, 400), 'yellowgreen', 'red')
# 园
draw.ellipse((250, 250, 350, 350), 'seagreen', 'red')

# 绘制文本,选择宋体,字体大小为28,uniquecode编码
font = ImageFont.truetype("simsun.ttc", 28, encoding="unic")
draw.text((300, 200), u'一灰灰Blog', 'red', font)
复制代码

Concéntrese en dibujar el texto aquí, draw.text((x,y), "文字", "文字颜色", 字体)este es el método a usar a continuación

2.4 Obtener píxeles

Si queremos obtener el valor RGB de la coordenada especificada, podemos hacer lo siguiente

pixel = img.getpixel((x, y))
复制代码

Al ver a la amiguita aquí, combinada con la publicación anterior del blog, si quieres realizar la versión de Python del dibujo con su nombre, creo que es muy simple.

2.5 Previsualizar y guardar imágenes

# 展示图片
new_img.show()

# 保存图片
new_img.save("save.png")
复制代码

3. Versión Python del dibujo de texto

A continuación, ingrese la implementación formal

from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

def render(path: str, name: str, save: str):
    img = Image.open(path)
    width, height = img.size
    # 创建画板,放大24倍
    new_img = Image.new("RGBA", (width * 24, height * 24), (255, 255, 255, 0))
    draw = ImageDraw.Draw(new_img)

    # 加载自定义字体,字体文件来自 https://www.diyiziti.com/Builder/446
    font = ImageFont.truetype(u"D://MobileFile/潇洒手写体.ttf", 20, encoding="unic")  # 设置字体
    render_index = 0
    for x in range(width):
        for y in range(height):
            pixel = img.getpixel((x, y))
            draw.text((x * 24 + 2, y * 24 + 2), name[render_index], pixel, font)  # 再指定的地方使用文字替代之前的纯色
            render_index = (render_index + 1) % len(name)
    new_img.save(save)
复制代码

Aun tomando como ejemplo a las personitas amarillas, veamos como es el efecto generado

imagen.png

A juzgar por la imagen de arriba, el resultado de la versión anterior de Java es similar al de la versión anterior de Java. Si está interesado, comencemos;

un contacto gris

Es mejor no tener libros que no tener libros. El contenido anterior es puramente de una familia. Debido a la capacidad personal limitada, hay omisiones y errores inevitables. Si encuentra errores o tiene mejores sugerencias, puede criticarlas y corregirlas. . Muchísimas gracias.

  • Sitio personal: blog.hhui.top
  • QQ: Un gris gris / 3302797840
  • Cuenta pública de WeChat: un blog gris

Supongo que te gusta

Origin juejin.im/post/7102007057733124133
Recomendado
Clasificación