鱼C论坛

 找回密码
 立即注册
查看: 3926|回复: 4

[技术交流] Pillow库官方文档翻译-快速上手(一)

[复制链接]
发表于 2016-5-29 13:25:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
整篇快速上手包含四部分, 今天先发第一部分, 内容为官方文档的翻译, 时间允许的话我会单独开贴讲一讲 pillow 库的应用, 下面开始译文


使用 Image 类

在 Python 中最重要的图像处理库非 Image 莫属, 以同样的名字定义模块, 你能多样的实例化这个类, 无论是从文件读取图片, 亦或者是处理其他图片, 或者随心所欲的绘制你所想到的图形。

要想以文件的方式读取图片, 使用来自 Image 模块的 open() 方法

  1. >>> from PIL import Image
  2. >>> im = Image.open("lena.ppm")
复制代码

如果操作成功, 这个方法返回一个 Image 对象. 之后你就可以使用这个对象的方法去查看图片的属性

  1. >>> from __future__ import print_function
  2. >>> print(im.format, im.size, im.mode)
  3. PPM (512, 512) RGB
复制代码

format 这个属性代表图片文件的扩展名, 如果图片文件打开失败, 则其值为 None. size 这个属性代表图片的大小, 以像素为单位, 使用包含两个元素的元组来返回. mode 这个属性代表图片的band属性, 一般情况(黑白)下为“L”, 当图片是彩色的时候是“RGB”, 如果图片经过压缩, 则是“CMYK”.

如果图片文件打开失败, 将会提示 IOError 错误.

一旦你实例化了 Image 类, 你就可以使用该类的方法去处理图像. 例如, 我们直接显示这个刚刚被加载的图像:

  1. >>> im.show()
复制代码


注解

从保存图片到缓存文件到调用 xv 命令去显示这个图片, show() 的效率很低. 另外, 如果你根本没有安装 xv 命令, 这个方法就无法使用. 即便可以使用, 在调试的时候也是犹如噩梦一般的存在.

接下来的几个小结将会向你们介绍这个库的几个不同的方法.


图片的读写操作

Python 的图像处理库支持绝大多数的图片格式. 直接使用来自 Image 模块的 open() 方法就能从硬盘读取图片文件. 不需要你来区分不同的图片格式, 这个库会自动匹配对应的解码器来打开图片文件.

直接使用来自 Image 模块的 save() 方法来保存图片文件. 当你保存图片文件的时候, 文件名显得尤为重要. 除非你指定扩展名, 默认情况下是自动沿袭本地存储格式的.

把图片的格式转换为 JPEG

  1. from __future__ import print_function
  2. import os, sys
  3. from PIL import Image

  4. for infile in sys.argv[1:]:
  5.     f, e = os.path.splitext(infile)
  6.     outfile = f + ".jpg"
  7.     if infile != outfile:
  8.         try:
  9.             Image.open(infile).save(outfile)
  10.         except IOError:
  11.             print("cannot convert", infile)
复制代码

第二个参数支持 save() 方法来指定图片的扩展名. 如果使用了非标准的扩展名, 则必须加上第二个参数.

生成 JPEG 缩略图

  1. from __future__ import print_function
  2. import os, sys
  3. from PIL import Image

  4. size = (128, 128)

  5. for infile in sys.argv[1:]:
  6.     outfile = os.path.splitext(infile)[0] + ".thumbnail"
  7.     if infile != outfile:
  8.         try:
  9.             im = Image.open(infile)
  10.             im.thumbnail(size)
  11.             im.save(outfile, "JPEG")
  12.         except IOError:
  13.             print("cannot create thumbnail for", infile)
复制代码

值得注意的是, 库默认情况下是不会解码光栅图片数据除非是必须的. 当你打开一个文件的时候, 文件的头部将被用来识别文件扩展名和大小等等属性, 但是剩下的数据不会马上被处理.

这也暗示了打开一个图片其实是一个很快的操作, 只关乎到文件大小和压缩方式. 以下是一个简单的识别图片文件的小脚本:

识别图片文件

  1. from __future__ import print_function
  2. import sys
  3. from PIL import Image

  4. for infile in sys.argv[1:]:
  5.     try:
  6.         with Image.open(infile) as im:
  7.             print(infile, im.format, "%dx%d" % im.size, im.mode)
  8.     except IOError:
  9.         pass
复制代码

裁剪, 粘贴 和 合成图片

Image 类包含了可以让你操作图片的方法. 当你想从图片截取一部分的时候, 直接用 crop() 方法.


下一节 -> Pillow库官方文档翻译-快速上手(二)


PS. 渣渣排版, 如果有兴趣持续关注的话点击这里来围观哦~

评分

参与人数 2荣誉 +10 鱼币 +10 贡献 +8 收起 理由
RIXO + 5 + 5 + 3 感谢楼主无私奉献!
康小泡 + 5 + 5 + 5 热爱鱼C^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-30 11:52:32 | 显示全部楼层
论坛的排版功能的确是渣渣级别 —— 分分钟逼死强迫症的节奏啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-1 14:41:39 | 显示全部楼层
  1. for infile in sys.argv[1:]:
  2.     f, e = os.path.splitext(infile)
复制代码

这段程序是系统原始图片文件吗?路径在哪里啊,找不到,只能手动用其他路径玩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-24 22:57:52 | 显示全部楼层
大头目 发表于 2018-6-1 14:41
这段程序是系统原始图片文件吗?路径在哪里啊,找不到,只能手动用其他路径玩

原文在此
http://pillow.readthedocs.io/en/5.2.x/handbook/tutorial.html#convert-files-to-jpeg

这里的意思是通过命令行传入一堆图片路径
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-15 16:57:20 | 显示全部楼层
想问关于滤镜操作的那一块,
class BLUR(BuiltinFilter):
    name = "Blur"
    filterargs = (5, 5), 16, 0, (
        1,  1,  1,  1,  1,
        1,  0,  0,  0,  1,
        1,  0,  0,  0,  1,
        1,  0,  0,  0,  1,
        1,  1,  1,  1,  1
        )
这个该怎么理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 13:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表