python图片合成海报

记录知识点备用

功能:利用python合成海报,要求背景图上加上头像、昵称、二维码。

import io
import qrcode
import requests
from PIL import Image, ImageFont, ImageDraw, ImageOps


def gen_poster():
    """生成分享海报"""
    # 读取头像
    head_url = 'http://thirdwx.qlogo.cn/mmopen/fgHCN0LBhreDWUia2uicXHn0JS1FA86xNtkiafrIx71HV3fzkztqXTraqf3XB44hiaPESlhQqnalpUEX7DpCcFWXKlIQiaaeJUHbX/132'  # 头像
    head_res = requests.get(head_url)
    head_image = Image.open(io.BytesIO(head_res.content))
    head_image = head_image.resize((120, 120))  # 设定图片大小

    # 读取背景图
    back_image = 'https://static.interval.im/scrm/dPbnkRS5ttfxjMb7.jpeg'  # 背景
    back_res = requests.get(back_image)
    back_image = Image.open(io.BytesIO(back_res.content))
    back_image = back_image.resize((1080, 1920))  # 设定图片大小

    # 如果头像要求是圆形,做一个罩子把四角遮住
    size = (120, 120)
    mask = Image.new('L', size, 0)
    draw = ImageDraw.Draw(mask)
    draw.ellipse((0, 0) + size, fill=255)
    head_cover = ImageOps.fit(head_image, mask.size, centering=(0.5, 0.5))
    head_cover.putalpha(mask)
    # 如果要求是方形,head_cover忽略
    back_image.paste(head_image, (48, 48), head_cover)  # 将头像贴在背景图上

    nickname = '风吹叶落^_^'  # 昵称
    location = (216, 84)  # 昵称位置
    font_color = '#FFFFFF'  # 设置字体颜色
    font_size = 12  # 字体大小
    font_path = './宋体.otf'  # 本地读取的字体文件
    font = ImageFont.truetype(font_path, font_size * 3)
    obj = ImageDraw.Draw(back_image)
    obj.text(location, nickname, font_color, font=font)  # 将昵称贴在背景图上

    # 合成二维码
    code_url = ''  # 二维码跳转链接
    qr = qrcode.QRCode(version=3, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=8, border=0)
    qr.add_data(code_url)
    qr.make(fit=True)
    img = qr.make_image()
    qr_code = img.resize((270, 270))  # 设置二维码大小
    qr_location = (48, 1602)  # 二维码位置
    back_image.paste(qr_code, qr_location)  # 将二维码图片贴在背景图上

    # 展示成品图
    back_image.show()
    return 'success'


if __name__ == '__main__':
    gen_poster()

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python中,有多种方法可以合成图片。其中两种常见的方法是使用PIL(Python Imaging Library)和matplotlib库,以及使用numpy和OpenCV库。 方法一:使用PIL和matplotlib实现合并 首先,我们需要导入PIL库和matplotlib库。然后,使用`Image.open()`方法打开两张图片。接下来,创建一个新的图片对象,使用`Image.new()`方法指定图片模式和尺寸。然后,使用`paste()`方法将两张图片粘贴到新的图片对象上,可以通过`box`参数指定图片的位置。最后,使用`save()`方法保存合成后的图片,并使用`imshow()`和`show()`方法显示图片。 ```python from PIL import Image import matplotlib.pyplot as plt img1 = Image.open("1.jpg") img2 = Image.open("2.jpg") result = Image.new(img1.mode, (640*2, 480)) result.paste(img1, box=(0, 0)) result.paste(img2, box=(640, 0)) result.save("new_image.jpg") plt.imshow(result) plt.show() ``` 方法二:使用numpy和OpenCV实现合并 首先,我们需要导入cv2库和numpy库。使用`cv2.imread()`方法读取两张图片。然后,可以选择将图片转换为灰度图像(如果需要)。然后,使用`vstack()`方法将两张图片在垂直方向上连接,或者使用`concatenate()`方法在水平方向上连接。最后,使用`imwrite()`方法保存合成后的图片。 ```python import cv2 import numpy as np img1 = cv2.imread("1.jpg") img2 = cv2.imread("2.jpg") # 灰度图像 # gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) # gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY) # 垂直连接 # image = np.vstack((gray1, gray2)) # 水平连接 image = np.concatenate([img1, img2], axis=1) cv2.imwrite("new_image.jpg", image) # cv2.imshow("image", image) # cv2.waitKey(1) ``` 以上是两种常见的Python图片合成方法,您可以根据自己的需求选择其中之一来实现图片合成。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* *2* [python把两个图片合成一张图](https://blog.csdn.net/qq_42393859/article/details/108464416)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空空夏花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值