前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大神级Python工程师是怎么P图的,带你用Python玩转P图

大神级Python工程师是怎么P图的,带你用Python玩转P图

作者头像
企鹅号小编
发布2018-01-12 10:58:20
1.5K0
发布2018-01-12 10:58:20
举报
文章被收录于专栏:编程编程

1.PIL:Python影像库

PIL或者Python Imaging Library是一个包含许多函数来处理来自Python脚本的图像的包。PIL官方网站在这里。目前版本的PIL是PIL 1.1.7,可用于Python 2.3到Python 2.7。本文将使用Python 2.6的PIL 1.1.7。

在Windows(XP,Vista或者Seven)下,安装PIL相当简单:只需启动PIL Windows安装程序即可。当然你以前需要一个有效的Python 2.6.6安装。

PIL文档可在这里找到:

在线PIL文档

PDF PIL文件

2.加载图像

这是一个小的INIT脚本,它使用PIL来加载图像并显示它。如果您需要,可以在Image.VERSION变量中找到PIL版本。

导入HYP_Utils

导入系统

从PIL导入图像

scriptDir = HYP_Utils.GetDemoDir()

PIL_Version = Image.VERSION

img_filename =“%s / flower.jpg”%scriptDir

im = Image.open(img_filename)

im.show()

在Windows下,Image.show()函数将图像保存到临时文件并调用默认图像查看器实用程序。

3.保存图像

只要调用Image.save()函数。你想保存为JPEG格式?只需将.jpg扩展名添加到图像文件名中即可。对于其他格式也是如此。

阅读和写作支持的格式:*。bmp,*。gif,*。jpg,* .msp,* .pcx,*。png,* .ppm,*。tiff和.xbm。

这里是一个简单的JPG到BMP转换器:

导入HYP_Utils

从PIL导入图像

scriptDir = HYP_Utils.GetDemoDir()

PIL_Version = Image.VERSION

img_filename =“%s / flower.jpg”%scriptDir

im = Image.open(img_filename)

im.save(“%s / flower.bmp”%scriptDir)

4.读取像素

有两个函数可以读取像素图(或像素数据):Image.getpixel()和Image.getdata()。

图片。getpixel()返回单个像素的值。只需给出一个带有X和Y坐标的元组,getpixel()就可以为RGB图像返回一个3元组的RGB值,或者为亮度图像返回一个值。图片。getdata()返回完整的像素图。您需要Python函数list()来创建RGB元组的像素列表。

这里是一个代码片段,用PIL加载图像,用GeeXLab Python API创建一个纹理对象,并用图像像素填充纹理。

导入HYP_Utils

导入HYP_Texture

进口HYP_Material

导入系统

从PIL导入图像

scriptDir = HYP_Utils.GetDemoDir()

PIL_Version = Image.VERSION

img_filename =“%s / flower.jpg”%scriptDir

im = Image.open(img_filename)

imageW = im.size [0]

imageH = im.size [1]

TEXTURE_2D = 2

RGB_BYTE = 2

texId = HYP_Texture.Create(TEXTURE_2D,RGB_BYTE,imageW,imageH,0)

matId = HYP_Material.GetId(“plane1_mat”)

HYP_Material.AddTexture(matId,texId)

如果(im.mode ==“RGB”):

对于范围内的y(0,imageH):

对于范围内的x(0,imageW):

xy =(x,y)

rgb = im.getpixel(xy)

HYP_Texture.SetValueTex2DByteRgb(texId,offset,rgb [0],rgb [1],rgb [2])

elif(imout.mode ==“L”):

对于范围内的y(0,imageH):

对于范围内的x(0,imageW):

xy =(x,y)

rgb = im.getpixel(xy)

HYP_Texture.SetValueTex2DByteRgb(texId,offset,rgb,rgb,rgb)

使用Image.getdata(),前面脚本的最后几行是:

pixels = list(im.getdata())

如果(im.mode ==“RGB”):

对于范围内的y(0,imageH):

对于范围内的x(0,imageW):

rgb =像素[偏移]

HYP_Texture.SetValueTex2DByteRgb(texId,offset,rgb [0],rgb [1],rgb [2])

elif(imout.mode ==“L”):

对于范围内的y(0,imageH):

对于范围内的x(0,imageW):

rgb =像素[偏移]

HYP_Texture.SetValueTex2DByteRgb(texId,offset,rgb,rgb,rgb)

5.图像处理

您可以使用PIL轻松应用通用图像滤镜:模糊,浮雕,锐化等。只需导入ImageFilter模块:

从PIL导入图像

从PIL导入ImageFilter

...

i = Image.open(img_filename)

im = i.filter(ImageFilter.EMBOSS)

#im = i.filter(ImageFilter.FIND_EDGES)

...

预定义的滤镜包括:BLUR,CONTOUR,DETAIL,EDGE_ENHANCE,EDGE_ENHANCE_MORE,EMBOSS,FIND_EDGES,SMOOTH_MORE和SHARPEN。

还有一个名为ImageOps的模块,用于显示colorize(),flip(),grayscale(),invert(),mirror(),solarize()或posterize()等图像处理函数。

6.添加水印

ImageDraw和ImageFont使PIL能够在图像上写文本以及绘制线条或点。这是一个代码片段,显示了一个简单的批量转换器与PIL:它读取文件夹的所有jpg文件,添加水印(十字和“GEEXLAB”字符串),并保存带有gxl_前缀的图像。

导入HYP_Utils

导入os,glob

从PIL导入图像

从PIL导入ImageDraw

从PIL导入ImageFont

scriptDir = HYP_Utils.GetDemoDir()

ft = ImageFont.load(“timR24.pil”)

os.chdir(SCRIPTDIR)

file_list = glob.glob(“*。jpg”)

对于file_list中的f:

im = Image.open(scriptDir + str(f))

draw = ImageDraw.Draw(im)

draw.line((0,0)+ im.size,fill =(255,255,255))

draw.line((0,im.size [1],im.size [0],0),fill =(255,255,255))

wh = ft.getsize(“GEEXLA B”)

draw.text((im.size [0] / 2-wh [0] / 2,im.size [1] / 2 + 20),“GEEXLA B”,

fill =(255,255,0),font = ft)

draw.text((im.size [0] / 2 - wh [0] / 2,im.size [1] / 2 - 60),“GEEXLA B”,

fill =(255,255,0),font = ft)

德尔绘制

im.save(scriptDir +“gxl_”+ str(f))

还有一个很好的函数ImageFont.truetype(),但它不能在我的系统上工作,因为这个函数依赖于_imagingft.pyd库(实际上是一个DLL),由于Visual C运行时问题,无法加载。这是GeeXLab控制台中的错误:

我们来看看实际运用

调整图片亮度:

就个人而言,我认为这张照片看起来不错,但为了演示,我们试着把这张照片调亮。为了提高照片的关键是使用 Pillow's ImageEnhance module:

运行完上面的代码,你就会获得下面这样的图片:

如果你将enhancement factor调整0.0,那么你就会发现整张图片都变成了黑色,而如果你将其调整为0.7,那么你将获得下图:

调整图片对比度

如果我们之前拍摄了一些比较暗的图片,我们可以通过调整对比度和亮度来优化。

上图是一张毛毛虫的照片,我们可以通过将下图的代码和上面的代码相结合来调整图片:

ImageEnhance模块中的所有类都以相同的方式运行。你可以通过改变增强值来优化图片,下图是我将值调整到0.7后得到的:

改变图片的清晰度

如果你想要通过代码来实现图片锐化,那么下面的代码就值得一看:

在这里需要改变的是ImageEnhance的Sharpness类,如果想要锐化图片也可以参照上面的操作。

Pillow package 有很多简洁易用的功能,例如color类,有了它,你就可以随意使用Python来优化图片,玩转图片也可以这么酷炫!

本文来自企鹅号 - PythonDevil媒体

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

本文来自企鹅号 - PythonDevil媒体

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

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