我正在尝试编写一个oneliner,它在目录中获取tif文件的唯一ID,然后运行ImageMajick的convert将它们组合成多个tifs:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
这样可行,但我正在尝试将其自动化为一堆具有多个tif的ID。现在,我只使用一个id并使用“echo”而不是convert:
convert ..\image_data\ua-nws_00000991_001.tif ..\image_data\ua-nws_00000991_002.tif ..\image_data\ua-nws_00000991_003.tif ..\image_data\ua-nws_00000991_004.tif ua-nws_00000991_all.tif
但我无法将文件列表转换为参数列表。我得到以下内容(我手动制作了相对于在线发布的路径):
echo "ua-nws_00000991" | % { $id=$_; ls ../image_data | ? { $_.FullName -match $id } | % {
echo $_.FullName } | Join-String -Separator '" "' | % { echo '"'$_'"' $id"_all.tif" }
}
在我添加双引号之前,convert将所有最终"
.\image_data\ua-nws_00000991_001.tif" ".\image_data\ua-nws_00000991_002.tif" ".\image_data\ua-nws_00000991_003.tif" "C:\Daniels_Stuff\Classes\Current\grad_ai\project\repo\article-reconstruction\image_data\ua-nws_00000991_004.tif"
ua-nws_00000991_all.tif
解释为一个参数。我正在添加引号以强制转换为将它们视为多个参数。但我似乎无法摆脱那个换行符。我认为它可能是由最终的$_
引起的,但如果我用convert替换它,我会得到以下结果:
echo
答案 0 :(得分:1)
虽然我不理解Powershell疯狂的语法,但 ImageMagick 有两个方面可以帮助你...
方面1 - stdin上的文件名
首先,您可以将文件名列表合并到 ImageMagick &#39> stdin 中的单个TIF中,而不是作为参数。所以,如果你有一本书的3页,在3个名为p1.tif
,p2.tif
和p3.tif
的文件中,而不是:
convert p*.tif book.tif
你也可以
dir /b/s p*tif | convert @- book.tif
虽然我使用DIR /B/S
生成上面的名称,但我希望您能用Powershell命令替换它。
方面2 - 单个管道下的多个图像
其次,您可以使用&#34; Magick图像文件格式&#34; 将多个convert
调用中的多个图像传输到convert
的最后调用中( MIFF
)流媒体:
以下是一个示例,其中convert
的两次调用都将每个图像发送到最终convert
,该最终( convert p1.tif MIFF:- & convert p2.tif MIFF:- ) | convert MIFF:- book.tif
加入来自其MIFF输入流的图像:
FOR files *.TIF; DO
IF this file has the correct id
convert $this MIFF:-
ENDIF
ENDDO | convert MIFF:- book.tif
以下是同一事物的略微不同的例子:
from
答案 1 :(得分:-1)
您可以尝试以下方法:
get-childitem "image_data" -recurse -filter ua-nws_00000991*.tif | % { convert $_.Fullname }
返回&#34; image_data&#34;中的所有tif文件目录并为每个找到的tif文件调用convert
。
希望有所帮助