如何将电子墨水屏项目用的ImageMagick命令转换为Wand代码?
问题解决方案
修正后可直接运行的代码
from wand.image import Image canvas_width = 1404 canvas_height = 1872 with Image(filename='image.jpg') as img: # 执行顺序和原convert命令保持一致才能输出相同效果 img.background_color = 'black' img.gravity = 'center' # 直接调用extent无需手动计算偏移,gravity属性会自动生效 img.extent(width=canvas_width, height=canvas_height) img.type = 'grayscale' # 阈值要加%单位,对应原命令的3000%设置 img.white_threshold = '3000%' # 原命令的+dither是关闭抖动,对应dither=False img.quantize(number_colors=16, dither=False) img.depth = 4 # 指定保存为BMP3格式,对应原命令的BMP3:前缀 img.save(filename='BMP3:test.bmp')
两个问题的具体说明
- 输出效果对齐原ImageMagick命令的修正点
- 原代码中
quantize的dither参数设为了True,但原命令中的+dither是关闭抖动效果,需要改为dither=False - 白阈值参数原命令是带百分比单位的
3000%,直接传数字3000会被识别为绝对值量子值,需要传入字符串'3000%'才对应原命令效果 - 保存文件时需要加
BMP3:前缀指定格式,否则默认输出的是新版BMP格式,和原命令输出的BMP3格式不一致 - 参数执行顺序需要和原convert命令保持一致:先调整画布尺寸,再做灰度转换、阈值处理、色彩量化,顺序不同会导致最终渲染效果有差异
- gravity居中无需手动计算偏移的实现方式
- 调用
extent方法前先设置img.gravity = 'center'和背景色属性,直接调用extent传入宽高即可,不需要手动计算top、left偏移值,Wand会自动按照gravity设置将原图像居中放置在新画布上 - 原手动计算偏移时还把宽高对应的偏移方向搞反了:top是垂直方向偏移对应画布高度,left是水平方向偏移对应画布宽度,即使手动计算也会出现偏移错误的问题
内容的提问来源于stack exchange,提问作者Stefhan
相关产品推荐
相关产品推荐

