女朋友老是吵着要修图,作为程序员,只会敲代码,不会ps啊,真是令人头大。程序员是这么容易被难到的吗?肯定不会!最近发现了程序员的p图神器——python。python也可以修图吗?是滴!下面就带你进入python的修图世界。(以下面这张照片为例。)图片来源于pixabay库名称:PillowPillow是Python中最流行的图像预处理函数库,支持一系列简单或复杂的图像处理功能,也是其他Python库(如SciPy和Matplotlib)能够处理图像的基础。01安装与导入直接在cmd中使用pip方法安装pillow库:
pip install Pillow
需要注意的是,其在Python2中的库名为PIL,而非Pillow。导入:
from PIL import Image
02基本操作
01 打开图片
使用Image模块中的open函数打开一张图片:
im = Image.open('1.jpg')
02 查看格式
format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None:
im.format
输出:'JPEG'
03 查看大小
size属性是一个tuple,表示图像的宽和高(单位为像素):
im.size
输出:(960, 640)
04 查看模式
mode属性为表示图像的模式,模式属性如下:
im.mode
输出:'RGB'
05 查看文件名
im.filename
输出:'1.jpg'
06 查看位数
im.bits
输出:8
07 显示图片
标准版本的show()方法不是很有效率,因为它先将图像保存为一个临时文件,然后使用查看器进行显示。
im.show()
08 保存图片
im.save('2.jpg')
03图片处理01 图片裁剪使用open方法读取图片,然后查看它的size,size的输出是(960, 640),也就是图片的宽度和高度。之后我们调用crop方法来对图片进行裁剪,crop需要给定一个box参数,box是一个四元组,元组中元素的顺序是需要裁剪得到的图片在原图中的左、上、右、下坐标,即(left, upper, right, lower)。然后,我们使用save方法保存裁剪得到的图片。
img = Image.open("1.jpg")print(img.size) cropped = img.crop((200, 0,600, 400)) # (left, upper, right, lower) cropped.save("A.jpg")from PIL import Image
裁剪后的图片:
02 复制粘贴
Image的copy函数如其名会产生一个原图像的副本,在这个副本上的任何操作不会影响到原图像。paste()方法用于将一个图像粘贴(覆盖)在另一个图像上面。谁调用它,他就在该Image对象上直接作修改。
cropedIm = im.crop((400, 0, 800, 800))im.paste(cropedIm, (0, 0))im.show()im.save("B.jpg")
以裁剪后的图像宽度和高度为间隔,在循环内不断粘贴在副本中,会发生什么呢?
crop_width, crop_height = cropedIm.size width, height = im.size copyIm = im.copy()for left in range(0, width, crop_width):for top in range(0, height, crop_height): copyIm.paste(cropedIm, (left, top)) copyIm.save("C.jpg")cropedIm = im.crop((300, 50, 500, 350))
有一点像证件照的效果:03 图片缩放resize方法返回指定宽高度的新Image对象,接受一个含有宽高的元组作为参数。宽高的值得是整数。
resizedIm = im.resize((width, height+(960-640)))resizedIm.save("D.jpg")width, height = im.size
人也变瘦了,可以看到resize不是等比例缩放的,不过女生应该蛮喜欢变瘦的吧。04 图片旋转图像可以用rotate()方法旋转,该方法返回旋转后的新Image对象,并保持原始Image对象不变。rotate()的参数是一个整数或浮点数。
im = Image.open("1.jpg")im.rotate(90).save("E.jpg")im.rotate(270).save("F.jpg")im.rotate(180).save("G.jpg")im.rotate(20).save("H.jpg")
由上到下,分别是旋转了90°,180°, 270°、普通的20°。当图像旋转90或270度时,宽度和高度会变化。在windows上, 会使用黑色的背景来填补旋转造成的缝隙。05 画面增强PIL模块中有一个叫做ImageEnhance的类,该类专门用于图像的增强处理,不仅可以增强(或减弱)图像的亮度、对比度、色度,还可以用于增强图像的锐度。5.1 亮度增强Brightness:
brightness = 1.5 image_brightened = enh_bri.enhance(brightness) image_brightened.show()enh_bri = ImageEnhance.Brightness(im)
5.2 对比度增强Contrast:
contrast = 1.5 image_contrasted = enh_con.enhance(contrast) image_contrasted.show()enh_con = ImageEnhance.Contrast(im)
5.3 色度增强Color:
color = 1.5 image_colored = enh_col.enhance(color) image_colored.show()enh_col = ImageEnhance.Color(im)
5.4 锐度增强Sharpness:
sharpness = 6.0 image_sharped = enh_sha.enhance(sharpness) image_sharped.show()enh_sha = ImageEnhance.Sharpness(im)
调节亮度、对比度、色彩、锐度等,不就等于给照片加了滤镜吗?而且效果还不错!06 图像过滤在图像处理中,经常需要对图像进行平滑、锐化、边界增强等滤波处理。在使用PIL图像处理库时,我们通过Image类中的成员函数filter()来调用滤波函数对图像进行滤波,而滤波函数则通过ImageFilter类来定义的。6.1 高斯模糊
im.filter(ImageFilter.GaussianBlur).save("J.jpg")
6.2 浮雕
im.filter(ImageFilter.EMBOSS).save("L.jpg")
6.3 轮廓
im.filter(ImageFilter.CONTOUR).save("M.jpg")
除此之外,pillow中还提供以下滤波可供使用:
# 平滑im.filter(ImageFilter.SMOOTH).save('.jpg') # 细节im.filter(ImageFilter.DETAIL).save('.jpg') # 普通模糊im.filter(ImageFilter.BLUR).save('.jpg') # 边缘增强im.filter(ImageFilter.EDGE_ENHANCE).save('.jpg') # 找到边缘im.filter(ImageFilter.FIND_EDGES).save('.jpg')# 锐化im.filter(ImageFilter.SHARPEN).save('.jpg')
关于python中pillow库的照片处理到这儿就差不多了,虽然使用python进行照片处理跟ps还是有一定的差别,但基本操作没有问题,四舍五入我们还是会修图的!往 期 推 荐
壹
99%的人都不知道的Python整理文件方法,效率提升100倍
贰
有哪些你不知道的python小工具
叁
利用python制作词云,wordcloud神器你值得拥有