如何在 PowerShell 中使用 ImageMagick

howto use imagemagick in powershell

我正在尝试将 bat 文件转换为 powershell 脚本。 但是我无法解决imagemagick命令来判断照片是否为黑白。

你能帮帮我吗? w.

蝙蝠文件:

for %%f in (*.jpg) do (
%%f
for /f %%i in ('magick "%%f" -colorspace HSL -channel g -separate +channel -format "%%[fx:mean]" info:') do set VAR=%%i
if !VAR! LEQ 0.05 copy "%%f" .\bw)

powershell:

param ([string]$Path = "\nas\photo\")

Add-Type -assembly "system.io.compression.filesystem"

$PathArray = @()
$magickExePath = "C:\Program Files\ImageMagick-7.1.0-Q16-HDRI\magick.exe"


Get-ChildItem $Path  -directory -exclude "#recycle"  -re | 



      ForEach-Object { 
            #$_.FullName
            #$_.Name
         If (($_.Name -match "landschap"))
         {      
                $source = $_.FullName 
                $_.FullName
                $_.name
                $MagickArguments = "$_.name -colorspace HSL -channel g -separate +channel -format "$_.name[fx:mean]" info:' "
                $ColorLevel = $magickExePath $MagickArguments

         }    
         }

我希望 $colorlevel 是一个介于 0 和 1 之间的数字。

  • 如果您希望 PowerShell 执行其路径存储在 变量(或 引用)中的可执行文件, 你必须使用 &, call operator.

  • 要将参数存储在变量中,请创建一个 数组,其中的每个元素代表一个要传递的单独参数。

$MagickArguments = @(
  $_.Name
  '-colorspace'
  'HSL'
  '-channel'
  'g'
  '-separate'
  '+channel'
  '-format'
  '%[fx:mean]'
  'info'  
)

[double] $ColorLevel = & $magickExePath $MagickArguments

直接传递参数会更简单:

[double] $ColorLevel = & $magickExePath $_.Name -colorspace HSL -channel g -separate +channel -format %[fx:mean] info: