<#
.SYNOPSIS
通过Word自动化调整docx中所有图片的亮度和对比度至40%
.DESCRIPTION
直接调用Word COM接口,无需依赖外部工具
.PARAMETER InputPath
输入docx文件路径
.PARAMETER OutputPath
输出处理后的docx文件路径(可与输入路径相同,覆盖原文件)
.\backcolor.ps1 -InputPath "C:\test\input.docx" -OutputPath "C:\test\output.docx"
#>param([Parameter(Mandatory=$true)][string]$InputPath,[Parameter(Mandatory=$true)][string]$OutputPath
)# 检查输入文件是否存在
if (-not (Test-Path $InputPath -PathType Leaf)) {Write-Error "输入文件不存在:$InputPath"exit 1
}# 创建Word应用实例
$word = New-Object -ComObject Word.Application
$word.Visible = $false # 后台运行,不显示界面try {# 打开文档$doc = $word.Documents.Open((Resolve-Path $InputPath).Path)# 处理嵌入式图片(InlineShape)foreach ($inlineShape in $doc.InlineShapes) {# 仅处理图片类型(排除图表、公式等)if ($inlineShape.Type -eq 3){ # 3 = wdInlineShapePicture$inlineShape.PictureFormat.IncrementBrightness(0.2) # 亮度40%$inlineShape.PictureFormat.IncrementContrast(0.2) # 对比度40%#Write-Host "已处理嵌入式图片(EditID: $($inlineShape.EditID))"}}# 保存处理后的文档$doc.SaveAs2((Resolve-Path (Split-Path $OutputPath -Parent)).Path + "\" + (Split-Path $OutputPath -Leaf))Write-Host "处理完成,输出文件:$OutputPath"
}
catch {Write-Error "处理失败:$_"
}
finally {# 关闭文档和Word实例,释放资源if ($doc) {$doc.Close()[System.Runtime.Interopservices.Marshal]::ReleaseComObject($doc) | Out-Null}if ($word) {$word.Quit()[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null}# 强制垃圾回收,避免残留进程[System.GC]::Collect()[System.GC]::WaitForPendingFinalizers()
}