我想用 python 获取文件的平均亮度。阅读了上一个问题[ Problem getting terminal output from ImageMagick's compare.exe ( Either by pipe or Python )我想出了:
cmd='/usr/bin/convert {} -format "%[fx:100*image.mean]\n" info: > bright.txt'.format(full)
subprocess.call(cmd,shell=True)
with open('bright.txt', 'r') as myfile:
x=myfile.read().replace('\n', '')
return x
上一个问题建议使用“pythonmagick”,我可以找到它,但没有当前文档,最近的事件也很少。我无法弄清楚使用它的语法。
我知道我的代码不能令人满意,但它确实有效。 有没有更好的方法不需要 'shell=true' 或额外的文件处理?
最佳答案
这似乎对我有用,可以将平均值作为可以打印的变量返回。 (这有点错误。请参阅底部附近的更正)
#!/opt/local/bin/python3.6
import subprocess
cmd = '/usr/local/bin/convert lena.jpg -format "%[fx:100*mean]" info:'
mean=subprocess.call(cmd, shell=True)
print (mean)
结果是70.67860,返回到终端。
如果您解析命令的每个部分,这也适用于 shell=False。
#!/opt/local/bin/python3.6
import subprocess
cmd = ['/usr/local/bin/convert','lena.jpg','-format','%[fx:100*mean]','info:']
mean=subprocess.call(cmd, shell=False)
print (mean)
结果是70.67860,返回到终端。
下面来自 tripleee
的评论表明我上面的过程不正确,因为平均值显示在终端上,但实际上并未放入变量中。
他建议使用subprocess.check_output()
。以下是他的解决方案。 (谢谢你,三人组)
#!/opt/local/bin/python3.6
import subprocess
filename = 'lena.jpg'
mean=subprocess.check_output(
['/usr/local/bin/convert',
filename,
'-format',
'mean=%[fx:100*mean]',
'info:'], universal_newlines=True)
print (mean)
打印:mean=70.6786
关于python - 从 Python 中的 imagemagick 子进程读取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52372489/