栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

确定Python(PIL)中的JPG质量

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

确定Python(PIL)中的JPG质量

在PIL(以及大多数使用libjpeg的所有软件/库)中,质量设置用于构建量化表(参考)。在libjpeg中,质量编号“缩放”样本表值(来自JPEG规范K.1节)。在其他类别中,有不同的表分配给不同的质量(例如:Photoshop,数码相机)。

因此,换句话说,质量等于量化表,因此它比数字更复杂。

如果要以相同的“质量”保存修改图像,则只需使用相同的量化表。幸运的是,量化表被嵌入到每个JPEG中。不幸的是,在保存为PIL时无法指定量化表。

cjpeg
,libjpeg附带的命令行实用程序可以做到这一点。

这是一些用指定的量化表保存jpeg的粗略代码:

from subprocess import Popen, PIPEfrom PIL import Image, ImageFilterproc = Popen('%s -sample 1x1 -optimize -progressive -qtables %s -outfile %s' % ('path/to/cjpeg', '/path/ta/qtable', 'out.jpg'), shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)P = '6'if im.mode == 'L':    P = '5'stdout, stderr = proc.communicate('P%sn%s %sn255n%s' % (P, im.size[0], im.size[1], im.tostring()))

您将需要找到从原始jpeg提取量化表的方法。

djpeg
可以做到这一点(libjpeg的一部分):

djpeg -verbose -verbose image.jpg > /dev/null

您还需要查找并设置采样。有关更多信息,请点击此处。你也可以看看

test_subsampling

更新

我做了一个PIL分支,以添加在保存JPEG时指定子采样表或量化表或同时指定两者的可能性。您还可以指定

quality='keep'
保存的时间,并且将使用与原始图像相同的量化表和二次采样来保存图像(原始图像必须为JPEG)。保存时还有一些预设(基于Photoshop)可以传递给质量。我的叉子

更新2

我的代码现在是Pillow 2.0的一部分。所以做:

pip install Pillow


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/610697.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号