适当减少手机使用,有助于视力保护... 新的一年祝您:身体健康,阖家欢乐!~~

python pillow PIL 生成图片和叠加图片的使用

浏览量:969 作者:admin 类别:: 学习笔记 更新时间:2023-08-02 00:48:46
from PIL import Image, ImageDraw, ImageFont, ImageEnhance
import numpy as np
# 定义图像的尺寸和背景颜色
width, height = 700, 400
white = (255, 255, 255)  # 白色
green = (0, 139, 69)     # 绿色
pink = (255, 99, 71)     # 番茄红

background_color = green

# 创建一个新图像
image = Image.new("RGB", (width, height), background_color)
draw = ImageDraw.Draw(image)

# 定义要显示的文本和文字颜色
text = "我是大标题"
text_color = (0, 0, 0)  # 黑色

# 加载字体文件并设置字体大小
font_size = 36
font = ImageFont.truetype("simsun.ttc", font_size)  # simsun.ttc 包含汉字 arial.ttf

# 计算文本的坐标使其居中显示
text_width, text_height = draw.textsize(text, font=font)
x = (width - text_width) // 2
y = text_height - 10

current_height = y
# 在图像上绘制文本
draw.text((x, y), text, fill=text_color, font=font)

# 第二行

font_size = 24
font = ImageFont.truetype("simsun.ttc", font_size)  # simsun.ttc  宋体,包含汉字 arial.ttf

# 计算文本的坐标使其居中显示
text_width, text_height = draw.textsize(text, font=font)
x = font_size * 2
y = text_height + current_height + 12
current_height = y

text = "小标题1:"
# 在图像上绘制文本
draw.text((x, y), text, fill=text_color, font=font)

# 第三行

font_size = 20
font = ImageFont.truetype("simsun.ttc", font_size)  # simsun.ttc  宋体,包含汉字 arial.ttf

# 计算文本的坐标使其居中显示
text_width, text_height = draw.textsize(text, font=font)
x = font_size * 2 + 20
y = text_height + current_height + 6
current_height = y

text = "1、可以填写更多文字,但不会自动换行 \n2、可以使用/\n 换行符等。\n3、更多内容"
# 在图像上绘制文本
draw.text((x, y), text, fill=text_color, font=font)

# 第四行

font_size = 24
font = ImageFont.truetype("simsun.ttc", font_size)  # simsun.ttc  宋体,包含汉字 arial.ttf

# 计算文本的坐标使其居中显示
text_width, text_height = draw.textsize(text, font=font)
x = font_size * 2
y = text_height + current_height
current_height = y
text = "小标题2:"
# 在图像上绘制文本
draw.text((x, y), text, fill=text_color, font=font)

# 第五行

font_size = 20
font = ImageFont.truetype("simsun.ttc", font_size)  # simsun.ttc  宋体,包含汉字 arial.ttf

# 计算文本的坐标使其居中显示
text_width, text_height = draw.textsize(text, font=font)
x = font_size * 2  + 20
y = text_height + current_height + 6
current_height = y

text = "我是京南网服小哥\n学习更多知识有利于更好的服务客户"
# 在图像上绘制文本
draw.text((x, y), text, fill=text_color, font=font)

# 第六行

font_size = 20
text_color = white  # 黑色

font = ImageFont.truetype("simsun.ttc", font_size)  # simsun.ttc  宋体,包含汉字 arial.ttf

# 计算文本的坐标使其居中显示
text_width, text_height = draw.textsize(text, font=font)
x = font_size * 2
y = text_height + current_height + 12
current_height = y

text = "其它文字信息"
# 在图像上绘制文本
draw.text((x, y), text, fill=text_color, font=font)

# 保存图像
# 增强图片对比度
enhance = ImageEnhance.Contrast(image)
enhance = ImageEnhance.Brightness(image)
image = enhance.enhance(1.0 / (1 - 0.2))

# image.save("card.png")

# ----------------------------------------
# 合成 其它图片 到 图片中
er_image = Image.open("er_zzz666.png")

# 创建绘图对象
er_draw = ImageDraw.Draw(image)

def combine(origin_photo, text_pic, alpha=0, out_name='card_out.jpg'):
    """
    为图片添加水印并保存
    origin_photo: 原图内容
    text_pic: 要添加的水印图片
    alpha:水印的不透明度
    out_name: 输出图片的文件名
    """
    # 合并水印图片和原图
    print(origin_photo.size)
    text_pic = text_pic.resize(origin_photo.size)
    # text_pic = text_pic.convert('RGBA')
    print(text_pic, origin_photo)
    # out = Image.blend(origin_photo, text_pic, alpha)  # 混合  适合水印
    out = Image.alpha_composite(origin_photo.convert('RGBA'), text_pic.convert('RGBA'))   # 叠加 mode必须是RGBA
    out = out.convert('RGB')
    # # 增强图片对比度
    # enhance = ImageEnhance.Contrast(out)
    # out = enhance.enhance(1.0 / (1 - alpha))
    # out.save(out_name)
    out.show()


def tiepian(back_img, front_img):
    # 将图片转换为numpy数组
    back_img_array = np.asarray(back_img)
    front_img_array = np.asarray(front_img)
    print(back_img_array, front_img_array)
    # 将待贴图片贴到原始图片上
    back_img_array[10:210, 400:600] = front_img_array[:200, :200, :3] * (
                front_img_array[:200, :200, 3:] / 255.0) + back_img_array[10:210, 400:600] * (
                                                  1.0 - front_img_array[:200, :200, 3:].astype(float) / 255.0)
    # ValueError: operands
    # could
    # not be
    # broadcast
    # together
    # with shapes(200, 200, 3)(200, 200, 0)
    
    # 这种方式待进一步深入学习,比如:照片加章、人像换脸等更多应用场景

    # 显示并保存结果图片
    result_img = Image.fromarray(back_img_array)
    result_img.show()
    # result_img.save('result.jpg')


combine(image, er_image)
# tiepian(image, er_image)


关于博主
北京南城网络及弱电【张工】为您提供:
校园网、楼宇、村镇、园区,光纤网络覆盖,无线覆盖 华为|H3c|锐捷|爱快|panabit等品牌,路由、交换机、AC、AP 无源光网络(PON)设备,布署、调试、维运,等服务...
应急/临时光纤熔接...[藤仓22S]
博文为学习python所写:内容摘自网络、学习笔记、记事备忘。
QQ:872876353,欢迎交流学习、加Q注明来意。

诗文鉴赏

《满江红》· 岳飞
落星侵晓没,
残月半山低。
怒发冲冠,
凭栏处、潇潇雨歇。
抬望眼、仰天长啸,壮怀激烈。
三十功名尘与土,八千里路云和月。
莫等闲、白了少年头,
空悲切。
源于生活-记录日常
The site based on python 3 with flask...