как определить ориентацию изображения JPG - PullRequest
0 голосов
/ 20 сентября 2019

Необходимо получить высоту и ширину файлов изображений в сценарии оболочки.

У меня есть скрипт, который возвращает правильный размер изображения, однако высота и ширина не всегда соответствуют правильной ориентации (книжная или альбомная).Есть ли атрибут, который я могу проверить, чтобы определить, использовать ли hx W или W x H?

$imgloc = 'c:\pics'
$folder = 'pics'
Set-Location -Path $imgloc

$files = Get-ChildItem -Path $imgloc
$icnt = 0
foreach ($file in $files) {
    if ($file.Extension -ne ".jpg") { continue }
    $icnt++
   $hfile = (get-item $file)
    $img = [System.Drawing.Image]::Fromfile($hfile);
    $ih= $img.Size.Height
    $iw= $img.Size.width
    $imgsize = "$iw"+"x"+"$ih"

    $imgsize
}

1 Ответ

0 голосов
/ 20 сентября 2019

Вы можете использовать что-то вроде ниже, чтобы получить все свойства, которые вам нужны из файла jpg, и воздействовать на возвращаемое значение Orientation

$imgloc = 'D:\'           #'# dummy comment to restore syntax highlighting in SO

# the various System.Photo.Orientation values
# See: https://docs.microsoft.com/en-us/windows/win32/properties/props-system-photo-orientation
#      https://docs.microsoft.com/en-gb/windows/win32/gdiplus/-gdiplus-constant-property-item-descriptions#propertytagorientation
$orientation = 'Unknown', 'Normal', 'FlipHorizontal', 'Rotate180', 'FlipVertical', 'Transpose', 'Rotate270', 'Transverse', 'Rotate90'

Get-ChildItem -Path $imgloc -Filter '*.jpg' | ForEach-Object {
    $img = [System.Drawing.Image]::Fromfile($_.FullName)
    # return the properties
    $value = $img.GetPropertyItem(274).Value[0]
    [PsCustomObject]@{
        'Path'        = $_.FullName
        'Width'       = $img.Size.width
        'Height'      = $img.Size.Height
        'Orientation' = $orientation[$value]
    }
}

Это вернется как пример

Path         Width Height Orientation
----         ----- ------ -----------
D:\test.jpg   2592   1456 Normal     
D:\test2.jpg  2336   4160 Normal     
D:\test3.jpg  2560   1920 Rotate270

, а если Orientation равно Rotate270 или Rotate90, вы можете поменять значения ширины и высоты.

Редактировать

Как прокомментировал JosefZ , значения ориентации также объявляются в классе перечисления [System.Drawing.RotateFlipType] следующим образом:

Name               Value
----               -----
Rotate180FlipXY        0
RotateNoneFlipNone     0
Rotate90FlipNone       1
Rotate270FlipXY        1
Rotate180FlipNone      2
RotateNoneFlipXY       2
Rotate270FlipNone      3
Rotate90FlipXY         3
RotateNoneFlipX        4
Rotate180FlipY         4
Rotate90FlipX          5
Rotate270FlipY         5
Rotate180FlipX         6
RotateNoneFlipY        6
Rotate270FlipX         7
Rotate90FlipY          7

со значениями в диапазоне от 0 до 7, и ни одно из них не отличаетсятогда как значения, которые вы получаете, используя $img.GetPropertyItem(274).Value[0], варьируются от 1 до 8 и совпадают со значениями для System.Photo.Orientation

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