You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10下用VBA/PowerShell提取JPEG的Compression属性排查伪文件

批量提取JPEG文件压缩属性的解决方案

一、PowerShell 实现方案

通过.NET的System.Drawing组件读取图像内部的EXIF压缩属性,直接判断文件是否为真正的JPEG压缩格式,适合批量处理数千个文件:

# 设置目标文件夹路径
$targetFolder = "C:\Your\Image\Folder"

# 获取所有JPG/JPEG文件(包含大小写扩展名)
$jpegFiles = Get-ChildItem -Path $targetFolder -Filter *.jpg -Recurse -File
$jpegFiles += Get-ChildItem -Path $targetFolder -Filter *.jpeg -Recurse -File

# 初始化结果数组
$results = @()

foreach ($file in $jpegFiles) {
    try {
        # 加载图像并释放资源
        $image = [System.Drawing.Image]::FromFile($file.FullName)
        
        # 定位压缩属性(EXIF标签ID 0x0103)
        $compressionValue = ($image.PropertyItems | Where-Object { $_.Id -eq 0x0103 }).Value[0]
        
        # 转换为可读文本
        $compressionText = switch ($compressionValue) {
            0 { "Uncompressed" }
            6 { "JPEG Compression" }
            default { "Unknown" }
        }
        
        # 记录结果
        $results += [PSCustomObject]@{
            FilePath = $file.FullName
            FileName = $file.Name
            Compression = $compressionText
            IsValidJPEG = $compressionText -eq "JPEG Compression"
        }
        
        $image.Dispose()
    }
    catch {
        # 捕获无法加载的异常文件
        $results += [PSCustomObject]@{
            FilePath = $file.FullName
            FileName = $file.Name
            Compression = "加载失败"
            IsValidJPEG = $false
        }
    }
}

# 导出结果到CSV
$results | Export-Csv -Path "$targetFolder\JPEG_Compression_Check.csv" -NoTypeInformation -Encoding UTF8

Write-Host "检测完成,结果已保存到 JPEG_Compression_Check.csv"

执行说明:

  • 替换$targetFolder为你的图像文件夹路径
  • 运行后会生成CSV文件,直接筛选Compression列为Uncompressed的条目即可找到假JPEG文件
  • Windows系统默认包含System.Drawing组件,无需额外安装

二、Excel VBA 实现方案

利用Windows WIA组件读取图像内部属性,适合在Excel中直接处理并展示结果:

Sub CheckJPEGCompression()
    Dim targetFolder As String
    Dim fileSys As Object, folderObj As Object, fileObj As Object
    Dim wiaImg As Object, prop As Object
    Dim compression As String
    Dim rowNum As Integer
    
    ' 设置目标文件夹
    targetFolder = "C:\Your\Image\Folder"
    Set fileSys = CreateObject("Scripting.FileSystemObject")
    Set folderObj = fileSys.GetFolder(targetFolder)
    
    ' 初始化表头
    Cells(1, 1) = "文件名"
    Cells(1, 2) = "文件路径"
    Cells(1, 3) = "压缩属性"
    Cells(1, 4) = "是否为有效JPEG"
    rowNum = 2
    
    ' 遍历所有JPG/JPEG文件
    For Each fileObj In folderObj.Files
        If LCase(fileSys.GetExtensionName(fileObj.Name)) Like "jpg" Or _
           LCase(fileSys.GetExtensionName(fileObj.Name)) Like "jpeg" Then
            On Error Resume Next
            Set wiaImg = CreateObject("WIA.ImageFile")
            wiaImg.LoadFile fileObj.Path
            
            ' 查找压缩属性(PropertyID 259对应EXIF标签0x0103)
            compression = "Unknown"
            For Each prop In wiaImg.Properties
                If prop.PropertyID = 259 Then
                    Select Case prop.Value
                        Case 0: compression = "Uncompressed"
                        Case 6: compression = "JPEG Compression"
                    End Select
                    Exit For
                End If
            Next prop
            
            ' 写入表格
            Cells(rowNum, 1) = fileObj.Name
            Cells(rowNum, 2) = fileObj.Path
            Cells(rowNum, 3) = compression
            Cells(rowNum, 4) = IIf(compression = "JPEG Compression", "是", "否")
            
            rowNum = rowNum + 1
            Set wiaImg = Nothing
            On Error GoTo 0
        End If
    Next fileObj
    
    ' 自动调整列宽
    Columns("A:D").AutoFit
    MsgBox "检测完成!"
End Sub

执行说明:

  • 替换targetFolder为你的图像文件夹路径
  • 若提示WIA组件未注册,可运行命令regsvr32 wiaaut.dll(以管理员身份)注册组件

三、快速工具方案(ExifTool)

无需编写代码,用专业图像元数据工具ExifTool批量提取:

  1. 下载ExifTool并将其放入图像文件夹或系统PATH
  2. 打开命令提示符,进入目标文件夹后执行:
exiftool -r -csv -Compression -FileName -Directory . > JPEG_Compression_Check.csv
  1. 打开生成的CSV文件,筛选Compression列为Uncompressed的条目即可找到问题文件

内容的提问来源于stack exchange,提问作者MBB70

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:55:25