从PowerShell中的.png文件获取详细信息

时间:2012-03-04 04:40:37

标签: powershell png

如何从PowerShell中的特定.png文件中获取详细信息?
像尺寸,钻头深度和尺寸一样。

4 个答案:

答案 0 :(得分:10)

您可以从文件扩展属性中获取大部分此类信息,如下所示:

$path = 'D:\image.png'
$shell = New-Object -COMObject Shell.Application
$folder = Split-Path $path
$file = Split-Path $path -Leaf
$shellfolder = $shell.Namespace($folder)
$shellfile = $shellfolder.ParseName($file)

$width = 27
$height = 28
$Dimensions = 26
$size = 1

$shellfolder.GetDetailsOf($shellfile, $width)
$shellfolder.GetDetailsOf($shellfile, $height)
$shellfolder.GetDetailsOf($shellfile, $Dimensions)
$shellfolder.GetDetailsOf($shellfile, $size)

您还可以通过其他方式获取尺寸,例如(Get-Item D:\image.png).Length / 1KB

虽然在右键单击文件时可用,但位深度属性似乎没有在扩展属性中列出。

更新另一个选择是使用适当的.NET来避免使用COM:

add-type -AssemblyName System.Drawing
$png = New-Object System.Drawing.Bitmap 'D:\image.png'
$png.Height
$png.Width
$png.PhysicalDimension
$png.HorizontalResolution
$png.VerticalResolution

Update 2 PixelFormat属性为您提供位深度。

$png.PixelFormat

该属性是可能格式的枚举。您可以在此处查看完整列表:

http://msdn.microsoft.com/en-us/library/system.drawing.imaging.pixelformat.aspx

例如Format32bppArgb定义为

  

指定格式为每像素32位;每个使用8位   对于alpha,red,green和blue组件。

答案 1 :(得分:3)

脚本专家写了一篇关于根据Shell获取文件元数据的文章。应用程序https://blogs.technet.microsoft.com/heyscriptingguy/2008/08/14/hey-scripting-guy-how-can-i-find-files-metadata/

答案 2 :(得分:2)

  • 您可能想要使用包含get-image的PowershellPack Module

    PS D:\> import-module psimagetools
    PS D:\> get-item .\fig410.png | get-image
    FullName              : D:\fig410.png
    FormatID              : {B96B3CAF-0728-11D3-9D7B-0000F81EF32E}
    FileExtension         : png
    FileData              : System.__ComObject
    ARGBData              : System.__ComObject
    Height                : 450
    Width                 : 700
    HorizontalResolution  : 96,0119934082031
    VerticalResolution    : 96,0119934082031
    PixelDepth            : 32
    IsIndexedPixelFormat  : False
    IsAlphaPixelFormat    : True
    IsExtendedPixelFormat : False
    IsAnimated            : False
    FrameCount            : 1
    ActiveFrame           : 1
    Properties            : System.__ComObject
    
  • 或者您可以直接使用 Wia.ImageFile (这是get-image函数的工作方式):

    PS D:\> $image  = New-Object -ComObject Wia.ImageFile
    PS D:\> $image.loadfile("D:\fig410.png")
    PS D:\> $image
    
    FormatID              : {B96B3CAF-0728-11D3-9D7B-0000F81EF32E}
    FileExtension         : png
    FileData              : System.__ComObject
    ARGBData              : System.__ComObject
    Height                : 450
    Width                 : 700
    HorizontalResolution  : 96,0119934082031
    VerticalResolution    : 96,0119934082031
    PixelDepth            : 32
    IsIndexedPixelFormat  : False
    IsAlphaPixelFormat    : True
    IsExtendedPixelFormat : False
    IsAnimated            : False
    FrameCount            : 1
    ActiveFrame           : 1
    Properties            : System.__ComObject
    

答案 3 :(得分:1)

使用.net框架加载图像然后获取宽度的另一种方法:

Add-Type -AssemblyName System.Drawing
$image = [System.Drawing.Image]::FromFile('C:\image.png')
$image.Width