Python实现圆形图片处理,Pillow |
您所在的位置:网站首页 › 地球圆形图片如何做视频 › Python实现圆形图片处理,Pillow |
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的ImageDrawPillow的ImageDraw模块是在图像上绘制2D图形的模块之一,其主要作用是在图像上创建和编辑各种2D形状,如线、矩形、椭圆、多边形等。使用ImageDraw模块需要先创建一个ImageDraw对象,并提供包含图形的坐标、颜色、宽度等参数,然后可以使用该对象对图像进行绘制操作。 ImageDraw模块不仅提供了基本的绘图函数,还支持各种文本处理功能,如在图像上添加文本、调整字体、颜色和大小等。通过使用ImageDraw模块,可以方便地实现对图像的各种2D图形绘制和文本处理,从而满足不同场景下的需求。 1.2.3 Pillow的ImageFontPillow的ImageFont模块是用于操作和加载字体的模块之一,其主要作用是提供对不同字体文件的支持,并允许在图像上添加文本时指定字体、大小、颜色等参数。 使用ImageFont模块需要先加载相应字体文件并创建一个字体对象,然后可以将该字体对象传递给ImageDraw模块中的绘图函数以实现在图像上添加指定字体的文本。 ImageFont模块支持多种字体格式,如TrueType(.ttf)、OpenType(.otf)等,并提供了各种字体相关的属性,如字体名称、大小、样式等。通过使用ImageFont模块,可以实现在图像上添加各种字体类型和风格的文本,从而满足不同场景下的需求。 二、需求描述生成一张宽600,长900的海报。在海报底部,程序自动依据用户信息生成,左边显示头像,头像以圆形显示,头像后面紧跟用户名。右边显示一个二维码,让用户进行扫码。主体为一张设计好的海报图。 总体样式如下: 头像距左边缘50,距离上边缘为723,头像大小为6464, 名称距离左边缘129,距离上边缘740,文字使用8号字 二维码距离左边缘407,距离上边缘683,大小:142142 其他需求内容(忽略10000字) 其他内容均为底图。 三、技术实现 3.1 定义变量参数编写两个函数命名为: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 执行结果请通过以下地址来体验ChatGPT https://www.zhiyidata.cn/chatgpt/play 源码下载 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |