[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创代码] PowerShell图片EXIF信息提取

拍摄的照片才有EXIF信息 ,可能支持:[.jpg] 、[.jpeg] 、[.gif]、[.png]、[.bmp]自己试
  1. Add-Type -AssemblyName System.Drawing
  2. function Get-ExifData {
  3.     param([string]$ImagePath)
  4.     try {
  5.         $bitmap = [System.Drawing.Bitmap]::FromFile($ImagePath)
  6.         $exifData = [ordered]@{}
  7.         
  8.         # EXIF属性ID与名称映射表(部分常见属性)
  9.         $exifTagMap = @{
  10.             0x010F = "生产厂商"               # 相机制造商
  11.             0x0110 = "设备型号"               # 相机型号
  12.             0x0131 = "固件版本"               # 固件/软件版本
  13.     0x0213 = "色相配置"
  14.             0x0112 = "图像方向"               # 旋转方向(1-8)
  15.     0x0132 = "最后修改时间"            # 文件修改时间
  16.     0x8769 = "EXIF信息块"             # EXIF主信息区偏移量
  17.     0x829A = "曝光时间"              # 快门速度(秒)
  18.     0x829D = "光圈系数"               # F值
  19.     0x8827 = "感光度"                # ISO值
  20.     0x9003 = "拍摄时间"               # 原始拍摄时间
  21.     0x9004 = "数字化时间"             # 文件创建时间
  22.    
  23.     0x9201 = "快门速度值"             # APEX单位值
  24.     0x9202 = "光圈值"                # APEX计算值
  25.     0x9204 = "曝光补偿"               # EV偏移值
  26.     0x9207 = "测光模式"               # 平均/中央/点测光
  27.     0x9208 = "白平衡"                # 光源类型
  28.     0x9209 = "闪光灯状态"             # 是否启用闪光
  29.     0x920A = "物理焦距"              # 镜头实际焦距(mm)
  30.     0x9290 = "原始日期时间数字化(秒)"            # 秒以下时间戳
  31.     0x9291 = "原始日期时间(秒)"
  32.     0x9292 = "日期时间(秒)"  
  33.     0xA002 = "像素宽度"              # 图像横向像素数
  34.     0xA003 = "像素高度"              # 图像纵向像素数
  35. 0x8889= "未定义"
  36.   0x0000 = "GPS版本信息"        
  37.   0x0001 = "纬度参考(N/S)"      
  38.   0x0002 = "GPSLatitude"            
  39.   0x0003 = "经度参考(E/W)"      
  40.   0x0004 = "GPSLongitude"            
  41.   0x0005 = "海拔参考"         
  42.   0x0006 = "海拔值"      
  43.     0x011A = "水平分辨率"            # X轴dpi
  44.     0x011B = "垂直分辨率"            # Y轴dpi
  45.     0x0128 = "分辨率单位"             # 2=英寸,3=厘米
  46.     0x8822 = "曝光模式"              # 自动/手动/光圈优先
  47.     0x9000 = "处理模式"               # 自定义渲染标识
  48.     0x9101 = "像素排列"              # RGB/YUV排列方式
  49.     0xA000 = "FlashPix版本"          # FlashPix兼容版本
  50.     0x5041 = "互操作标识"             # DCF兼容标识
  51.     0x9205 = "最大光圈"              # 镜头最大F值
  52.     0x927C = "厂商注释"              # 二进制制造商数据
  53.     0xA404 = "数字变焦"              # 数字变焦倍数
  54.     0xA401 = "传感器类型"             # 直接拍摄/扫描
  55.     0x001D = "拍摄时间"
  56.      
  57.   0x0011 = "GPS处理方式"
  58. 0x9C9B = "小米扩展信息"       # 小米相机专用标签
  59.   0xA001 = "色彩空间"           # sRGB/Adobe RGB
  60.   0xA217 = "拍摄场景"           # 标准/风景/夜景等
  61.   0x9400 = "环境温度(℃)"      
  62.   0x9401 = "环境湿度(%)"  
  63. }
  64.         foreach ($prop in $bitmap.PropertyItems) {
  65.             $propName = if ($exifTagMap.ContainsKey($prop.Id)) {
  66.                 $exifTagMap[$prop.Id]
  67.             } else {
  68.                 "Unknown_0x{0:X4}" -f $prop.Id
  69.             }
  70.             
  71.             try {
  72.                 $value = switch ($prop.Type) {
  73.                     2 {  # ASCII字符串
  74.                         [System.Text.Encoding]::ASCII.GetString($prop.Value).TrimEnd("`0")
  75.                     }
  76.                     3 {  # 无符号短整型
  77.                         [System.BitConverter]::ToUInt16($prop.Value, 0)
  78.                     }
  79.                     4 {  # 无符号长整型
  80.                         [System.BitConverter]::ToUInt32($prop.Value, 0)
  81.                     }
  82.                     5 {  # 有理数(分数表示)
  83.                         $num = [System.BitConverter]::ToUInt32($prop.Value, 0)
  84.                         $den = [System.BitConverter]::ToUInt32($prop.Value, 4)
  85.                         if ($den -ne 0) { $num / $den } else { 0 }
  86.                     }
  87.                     7 {  # 字节数组
  88.                         [System.BitConverter]::ToString($prop.Value)
  89.                     }
  90.                     default {
  91.                         [System.BitConverter]::ToString($prop.Value)
  92.                     }
  93.                 }
  94.                 # 特殊处理GPS坐标
  95. # 修改GPS坐标处理部分
  96. if ($propName -match "GPS(Latitude|Longitude)") {
  97.     $degrees = [BitConverter]::ToUInt32($prop.Value, 0) / 1
  98.     $minutes = [BitConverter]::ToUInt32($prop.Value, 4) / 1
  99.     $seconds = [BitConverter]::ToUInt32($prop.Value, 8) / 10000
  100.     $value = "{0}°{1}'{2:F4}""{3}" -f $degrees, $minutes, $seconds, $prop.Value[12]
  101. }
  102.                 $exifData[$propName] = $value
  103.             } catch {
  104.                 $exifData[$propName] = "Error: $_"
  105.             }
  106.         }
  107.         # 结果格式化输出
  108.         $exifData.GetEnumerator() | Format-Table @{
  109.             Label = "属性名称"
  110.             Expression = { $_.Key }
  111.         }, @{
  112.             Label = "属性值"
  113.             Expression = { $_.Value }
  114.         }, @{
  115.             Label = "描述"
  116.             Expression = {
  117.                 switch ($_.Key) {
  118.                     'Model'         { '型号' }
  119.                     'Software'      { '软件' }
  120.                     'DateTime'      { '日期和时间' }
  121.                     'FNumber'       { '光圈值' }
  122.                     'ExposureTime'   { '曝光时间(秒)' }
  123.                     'ISOSpeedRatings'{ '感光度' }
  124.                     'FocalLength'   { '焦距(毫米)' }
  125.                     'GPSLatitude'   { '纬度(度,分,秒)' }
  126.                     'GPSLongitude'  { '经度(度,分,秒)' }
  127.                     default         { '无描述信息' }
  128.                 }
  129.             }
  130.         }
  131.     } catch {
  132.         Write-Error "处理文件时出错:$($_.Exception.Message)"
  133.     } finally {
  134.         if ($bitmap) { $bitmap.Dispose() }
  135.     }
  136. }
  137. # 调用示例
  138. Get-ExifData -ImagePath "$env:USERPROFILE\Desktop\IMG_20250327_163811.jpg"
  139. pause
复制代码

返回列表