imagemagick中STDIN / STDOUT的正确语法

时间:2016-09-20 19:10:52

标签: powershell syntax imagemagick stdout stdin

我下载了ImageMagick,因此我可以批量处理工作中的图像文件夹,将它们裁剪为大小,然后将它们切成12个相等的部分。我可以单独完成每项任务,但我宁愿使用STDIN和STDOUT在一行中执行它。然而,即使在这里查看答案和网站上的文档之后,我也没有更接近它的工作。

我在Windows Powershell工作。这是我尝试过的,使用单个图像:

convert -crop '5072x3552+87+0' image.jpg jpg:- | convert -crop '1268x1184' - jpg: - | convert -crop '1268x1030+0+0' - C:\folder1\folder2\folder3\square.jpg

这给了我一系列错误:

  

convert.exe:此图像格式没有解码委托`'@   误差/ constitute.c / ReadImage / 508。

     

convert.exe:没有图像定义`jpg: - '@   误差/ convert.c / ConvertImageCommand / 3253。

     

convert.exe:此图像格式没有解码委托`'@   误差/ constitute.c / ReadImage / 508。

     

convert.exe:未定义图像   `C:\ users \ lmcane \ desktop \ imagem \ test \ leaf.jpg'@   误差/ convert.c / ConvertImageCommand / 3253

我在Windows 7上使用ImageMagick 7.0.2。Windows PowerShell以管理员身份打开。

欢迎在imagemagick中格式化STDIN和STDOUT的其他指南。

任何帮助表示感谢。

image for reference

process for single original image

2 个答案:

答案 0 :(得分:0)

我无法解释为什么convert会抛出这些错误,但我能够通过使用xwd作为传输格式来实现它:

convert -crop '5072x3552+87+0' image.jpg xwd:- |
    convert -crop '1268x1184' xwd:- xwd:- |
    convert -crop '1268x1030+0+0' xwd:- C:\folder1\folder2\folder3\square.jpg

答案 1 :(得分:0)

我会尝试使用-fuzz进行边缘的第一次修剪(以允许边框颜色的微小差异)和-trim。这可以解决这个问题:

convert grid.png -fuzz 30% -trim trimmed.png

然后,我将平铺到4x3并重新拍摄图像,以便忘记原始图像中的位置:

convert trimmed.png -crop 4x3@ +repage step2.png

现在从顶部,底部和侧面裁剪并保存个别12帧:

convert step2.png -crop 130x100+20+20 f-%02d.png

现在你可以使用稍微不同的模糊来修剪多余的部分,因为此处的变化似乎比原始图像的外边缘更少。而且,我还将所有命令放在一起,一次完成所有12个图像的所有步骤:

convert grid.png -fuzz 30% -trim -crop 4x3@ +repage -crop 130x100+20+20 -fuzz 5% -trim f-%02d.png

您可能需要使用其他图像的模糊因子,但您应该看看它现在是如何工作的。