python-Pillow使用png贴图并调节透明度、边缘平滑、高斯模糊
最近在做一些贴图工作,小组内的贴图代码是以前的人写的,在贴图操作中采用的是一个点一个点赋值,我觉得pillow库肯定是有对应的方法的,本着能有方法就不要自己写(毕竟哪有人家官方库好用),记录一下写法
form PIL import Image, ImageFilter bg_img = Image.open('背景图路径') png_img = Image.open('png路径') #转四通道 bg_img = bg_img.convert('RGBA') png_img = png_img.convert('RGBA') # 设置一个粘贴位置的左上角点,这块自己设置吧,要保证用这个点贴图后不会超出背景图 x_start = 0 y_start = 0 # 以下是不修改透明度直接贴 # bg_img.paste(png_img, (x_start, y_start), png_img)
# 以下是修改png图片模糊
# png_img = png_img(ImageFiter.GaussianBlur(2)) # 2表示像素范围
# bg_img.paste(png_img, (x_start, y_start), png_img)
#以下是修改透明度后贴图
new_png = png_img.copy()
layer = Image.new('RGBA', png_img.size, (0,0,0,0))
new_png = Image.blend(new_png, layer, 0.3) #此处0.3,数值越小,png图越清楚
new_png = new_png.filter(ImageFilter.SMOOTH) #边缘平滑
bg_img.paste(new_png, (x_start, y_start), new_png) # 保存 bg_img = bg_img.convert('RGB') bg_img.save('out.jpg')
以下是原来的贴图方式
# 接上面y_start = 0 行以后 #转蒙版 png_load = png_img.load() img_load = bg_img.load()
# 此处注意遍历时先h后w (w, h) = png_img.size() for i in range(h): for j in range(w): if(png_load[j, i][3] > 15): bg_load[j+y_start, i+x_start] = png_load[j, i] # 保存
bg_img = bg_img.convert('RGB')
bg_img.save('out.jpg')
以下是另外一个博主写的,我觉得也不错,日后有用到可以参考
Python 技术篇-用PIL库修改图片透明度实例演示,改变png图片色道为RGBA、RGB
PIL 库可以设置图片透明度。pip install pillow 安装了 pillow 库后就可以使用 PIL 库了。
我们都知道,图片是由无数个点组成的,300x300 像素,就是 9 万个点。
每个点都有对应的颜色,PIL 图可以获取和设置每个像素点的颜色。
颜色有两种 RGBA 和 RGB,(r, g, b, a) 前者有 4 个值,后者有 3 个值,每个都是 0 到 255,RGBA 的 a 就代表透明度。
getpixel((x, y)) 是获取对应像素点的颜色。putpixel((x, y), color) 是设置对应像素点的颜色。
注:.PNG 格式的图片才支持透明度设置哦!
重点讲一下这段代码:color = color[:-1] + (100, )
因为获取到的 color 是 (r, g, b, 255) 这是一个元组,[:-1] 是切片,代表获取前 3 个元素,就是 (r, g, b),然后再加个 (100, )这是包含一个数元组的写法。加起来就是 (r, g, b, 100) 达到修改透明度的效果。
运行后的效果图如下:
本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/16386302.html,如有侵权联系删除

浙公网安备 33010602011771号