Интеллектуальный поиск изображений с помощью Powershell - PullRequest
9 голосов
/ 02 июня 2010

Меня интересует поиск файлов по пользовательским свойствам. Например, я хочу найти все JPEG-изображения с определенными размерами. Что-то похоже на

Get-ChildItem -Path C:\ -Filter *.jpg -Recursive | where-object { $_.Dimension -eq '1024x768' }

Я подозреваю, что речь идет об использовании System.Drawing. Как это можно сделать? Заранее спасибо

Ответы [ 2 ]

12 голосов
/ 02 июня 2010

Это на самом деле довольно легко сделать, и ваше внутреннее представление о System.Drawing было на самом деле правильным:

Add-Type -Assembly System.Drawing

$input | ForEach-Object { [Drawing.Image]::FromFile($_) }

Сохраните это как Get-Image.ps1 где-нибудь на вашем пути, и тогда вы сможете его использовать.

Другой вариант - добавить к вашему $profile следующее:

Add-Type -Assembly System.Drawing

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

, который работает почти так же. Конечно, добавьте такие причудливые вещи, как документация или что-то в этом роде.

Затем вы можете использовать это так:

gci -inc *.jpg -rec | Get-Image | ? { $_.Width -eq 1024 -and $_.Height -eq 768 }

Обратите внимание, что вы должны располагать объекты, созданные таким образом после их использования.

Конечно, вы можете добавить собственное свойство Dimension, чтобы вы могли фильтровать по нему:

function Get-Image {
    $input |
        ForEach-Object { [Drawing.Image]::FromFile($_) } |
        ForEach-Object {
            $_ | Add-Member -PassThru NoteProperty Dimension ('{0}x{1}' -f $_.Width,$_.Height)
        }
}
3 голосов
/ 02 июня 2010

Вот альтернативная реализация в виде (почти) однострочного:

Add-Type -Assembly System.Drawing

Get-ChildItem -Path C:\ -Filter *.jpg -Recursive | ForEach-Object { [System.Drawing.Image]::FromFile($_.FullName) } | Where-Object { $_.Width -eq 1024 -and $_.Height -eq 768 }

Если вам потребуется выполнить эту команду более одного раза, я бы порекомендовал более полное решение Йоханнеса .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...