使用pillow生成分享图片
重复性的工作一定要交给计算机去做!
有时候要为公司做一张宣传用的分享图片,很简单交给设计通过ps、AI做好就行了,但是如果一个网站要为每个用户生成一张专属的分享图片,如果让设计师一张一张的去做,哪设计师估计会崩溃。下面就来演示用程序来生成一张在简书的专属分享图片吧。
程序生成分享图片分析
程序生成分享图片不是说程序从无到有生成一张图片,而是说我们把设计师设计的设计稿抽象成一块一块的,然后通过程序算法去把它们组装起来成一张新图片。我们通过下面这张图片来说明吧!

我的简书分享图片标记图
图中的绿色框内的内容是固定不变的,蓝色圆圈内的内容是变化的(尤其是点赞数和文章总字数会随时变化的),我们可以这样做把背景和固定不变的内容让设计师做成一张背景图片,剩下的随时会变化的东西就通过程序绘制上去。
本次用到的素材
模板图片(设计师设计好)

头像图片
![]()
二维码图片

我的简书首页地址生成的二维码 qrcode.jpg
生成图片所需的工具说明
我们使用python这门通用编程语言来处理图片,所以首先要在电脑上安装python,还用到了一个python图片处理的库Pillow等python安装好之后通过pip install Pillow安装即可。[注意:Pillow的首字母P是大写的]
生成步骤
我们可以把模板图片理解成一张黑板,然后把头像图片,二维码图片,文字等贴在黑板正确的位置就完成了,这个过程就相当于我们向黑板贴东西的过程!
step1:先把头像贴上去,贴头像的时候这里会有一个问题,头像图片是正方形的,而我们要的效果是一个圆形的头像,这里需要写个函数专门处理圆形头像的问题。代码如下:
"""
将头像变成圆形绘制在背景图片上,然后将合成的图片对象返回
"""
def drawCircleAvatar(im,background):
im = im.resize((170, 170));
bigsize = (im.size[0] * 3, im.size[1] * 3)
#遮罩对象
mask = Image.new('L', bigsize, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0) + bigsize, fill=255)
mask = mask.resize(im.size, Image.ANTIALIAS)
im.putalpha(mask)
background.paste(im, (235, 155), im)
return background
step2:绘制用户的昵称和写了多少字和收获多少个赞
#绘制用户昵称
font1 = ImageFont.truetype("simhei.ttf",32)
drawImage=ImageDraw.Draw(back_img)
drawImage.text((272, 366), unicode('梦想家','utf-8'), font=font1) #绘制用户写了多少字
font2 = ImageFont.truetype("simhei.ttf",30)
drawImage=ImageDraw.Draw(back_img)
drawImage.text((110, 436), unicode('写了2388个字','utf-8'), font=font2) #绘制获取的点赞数
font3 = ImageFont.truetype("simhei.ttf",30)
drawImage=ImageDraw.Draw(back_img)
drawImage.text((356, 436), unicode('收获10个赞','utf-8'), font=font3)
step3:绘制二维码图片
#将二维码图片粘贴在背景图片上
region = qrcode_img
region = region.resize((180, 180))
back_img.paste(region,(230,860))
完整代码
# -*- coding: utf-8 -*-
from PIL import Image,ImageFont,ImageDraw
import time,sys
reload(sys)
sys.setdefaultencoding('utf-8') """
生成分享图片的方法
"""
def createShareImg(avatarUrl,qrcodeUrl,nickname,countWord,countLiked):
startTime=time.time()
#加载背景图片
background=Image.open(ur'template.jpg')
#加载头像图片
avatar = Image.open(avatarUrl,"r")
qrcode_img = Image.open(qrcodeUrl,"r") # 将背景图片和圆形头像合成之后当成新的背景图片
back_img=drawCircleAvatar(avatar,background) #将二维码图片粘贴在背景图片上
region = qrcode_img
region = region.resize((180, 180))
back_img.paste(region,(230,860)) #绘制用户昵称
font1 = ImageFont.truetype("simhei.ttf",32)
drawImage=ImageDraw.Draw(back_img)
drawImage.text((272, 366), unicode(nickname,'utf-8'), font=font1) #绘制用户写了多少字
font2 = ImageFont.truetype("simhei.ttf",30)
drawImage=ImageDraw.Draw(back_img)
drawImage.text((110, 436), unicode(countWord,'utf-8'), font=font2) #绘制获取的点赞数
font3 = ImageFont.truetype("simhei.ttf",30)
drawImage=ImageDraw.Draw(back_img)
drawImage.text((356, 436), unicode(countLiked,'utf-8'), font=font3) #保存图片到文件
back_img.save('out.jpg') #保存图片
endTime=time.time() print "本次生成图片一共用时:".decode("utf-8").encode("gbk")
print str(endTime-startTime)+"秒".decode("utf-8").encode("gbk") """
将头像变成圆形绘制在背景图片上,然后将合成的图片对象返回
"""
def drawCircleAvatar(im,background):
im = im.resize((170, 170));
bigsize = (im.size[0] * 3, im.size[1] * 3)
#遮罩对象
mask = Image.new('L', bigsize, 0)
draw = ImageDraw.Draw(mask)
#画椭圆的方法
draw.ellipse((0, 0) + bigsize, fill=255)
mask = mask.resize(im.size, Image.ANTIALIAS)
im.putalpha(mask)
background.paste(im, (235, 155), im)
return background if __name__=='__main__':
avatarUrl="avatar.jpg"
qrcodeUrl="qrcode.jpg"
nickname="梦想家"
countWord="写了2388个字"
countLiked="收获10个赞"
createShareImg(avatarUrl,qrcodeUrl,nickname,countWord,countLiked)
如果你要在本地运行此脚本命令,将此脚本复制保存成本地文件xxx.py然后把模板图片、你的头像图片、你的简书主页的二维码图片放在同一目录下,修改脚本中的参数,在当前目录打开命令行执行下面的命令:
python xxx.py
就会在当前目录生成一张属于你自己的简书分享图片了。
我的简书分享图片

最终分享效果图
分享图片的二维码链接为我的简书首页地址。
模板图片只用ps简单的做了一下,不好看请轻喷,如果你有好的模板请在评论处分享~
使用Pillow生成图片的效率还是比较高的windows系统下在1s以内,linux系统下0.1s以内,系统配置不同可能时间也有一些差别。
pillow官方文档地址方便查看。
使用pillow生成分享图片的更多相关文章
- 使用PHP生成分享图片
小程序导航 wq.xmaht.top 假设代码中用到的资源文件夹在当前code_png目录下: /** * 分享图片生成 * @param $gData 商品数据,array * @param $co ...
- 微信小程序利用canvas生成海报分享图片
一 . 效果 这是借用女神照生成的分享的海报,图片来自网络. 新增了poster组件和更新图片自适应 二 . 准备 准备两张图片连接,最好是自己开发账号验证的https图片链接. 三 . 实现思路 其 ...
- [深入浅出WP8.1(Runtime)]生成图片和存储生成的图片文件
7.2.3 使用RenderTargetBitmap类生成图片 RenderTargetBitmap类可以将可视化对象转换为位图,也就是说它可以将任意的UIElement以位图的形式呈现.那么我们在实 ...
- 【转】DelphiXE10.2.3——跨平台生成验证码图片
原文地址 Java.PHP.C#等很容易在网上找到生成验证码图片的代码,Delphi却寥寥无几,昨天花了一整天时间,做了个跨平台的验证码,可以用在C/S和B/S端,支持Windows.Linux.An ...
- python中用Pillow库进行图片处理
一.Python中 PIL 图像处理库简介 PIL可以做很多和图像处理相关的事情: 图像归档(Image Archives).PIL非常适合于图像归档以及图像的批处理任务.你可以使用PIL创建缩略图, ...
- 第二百七十节,Tornado框架-生成验证码图片,以及验证码结合Session验证
Tornado框架-生成验证码图片,以及验证码结合Session验证 第一.生成验证码图片 生成验证码图片需要两个必须模块 1.python自带的random(随机模块) 2.Pillow()图像处 ...
- python 生成随机图片验证码
1.安装pillow模块 pip install pillow (1)创建图片 from PIL import Image #定义使用Image类实例化一个长为400px,宽为400px,基于RGB的 ...
- Android分享图片失败解决方案
前言:在做图片分享到微博或是用彩信分享的时候,会遇到“无法将图片添加到信息中”,其实这个问题的原因是创建的那个图片默认是,只能被当前应用调用,无法被其他应用调用,即分享的时候,无法读取到图片,并提示I ...
- 小程序(Wepy)--生成海报图片
对于小程序的分享, 除了分享给朋友, 好友群,是可以直接做到的, 但是要想扩大推广范围, 通过生成海报图片, 将自己小程序码带进去,应该是目前我所知的好办法了. 但是海报也不是那么好搞.之前自己手写出 ...
随机推荐
- Windows 7 蓝屏代码大全 & 蓝屏全攻略
关于Windows 7.Vista等系统的蓝屏,之前软媒在Win7之家和Vista之家都有很多文章讨论过,但是都是筛选的常见的一些问题,今天这个文章是个大全,希望大家看着别头痛,文章收藏下来以后待查即 ...
- 浅谈C语言指针
下面就几种情况讨论指针. 一.指针和变量 变量是存储空间的别名,访问形式是直接访问. 指针访问内存地址是间接访问. 使用指针访问内存的场合:1.局部变量,参数传递 2.动态分配内存 指针本身也是 ...
- 构建自己的PHP框架--构建模版引擎(2)
自从来到新公司就一直很忙,最近这段时间终于稍微闲了一点,赶紧接着写这个系列,感觉再不写就烂尾了. 之前我们说到,拿到{{ $name }}这样一段内容时,我们只需要将它转化成<?php echo ...
- 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数
隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...
- openjdk8之编译和debug
系统环境为ubuntu 16.04,uname -a: Linux ddy-Aspire-V5-573G 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:3 ...
- 将某个日期字符串转换为java.sql.Date的类型
import java.text.ParseException; import java.text.SimpleDateFormat; public class date { /** * @param ...
- 基于C#的接口自动化测试(一)
其实就是找个地方然后给关键的代码做个笔记什么的-- 字符串访问API接口,访问方法为POST: string url = URL; string RequestParam = Param; strin ...
- 利用php做出简单的发布信息和回复功能
题目要求 1.建一个pinglun的数据库,自己建表2.完成一个简单的发布信息回复功能3.布局可以随便,主要是功能要实现4.注意回复是可以回复每一条的评论5.评论回复功能类似于qq空间的发布信息和回复 ...
- 简单轻量级的一套JS 类库(RapidDevelopmentFramework.JS)
1.最近好久没有更新自己的博客了,一直在考虑自己应该写一些什么.4.2日从苏州回到南京的路上感觉自己的内心些崩溃和失落,我就不多说了? 猛然之间我认为自己需要找一下内心的平衡.决定开发属于自己一套快速 ...
- SCI论文写作中的注意事项
SCI论文一般都是英文的格式,其中有很多原则和细节需要我们注意,在我完成第一篇SCI论文的过程中,做些记录,同时和大家分享一下这些经验.同时也稍微改变一下园子里的人口比例,都是攻城狮,程序猿什么的也过 ...