昨天搞定了 CMYK 图片模式的问题,参考前文 CMYK 印刷展板图片批量生成,Python 程序踩坑记。发现生成的图片文件过大,跟示例图片差了快 3 倍,完全无法接受。 而且图片的 DPI 分辨率也不对,导致打印出来的展板宽高与预期不符。所以将 Python 生成图片的代码又调整了一下参数。
优化后的代码
save_kwargs = {
"format": "JPEG",
"quality": 80,
"optimize": True,
"dpi": (150, 150)
}
if icc_profile:
save_kwargs["icc_profile"] = icc_profile
output_img.save(output_path, **save_kwargs)
图片压缩
默认质量 100 生成的图片大小很大, 33M 大小。而从设计那边拿到的示例 JPG 图片只有 13M 大小。 而且肉眼看不出差异。所以,我想能不能设置一个压缩参数来减少图片的大小。
- quality: The image quality, on a scale from 1 (worst) to 95 (best). The default is 75. Values above 95 should be avoided; 100 disables portions of the JPEG compression algorithm, and results in large files with hardly any gain in image quality. 我之前设置了 100 相当于禁用了 JPG 的压缩算法。。。
- optimize: If present, indicates that the encoder should make an extra pass over the image in order to select optimal encoder settings.
设置之后,生成的图片大小变成了 12M。
分辨率
由于生成的图片需要送去打印店打印,所以除了宽高的像素数需要按照需求来,同时分辨率也需要一致,才能保证打印出来的展板实际宽度和高度跟预期一致。
从 PhotoShop 中查看图片参数,可以看到:
分辨率是 150,单位为 DPI(每英寸点数,即像素/英寸)。DPI 的英文全称是 Dots Per Inch。DPI 越高,图片越清晰。
而我用 Python 生成的图片默认分辨率是 70 DPI。会导致实际打印出来的展板宽高与需求不符。
解决方法就是在 Save 时,指定 dpi 参数:
"dpi": (150, 150)
为何是两个参数呢?分别表示图片的 水平 DPI(X 方向) 和 垂直 DPI(Y 方向)。
A tuple of two numbers corresponding to the desired dpi in each direction.
设置之后实际宽高就没问题了。之前从没搞过印刷体的图片,以为跟网上图片一样设置好像素宽度就可以了。 没用的知识又增加了 😮💨。
警告信息
.local/lib/python3.8/site-packages/PIL/Image.py:3176: DecompressionBombWarning: Image size (113886180 pixels) exceeds limit of 89478485 pixels, could be decompression bomb DOS attack.
warnings.warn(
- 在处理大图像时,可能会遇到 PIL 库的 DecompressionBombWarning 警告。这是因为图像尺寸超过了库的安全限制。
- 如果确定图像来源可靠,可以通过调整库的配置来忽略此警告
关于作者 🌱
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式