前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python骚操作 | 用Python来P图

Python骚操作 | 用Python来P图

作者头像
PM小王
发布2019-07-02 16:00:09
1.4K0
发布2019-07-02 16:00:09
举报
文章被收录于专栏:程序员小王程序员小王

写在前面

PS作为世界四大发明之一可以说被广大网友用到了极致,只有你想不到的没有我P不了的,任何正经的图片在都可以变成搞笑图片(比如下图)当然也可以用ps做一点正经的事情。

作为一个爱折腾的程序猿能用代码的解决的事情绝对不会用其他的方式,Python可以打飞机,人工降雪,那么p个图对于Python来说是小儿科了,今天就教给大家Python之p图大法。

(王老湿吞热狗镇楼)

具体介绍

今天P图主要用到的就是PIL库。 PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了,今天只是简单的学习了几个方法就已经感受到PIL的强大。 PIL可以做很多和图像处理相关的事情: 图像归档(Image Archives)。PIL非常适合于图像归档以及图像的批处理任务。你可以使用PIL创建缩略图,转换图像格式,打印图像等等。 图像展示(Image Display)。PIL较新的版本支持包括TkPhotoImage,BitmapImage还有Windows DIB等接口。PIL支持众多的GUI框架接口,可以用于图像展示。 图像处理(Image Processing)。PIL包括了基础的图像处理函数,包括对点的处理,使用众多的卷积核(convolution kernels)做过滤(filter),还有颜色空间的转换。PIL库同样支持图像的大小转换,图像旋转,以及任意的仿射变换。PIL还有一些直方图的方法,允许你展示图像的一些统计特性。这个可以用来实现图像的自动对比度增强,还有全局的统计分析等。 今天先给大家介绍今天学到的三个比较好玩的操作,并没有详细的介绍PIL那些最常用的特性与用法,感兴趣的小伙伴文末留言如果人数较多会考虑分享常用的特性。 主要参考自: http://www.effbot.org/imagingbook/ 代码实现 先上一个效果图。

实现这个效果使用的是PIL中的Blend类 Image.blend(image1,image2,alpha) ⇒image 使用给定的两张图像及透明度变量alpha,插值出一张新的图像。这两张图像必须有一样的尺寸和模式。 合成公式为:out=image1(1.0- alpha)+image2alpha 若变量alpha为0.0,返回第一张图像的拷贝。若变量alpha为1.0,将返回第二张图像的拷贝。对变量alpha的值无限制。

代码语言:javascript
复制
1from PIL import Image
2im1 = Image.open("124.jpg")
3im2 = Image.open("123.jpg")
4print(im1.mode,im1.size)
5print(im2.mode,im2.size)
6im = Image.blend(im1, im2, 0.3)
7im.save('k3.jpg')

当然除了上面的方法还可以使用Composite类 Image.composite(image1,image2, mask) ⇒ image 复合类使用给定的两张图像及mask图像作为透明度,插值出一张新的图像。变量mask图像的模式可以为“1”,“L”或者“RGBA”。所有图像必须有相同的尺寸

代码语言:javascript
复制
1from PIL import Image
2im1 = Image.open("124.jpg")
3im2 = Image.open("123.jpg")
4r,g,b = im1.split()            
5print(b.mode)
6print(im1.mode,im1.size)
7print(im2.mode,im2.size)
8im = Image.composite(im1,im2,b)
9im.save('k1.jpg')

自己只是做了一个简单的测试大家可以通过这种方法做出更好看的图片,PIL不仅可以使两张图片进行重合,还可以给图片添加水印。

代码语言:javascript
复制
 1from PIL import Image, ImageDraw,ImageFont
 2#将原来的图片转换为RGBA模式
 3im = Image.open(r"timg2.png").convert('RGBA')
 4#新建一个图片,尺寸与上面的尺寸一样,透明度为0即完全透明
 5txt=Image.new('RGBA', im.size, (0,0,0,0))
 6#设置要写文字的字体
 7fnt=ImageFont.truetype("D:\PycharmProjects\music\SIMYOU.TTF", 30)
 8#打汉字
 9d=ImageDraw.Draw(txt)
10#写要打的位置,内容,用的字体,文字透明度
11d.text((txt.size[0]-205,txt.size[1]-50),"@Ahab杂货铺",font=fnt, fill=(255,0,0,300))
12#两个图片复合
13out=Image.alpha_composite(im, txt)
14#保存加水印后的图片
15out.save(r"KB.png")

下面带来最后一组有趣的操作:

Filter类 im.filter(filter) ⇒ image 返回一个使用给定滤波器处理过的图像的拷贝。在该模块中,预先定义了很多增强滤波器,可以通过filter()函数使用,预定义滤波器包括: BLUR,CONTOUR,DETAIL,EDGE_ENHANCE,EDGE_ENHANCE_MORE,EMBOSS,FIND_EDGES,SMOOTH。其中BLUR就是均值滤波,CONTOUR找轮廓,FIND_EDGES边缘检测,使用该模块时,需先导入。

代码语言:javascript
复制
1from PIL import Image
2from PIL import ImageFilter                         ## 调取ImageFilter
3img = Image.open("123.jpg")
4blu = imgF.filter(ImageFilter.BLUR)                ##均值滤波
5con = imgF.filter(ImageFilter.CONTOUR)             ##找轮廓
6edge = imgF.filter(ImageFilter.FIND_EDGES)         ##边缘检测
7blu.save('k.jpg')
8con.save('k2.jpg')
9edge.save('k3.jpg')

看一下效果第一张是原图,剩下的是根据我们设置的呈现的效果图。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小王 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
  • 具体介绍
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档