通过Powershell进行智能图像搜索

Ole*_*nko 9 powershell image file-search

我对通过自定义属性进行文件搜索感兴趣.例如,我想找到具有特定尺寸的所有JPEG图像.看起来像

Get-ChildItem -Path C:\ -Filter *.jpg -Recursive | where-object { $_.Dimension -eq '1024x768' }
Run Code Online (Sandbox Code Playgroud)

我怀疑它是关于使用System.Drawing的.怎么做?提前致谢

Joe*_*oey 12

这实际上很容易做到,你对System.Drawing的直觉实际上是正确的:

Add-Type -Assembly System.Drawing

$input | ForEach-Object { [Drawing.Image]::FromFile($_) }
Run Code Online (Sandbox Code Playgroud)

将其保存Get-Image.ps1在路径中的某个位置,然后就可以使用它了.

另一种选择是将以下内容添加到您的$profile:

Add-Type -Assembly System.Drawing

function Get-Image {
    $input | ForEach-Object { [Drawing.Image]::FromFile($_) }
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理基本相同.当然,在你认为合适的时候添加像文档这样的花哨的东西.

然后您可以像这样使用它:

gci -inc *.jpg -rec | Get-Image | ? { $_.Width -eq 1024 -and $_.Height -eq 768 }
Run Code Online (Sandbox Code Playgroud)

请注意,在使用它们之后,应该以这种方式处置创建的对象.

当然,您可以添加自定义Dimension属性,以便可以对其进行过滤:

function Get-Image {
    $input |
        ForEach-Object { [Drawing.Image]::FromFile($_) } |
        ForEach-Object {
            $_ | Add-Member -PassThru NoteProperty Dimension ('{0}x{1}' -f $_.Width,$_.Height)
        }
}
Run Code Online (Sandbox Code Playgroud)