鱼C论坛

 找回密码
 立即注册
查看: 3155|回复: 0

[技术交流] Pillow库官方文档翻译-谈谈格式(一)

[复制链接]
发表于 2016-6-25 20:05:10 | 显示全部楼层 |阅读模式

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

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

x
本系列一共两篇, 本篇为其一, 主要讲的是 pillow 库所支持的格式, 以及这些如何更优雅的使用 pillow 库来料理这些格式~

下面开始译文

图片文件格式

Python Imaging Library 支持绝大多数的图片格式. 囊括了 30 多种. 虽然对写的支持稍微少了一些, 但是大部分的交换格式都是支持的.

open() 方法使用文件内容来区分不同的文件, 除非你指定格式, 否则 save() 方法使用文件名来识别所需格式.


完全支持的格式

BMP

PIL 在 Windows 和 OS/2 平台上读取 BMP 文件的 1, L, P, 或 RGB 数据. 而 16 色图片则读取 P 数据, 而不支持游程编码.

open() 方法用于设置 info 的属性:

压缩

如果文件使用游程编码, 请设置 bmp_rle .


EPS

PIL 使用图片内容来区分 EPS 文件, 另外还可以读取嵌入的图片. 如果 Ghostscript 可用, 其他的 EPS 文件将会被正常读取. EPS 驱动也可以用于写入 EPS 图像.

如果 Ghostscript 可用, 你可以调用 load() 方法 来渲染 EPS 文件.

计算

影响栅格图像的计算结果. 如果 EPS 建议以 100px x 100px 来渲染的话, 传入两个参数将会以 200px x 200px 来渲染之. 而图片的相对位置保持不变:

  1. im = Image.open(...)
  2. im.size #(100,100)
  3. im.load(scale=2)
  4. im.size #(200,200)
复制代码


GIF

PIL会读取 GIF87a 和 GIF89a 标准的 GIF 文件. 默认使用 GIF87a 标准的游程编码, 除非用到了 GIF89a 的特性.

值得注意的是, GIF 文件总是以 grayscale (L) 或者 palette (P) 模式读取.

open() 方法设置了 info 的这几个属性:

  1. background
  2. 默认背景色 (调色板颜色).
  3. duration
  4. 两个帧之间的时间间隔 (毫秒计).
  5. transparency
  6. 透明度. 当图像不是透明的时候, 这个属性会被忽略.
  7. version
  8. 标准 (GIF87a 或 GIF89a).
  9. duration
  10. 用于显示 GIF 图像的每一帧, 以毫秒计.(可能被忽略)
  11. loop
  12. GIF 文件的循环次数(可能被忽略).
复制代码

读取序列

GIF 加载器支持 seek() 和 tell() 方法. 你可以转到下一帧 (im.seek(im.tell() + 1)), 或者回溯到首帧. 而不支持随机访问.

当你尝试在最后一帧继续使用 im.seek() 转到下一帧的时候, 将会抛出 EOFError 异常.

保存序列

当你调用:py:meth:~PIL.Image.Image.save, 如果使用了一个多帧的图像, 默认只保存首帧. 要想保存所有帧, save_all 参数必须设置为 True.

在允许条件下, loop 参数可以设置 GIF 图像的循环次数, duration 参数则设置了每一帧之间的时间间隔.

从本地读取图像文件

GIF 加载器会分配和GIF文件大小相同的内存空间, 并且加载这些数据进内存. 若你仅仅需要实际的像素, 你可以修改 size 和 tile 属性之后再加载图像文件:

  1. im = Image.open(...)

  2. if im.tile[0][0] == "gif":
  3.     # only read the first "local image" from this GIF file
  4.     tag, (x0, y0, x1, y1), offset, extra = im.tile[0]
  5.     im.size = (x1 - x0, y1 - y0)
  6.     im.tile = [(tag, (0, 0) + im.size, offset, extra)]
复制代码


ICNS

PIL 仅能在 OS X 下读写 .icns 文件. 默认情况下, 尽最大可能读取, 不过你也可以修改 size 属性之后再读取. open() 方法设置了 info 的如下属性:sizes支持的尺寸列表; 由 3 元素的元组组成, (width, height, scale), 其中, scale 表示了 2 个 retina 尺寸和 1 个标准尺寸. 你可以设置 size 属性之后再调用 load() 方法; 在加载完毕之后, 尺寸会重置为一个 2 个元组组成的像素数据. 比如你传入 (512, 512, 2), 返回的将会是 (1024, 1024)).


IM

IM 被用于 LabEye 和其他的一些基于 IFUNC 图像处理库的应用. 可以读写大多数未经压缩的图像格式.

IM 是唯一的一个可以存储 PIL 内部格式的格式(好绕口~~~).


JPEG

PIL 能读取 JPEG, JFIF, 和包含了 L, RGB, 或 CMYK 的 Adobe JPEG 数据. 他能写入标准和激进的 JFIF 文件.

使用 draft() 方法, 可以加速转换 RGB 到 L, 并且可以在加载的时候放缩到原来尺寸的 1/2, 1/4 或者 1/8.

open() 方法用于设置 info 属性的以下内容:


  1. jfif
  2. JFIF 应用标记, 如果不是一个 JFIF 文件, 则忽略.
  3. jfif_version
  4. 表示 JFIF 版本的元组, (主版本, 副版本).
  5. jfif_density
  6. 表示图像的密度的元组, 以 jfif_unit 的方式表示.
  7. jfif_unit
  8. jfif_density 的单位:

  9. 0 - 没有单位
  10. 1 - 像素每英尺
  11. 2 - 像素每厘米
  12. dpi
  13. 表示 dpi 的元组, 如果是 JFIF 文件则单位是英尺.
  14. adobe
  15. Adobe 文件标记. 如果不是一个 Adobe 文件, 则忽略.
  16. adobe_transform
  17. 厂商定义标签.
  18. progression
  19. 标志着这是一个激进类型的 JPEG 文件.
  20. icc_profile
  21. 图像的 ICC 颜色属性.
  22. exif
  23. 图像的原始 EXIF 数据.
复制代码

save() 方法支持以下参数:

  1. quality
  2. 图像的质量, 从1(最差)到95(最好). 默认是75. 应该避免赋95以上的值; 100禁用了 JPEG 部分压缩算法, 将会导致大文件图像质量降低.
  3. optimize
  4. 如果提供了这个参数, 表示了编码器应该加载额外的编码器来进行相应操作.
  5. progressive
  6. 如果提供了这个参数, 表示这个图像将会以激进模式存储.
  7. dpi
  8. 表示 DPI 的元组, (x,y).
  9. icc_profile
  10. 如果提供了这个参数, 图像将会以提供的 ICC profile 存储. 如果这个参数没有定义, 则图像不会包含任何 profile, 看这个例子:

  11. im.save(filename, 'jpeg', icc_profile=im.info.get('icc_profile'))
  12. exif
  13. 如果提供了这个参数, 图像将会以提供的 EXIF 信息存储.
  14. subsampling
  15. 如果提供了这个参数, 将会为解码器设置子采样.

  16. keep: 只针对 JPEG 文件, 将会保持原文件属性.
  17. 4:4:4, 4:2:2, 4:1:1: 指定的数据
  18. -1: 等同于 keep
  19. 0: 等同于 4:4:4
  20. 1: 等同于 4:2:2
  21. 2: 等同于 4:1:1
  22. qtables
  23. 如果提供了这个参数, 将会设置编码器为 qtables. 这是罗列在 JPEG 文档中的高级选项. 请谨慎使用. qtables 可以设置如下几个值:

  24. 预设的字符串名称, 例如 keep, web_low, 或 web_high
  25. 一个列表, 元组或者字典.
复制代码

2.5.0 新版功能.

注解:要想添加 JPEG 支持, 你需要编译安装 IJG JPEG 库之后才能编译 PIL. 详见 distribution README.

JPEG 2000

2.4.0 新版功能.

PIL 可以读写包含了 L, LA, RGB 或 RGBA 数据的 JPEG 2000 文件. 同时也可以读取 YCbCr 数据, 并且会因为是否有 alpha 频段转换 RGB 或 RGBA. PIL 支持原生 JPEG 2000 (.j2k files), 也就是 (.j2p or .jpx 文件). PIL 不能 支持包含不同样本频段的文件.

在加载的时候, 如果设置了 load() 方法的 mode 属性, 你可以干预 PIL 选择转换成 RGB 或者 RGBA. 同时也可以设置 reduce 属性 来忽略一些东西, layers 属性指定了加载的质量.

save() 方法支持以下选项:

  1. offset
  2. 图像的起始位置, 以元组表示, 例如 (16, 16)
  3. tile_offset
  4. 材质起始位置, 以2个元素的元组表示.
  5. tile_size
  6. 材质大小以2元素元组表示. 如果没有指定, 亦或者设置为 None, 则不包含材质来保存图片.
  7. quality_mode
  8. “rates” 和 “dB” 都取决于你定义的图像的质量.
  9. quality_layers
  10. 一个数字序列, 其值为噪点的近似值. 如果未指定, 默认为原始的质量.
  11. num_resolutions
  12. 图像存储的分辨率的数量.
  13. codeblock_size
  14. 这是一个2元组, 最小大小为 4 x 4, 最大为 1024 x 1024, 如果不是代码块则有 4096 种参数.
  15. precinct_size
  16. 区域大小是一个2元素元组, 必须沿着两个坐标轴, 并且是代码块大小.
  17. irreversible
  18. 如果值为 True, 使用遵循 DWT 9-7 的有损图像转换. 默认值为 False, 代表了 DWT 5-3 标准的可逆图像转换.
  19. progression
  20. 控制主次顺序; 只能为 "LRCP", "RLCP", "RPCL", "PCRL", "CPRL". 这些字母分别代表了组件, 位置, 分辨率, 和分层控制顺序, 举个例子吧. 一个以 LRCP 模式做解码的图像能在质量层做解码, 而 RLCP 模式则可以使用增加分辨率解码器, 等等.
  21. cinema_mode
  22. 设置编码器为数字影院格式. 默认为否, "cinema2k-24" 是 24fps 2K, "cinema2k-48" 是 48fps 2K, "cinema4k-24" 是 24fps 4K. 值得注意的是, 要想兼容 2K 文件, 至少 需要符合 2048 x 1080, 要想兼容 4K 文件, 至少 需要符合 4096 x 2160.
复制代码

注解

要想启用 JPEG 2000 支持, 你需要在编译 PIL 之前编译安装2.0.0或更高版本的 OpenJPEG 库.

Windows 用户可以在 OpenJPEG 网站上下载到二进制安装包进行安装, 但是必须添加到环境变量才行.


MSP

PIL 在Windows1 和2定义了 MSP 文件. 会写入未经压缩的版本.


PCX

PIL 可以读写包含了 1, L, P, 或 RGB 数据的 PCX 文件.

(待续....)

评分

参与人数 1荣誉 +10 鱼币 +10 贡献 +10 收起 理由
冬雪雪冬 + 10 + 10 + 10 感谢楼主无私奉献!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 06:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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