Умный поиск изображения через Powershell

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

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

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

9
задан Oleg Svechkarenko 3 June 2010 в 09:29
поделиться

2 ответа

На самом деле это довольно легко сделать, и ваше внутреннее представление о 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)
        }
}
12
ответ дан 4 December 2019 в 13:45
поделиться

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

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 }

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

3
ответ дан 4 December 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: