2021-01-27

Python利用Pillow生成分享海报图片

安装包:pip install pillow

from PIL import Image, ImageDraw, ImageFont


class GenerateImageHandle(object):

    def __init__(self):
        self.font = ImageFont.truetype('simsun.ttc', 24)
        self.color = "#000000"
        self.background = 'template.png'
        self.new_img = 'new.png'
        self.avatar = 'avatar.jpg'
        self.main_image = 'goods.jpg'
        self.header = '好友分享2个商品!'
        self.title = '百年润发'
        self.price = '¥39.9元起'
        self.offset = 110  # 商品主图偏移量

    def draw_avatar(self,im, background):
        im = im.resize((80, 80))
        bigsize = (im.size[0] * 3, im.size[1] * 3)
        # 遮罩对象
        mask = Image.new('L', bigsize, 0)
        draw = ImageDraw.Draw(mask)
        # 画圆的方法
        draw.ellipse((24, 24) + bigsize, fill=255)
        mask = mask.resize(im.size, Image.ANTIALIAS)
        im.putalpha(mask)
        background.paste(im, (24, 24), im)
        return background

    def get_font_size(self,size=20,font='simsun.ttc'):
        ft = ImageFont.truetype(font, size)
        return ft

    def save_image(self,image):
        image.save(self.new_img)

    def run(self):
        # 打开图片
        background = Image.open(self.background)
        avatar = Image.open(self.avatar)
        main_image = Image.open(self.main_image)
        new = self.draw_avatar(avatar,background)
        draw = ImageDraw.Draw(new)
        draw.text((130,52),self.header,self.color,self.get_font_size(size=28))
        im=None
        for i in range(2):
            im = self.draw_goods_image(new,main_image,i)
        im = self.draw_ercode(self.avatar,im)
        self.save_image(im)

    def draw_ercode(self, ercode, background):
        ercode = Image.open(ercode)
        ercode = ercode.resize((170,170))
        background.paste(ercode, (250,663))
        return background

    def draw_goods_image(self,image,goods_image,i):
        goods_image = goods_image.resize((100, 100),Image.ANTIALIAS)
        image.paste(goods_image,(49,128+24+self.offset*i))
        draw = ImageDraw.Draw(image)
        draw.text((49+self.offset+24,161+self.offset*i),self.title,self.color,self.get_font_size(size=24))
        draw.text((49+self.offset+24,128+33+40+self.offset*i),self.price,'#FF0B12',self.get_font_size(size=28))
        return image



if __name__ == '__main__':
    GenerateImageHandle().run()

参考文档地址:https://pillow-cn.readthedocs.io/zh_CN/latest/

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容