我是靠谱客的博主 动听音响,最近开发中收集的这篇文章主要介绍python 两张图片合成一张图片,并在指定位置加入文字,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

背景:开发要实现一个功能,类似做一个淘宝的合成图片,把一个图片放到另一个图片的部分区域,两个图片合成一张图片,在合成的图片上面,插入一段描述性的语句.实现步骤如下:

1两张图片合成一张,因为图片2比图片1还要大,所以要压缩后再进行合成

# coding:utf-8
"""
author:@
"""
from PIL import Image
import  os
p1=os.path.join(os.path.dirname(__file__),'files','1.png')
p2=os.path.join(os.path.dirname(__file__),'files','2.jpg')
#加载底图
base_img = Image.open(p1)
# 可以查看图片的size和mode,常见mode有RGB和RGBA,RGBA比RGB多了Alpha透明度
print (base_img.size, base_img.mode)
# box = (166, 64, 320, 337)  # 底图上需要P掉的区域
box = (500, 10, 880, 337)  # 底图上需要P掉的区域

#加载需要P上去的图片
tmp_img = Image.open(p2)

"压缩图片"
size =500,250
tmp_img.thumbnail(size)
tmp_img.save("2.jpg",'JPEG')
p3=os.path.join(os.path.dirname(__file__),'2.jpg')
tmp_img = Image.open(p2)
#这里可以选择一块区域或者整张图片
# region = tmp_img.crop((0,0,304,546)) #选择一块区域
#或者使用整张图片
region = tmp_img

#使用 paste(region, box) 方法将图片粘贴到另一种图片上去.
# 注意,region的大小必须和box的大小完全匹配。但是两张图片的mode可以不同,合并的时候回自动转化。如果需要保留透明度,则使用RGMA mode
#提前将图片进行缩放,以适应box区域大小
# region = region.rotate(180) #对图片进行旋转
region = region.resize((box[2] - box[0], box[3] - box[1]))
base_img.paste(region, box)
base_img.show() # 查看合成的图片
base_img.save('out.png') #保存图片




2/图片添加文字,涉及到中文字符的处理,所以会复杂点

# coding=utf-8
# cv2解决绘制中文乱码

import cv2
import numpy
from PIL import Image, ImageDraw, ImageFont


def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20):
    if (isinstance(img, numpy.ndarray)):  # 判断是否OpenCV图片类型
        img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    # 创建一个可以在给定图像上绘图的对象
    draw = ImageDraw.Draw(img)
    # 字体的格式
    fontStyle = ImageFont.truetype(
        "C:\Windows\Fonts\msyh.ttf", textSize, encoding="utf-8")
    # 绘制文本
    draw.text((left, top), text, textColor, font=fontStyle)
    # 转换回OpenCV格式
    return cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)


if __name__ == '__main__':
    img = cv2ImgAddText(cv2.imread('out.png'), "GTWIN Magnetic Car Ph  Magnetic Car Ph...", 30, 50, (199,40,66), 20)
    cv2.imshow('show', img)
    if cv2.waitKey(100000) & 0xFF == ord('q'):
        cv2.destroyAllWindows()

上面的注释比较详细了

最后

以上就是动听音响为你收集整理的python 两张图片合成一张图片,并在指定位置加入文字的全部内容,希望文章能够帮你解决python 两张图片合成一张图片,并在指定位置加入文字所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部