Python实现圆形图片处理,Pillow

您所在的位置:网站首页 地球圆形图片如何做视频 Python实现圆形图片处理,Pillow

Python实现圆形图片处理,Pillow

2024-07-14 18:40| 来源: 网络整理| 查看: 265

Python实现圆形图片处理,Pillow 前言一、技术要点1.1 安装开发包1.2 引入模块1.2.1 Pillow的Image模块1.2.2 Pillow的ImageDraw1.2.3 Pillow的ImageFont 二、需求描述2.1 说细设计(距离单位统一为像素) 三、技术实现3.1 定义变量参数3.2 结构设计3.2.1 CircleImage3.2.2 GetPoster 3.3 编码3.3.1 CircleImage3.3.2 GetPoster 四、展示效果4.1 执行结果4.2 源代码

前言

前几天,在项目中实现一个生成海报的功能,其中用户头像需要实现为圆形显示样式。

尝试用Python开发一段代码来实现一下。

一、技术要点

开发环境使用Python自带IDE。

1.1 安装开发包

Python用于图像处理的包是,Pillow。如果未安装,先安装Pillow包。 Pillow 是一个Python的图像处理库,它可以用于打开、操作和保存多种图像格式,如JPEG、PNG、BMP、GIF等。Pillow包含了丰富的图像处理功能,比如大小调整、旋转、裁剪、过滤器应用、颜色调整、文本绘制等。Pillow是Python Imaging Library(PIL)的分支版本,提供了更好的性能和广泛的支持。

pip install Pillow 1.2 引入模块

在Python环境中引入Pillow

import PIL from PIL import Image, ImageDraw, ImageFont 1.2.1 Pillow的Image模块

Pillow的Image模块是处理图像的核心模块之一,其主要作用是打开、操作和保存图像。Image模块支持多种文件格式,如JPEG、PNG、BMP、GIF等,并提供了丰富的图像处理功能,包括调整大小、旋转、裁剪、缩略图、过滤器应用、颜色调整、文本绘制等。通过使用Image模块,可以方便地实现对图像的各种处理和操作,从而满足不同场景下的需求。

1.2.2 Pillow的ImageDraw

Pillow的ImageDraw模块是在图像上绘制2D图形的模块之一,其主要作用是在图像上创建和编辑各种2D形状,如线、矩形、椭圆、多边形等。使用ImageDraw模块需要先创建一个ImageDraw对象,并提供包含图形的坐标、颜色、宽度等参数,然后可以使用该对象对图像进行绘制操作。

ImageDraw模块不仅提供了基本的绘图函数,还支持各种文本处理功能,如在图像上添加文本、调整字体、颜色和大小等。通过使用ImageDraw模块,可以方便地实现对图像的各种2D图形绘制和文本处理,从而满足不同场景下的需求。

1.2.3 Pillow的ImageFont

Pillow的ImageFont模块是用于操作和加载字体的模块之一,其主要作用是提供对不同字体文件的支持,并允许在图像上添加文本时指定字体、大小、颜色等参数。

使用ImageFont模块需要先加载相应字体文件并创建一个字体对象,然后可以将该字体对象传递给ImageDraw模块中的绘图函数以实现在图像上添加指定字体的文本。

ImageFont模块支持多种字体格式,如TrueType(.ttf)、OpenType(.otf)等,并提供了各种字体相关的属性,如字体名称、大小、样式等。通过使用ImageFont模块,可以实现在图像上添加各种字体类型和风格的文本,从而满足不同场景下的需求。

二、需求描述

生成一张宽600,长900的海报。在海报底部,程序自动依据用户信息生成,左边显示头像,头像以圆形显示,头像后面紧跟用户名。右边显示一个二维码,让用户进行扫码。主体为一张设计好的海报图。

总体样式如下: 来玩AI海报底图

2.1 说细设计(距离单位统一为像素)

头像距左边缘50,距离上边缘为723,头像大小为6464, 名称距离左边缘129,距离上边缘740,文字使用8号字 二维码距离左边缘407,距离上边缘683,大小:142142

其他需求内容(忽略10000字)

其他内容均为底图。

三、技术实现 3.1 定义变量参数

变量参数

3.2 结构设计

编写两个函数命名为:CircleImage、GetPoster

3.2.1 CircleImage

函数: CircleImage(img) 输入参数:

img 一个正方形图片

返回值:

一张处理成圆形的Image对象

功能:

将图片处理成圆形,其直径等于输入图片最小边长 3.2.2 GetPoster

函数: GetPoster(c,h,n) 输入参数:

c: 二维码路径h: 头像路径n: 用户名

返回值:

生成完成的一张海报图片,Image对象

功能:

将二维码,头像,用户名绘制到海报底图上 3.3 编码 3.3.1 CircleImage def CircleImage(img): # 重设尺寸为头像设计尺寸 Img1 = img.resize(head_sz) # 将图像转换成RGBA模式。使用图像透明通道。 img1 = img1.convert("RGBA") w, h = img1.size # 定义alpha通道 alpha = Image.new("L", img1.size, color=0) draw = ImageDraw.Draw(alpha) # 绘制一个圆,填充为255,即白色 draw.ellipse((0,0,w,h),fill=255) #应用透明通道到图片上 img1.putalpha(alpha) return img1 3.3.2 GetPoster def GetPoster(c,h,n): ''' c 二维码图片 h 头像图片 n 名称 ''' # 读取海报底图 o_poster = Image.open(Img_poster_base) o_poster = img_poster.convert("RGBA") # 读取二维码图 o_qr= Image.open(c) o_qr= o_qr.convert("RGBA") o_qr= o_qr.resize(qr_sz) # 读取头像图 o_head = Image.open(h) o_head = img_head.resize(hd_sz) # 裁剪图像为圆形 o_head = CircleImage(o_head) # 将二维码贴到海报上 o_poster.paste(o_qr, qr_xy) # 将头像贴到海报上 注意这里需要设置mask为目标图片的alpha o_poster.paste(o_head, hd_xy, mask=o_head.split()[-1]) draw = ImageDraw.Draw(o_poster) # 配置字体msyh.ttc是“微软雅黑” font = ImageFont.truetype('C:\Windows\Fonts\msyh.ttc', 18) # 写文字 draw.text(name_xy, n, fill='white', font=font) # draw.text(textXY2, "邀请您一起来玩AI", fill='white', font=font) # 生成海报名称 poster_name = "static/posters/POSTER_%s.png" % uuid.uuid4() # 保存海报 o_poster.save(poster_name) # 显示海报 o_poster.show() return poster_name 四、展示效果 4.1 执行结果

在这里插入图片描述

4.2 源代码

请通过以下地址来体验ChatGPT https://www.zhiyidata.cn/chatgpt/play

源码下载



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3