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

请求修改PowerShell脚本:统计图片颜色数并忽略Alpha通道

修改PowerShell脚本忽略Alpha通道统计图片颜色数

我正在为老游戏《Recoil》制作高清纹理Mod,需要批量获取数千张图片的宽度、高度、像素格式及颜色数,以便导入Excel筛选适合Upscale的纹理。

目前已通过PowerShell脚本获取到图片的宽高和像素格式,但添加颜色数统计后,结果与Photoshop颜色计数工具存在差异——Photoshop会忽略Alpha通道,而当前脚本会统计包含Alpha通道的像素颜色,仅Format32bppArgb格式有此问题,Format24bppRgb格式统计正常。需要修改脚本,使其统计颜色数时忽略Alpha通道,同时保留批量处理文件夹内所有图片的能力。


修改后的完整脚本

Function Get-Image{
    Param(
        [Parameter(ValueFromPipeline=$true)]
        [System.IO.FileInfo]$file
    )
    begin{        
        [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") | Out-Null 
    }
    process{
        if( $file.Exists){
            $img = [System.Drawing.Image]::FromFile($file)
            $image = $img.Clone()
            $img.Dispose()

            # 统计颜色(忽略Alpha通道)
            $colorSet = [System.Collections.Generic.HashSet[System.Drawing.Color]]::new()
            foreach ($x in 0..($image.Width - 1)) {
                foreach ($y in 0..($image.Height - 1)) {
                    $originalColor = $image.GetPixel($x, $y)
                    # 创建仅保留RGB的颜色对象,固定Alpha为255以忽略通道差异
                    $rgbOnlyColor = [System.Drawing.Color]::FromArgb(255, $originalColor.R, $originalColor.G, $originalColor.B)
                    [void]$colorSet.Add($rgbOnlyColor)
                }
            }

            # 为图片对象添加文件名和颜色计数属性
            $image | Add-Member -MemberType NoteProperty -Name Filename -Value $file.FullName -PassThru |
                    Add-Member -MemberType NoteProperty -Name ColorCount -Value $colorSet.Count -PassThru
        }else{
            Write-Host "File not found: $file" -ForegroundColor yellow       
        }   
    }    
    end{}
}

# 批量处理示例(替换为你的图片路径)
# 递归遍历指定文件夹下所有PNG图片,输出统计信息
Get-ChildItem "D:\Games\Setups\RECOIL_fixed_edition_v0.5\SourceFile\zbd\Dataset_D\Dataset_D\ammoarcgun\*.png" -Recurse | 
    Get-Image | 
    Select-Object filename, Width, Height, PixelFormat, ColorCount | 
    Format-Table -AutoSize

# 可选:导出结果到Excel(需先安装ImportExcel模块:Install-Module -Name ImportExcel)
# Get-ChildItem "你的图片根路径\*.png" -Recurse | Get-Image | Select-Object filename, Width, Height, PixelFormat, ColorCount | Export-Excel -Path "图片纹理信息.xlsx" -AutoSize

关键修改说明

  • 在获取每个像素颜色后,通过[System.Drawing.Color]::FromArgb(255, $originalColor.R, $originalColor.G, $originalColor.B)生成新的颜色对象,固定Alpha通道为255,仅保留RGB信息,这样统计颜色时会忽略Alpha通道的差异,和Photoshop的计数逻辑对齐。
  • 保留了原脚本的批量处理能力,支持通过-Recurse参数递归遍历子文件夹内的所有图片。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:48:22