PowerShell自动化Photoshop存为PNG却生成PSD问题求助
PowerShell调用Photoshop批量处理图片:保存PNG却生成PSD的解决办法
需求说明
- 批量处理指定文件夹及子文件夹内所有同名图片
- 对每张图片执行预设的Photoshop动作
- 将修改后的图片以新名称保存为PNG格式,存回原文件所在目录
- 限制:禁止使用PowerShell-Photoshop-Api-Tools等第三方模块
原代码(保存格式异常)
原代码可正常连接Photoshop、打开图片并执行动作,但保存时始终生成PSD文件而非PNG:
# 指定图片所在根文件夹 $rootFolderPath = "C:\PhotoshopTest" # 指定目标图片的文件名(不含扩展名) $imageName = "TestImage" # 指定要执行的动作组和动作名称 $actionSetName = "AutomationTest" $actionName = "Test1" # 连接Photoshop应用 $app = New-Object -ComObject "Photoshop.Application" # 递归获取所有同名图片文件 $imageFiles = Get-ChildItem -Path $rootFolderPath -Recurse -File | Where-Object { $_.BaseName -eq $imageName } # 批量处理每张图片 foreach ($imageFile in $imageFiles) { # 打开图片 $doc = $app.Open($imageFile.FullName) # 执行预设动作 $app.DoAction($actionName, $actionSetName) # 保存修改后的图片(此处为错误写法,导致生成PSD) $newFileName = "Test1.png" $newImagePath = Join-Path $imageFile.DirectoryName $newFileName $pngSaveOptions = [System.Type]::GetType("Adobe.Photoshop.PNGSaveOptions") $doc.SaveAs($newImagePath, $pngSaveOptions) # 关闭图片 $doc.Close() } # 退出Photoshop $app.Quit() Write-Host "图片处理完成并已保存新文件。"
尝试过的无效写法
生成PSD文件的写法
以下写法均无法生成PNG,最终输出PSD:
# 直接保存,默认PSD格式 $doc.SaveAs($newImagePath)
# 使用PsSaveOptions(PSD格式选项) $pngSaveOptions = [System.Type]::GetType("Adobe.Photoshop.PsSaveOptions") $doc.SaveAs($newImagePath, $pngSaveOptions)
# 使用TiffSaveOptions(错误格式选项) $pngSaveOptions = [System.Type]::GetType("Adobe.Photoshop.TiffSaveOptions") $doc.SaveAs($newImagePath, $pngSaveOptions)
# 调用ActiveDocument保存,仍用错误的Options创建方式 $app.ActiveDocument.SaveAs($newImagePath, $pngSaveOptions)
无保存结果的写法
以下写法执行后没有生成任何文件:
# 使用数字标识格式(无效) $doc.SaveAs($newImagePath, 16)
# 使用System.Drawing的ImageFormat(与Photoshop COM对象不兼容) $doc.SaveAs($newImagePath, [System.Drawing.Imaging.ImageFormat]::Png)
正确解决方案
问题出在PNG保存选项的创建方式,需要通过New-Object -ComObject直接创建Photoshop的PNGSaveOptions对象,而非通过[System.Type]::GetType()获取类型。
将原代码中的保存选项创建行替换为:
$pngSaveOptions = New-Object -ComObject "Photoshop.PngSaveOptions"
修改后的完整保存代码片段
# 保存修改后的图片(正确写法) $newFileName = "Test1.png" $newImagePath = Join-Path $imageFile.DirectoryName $newFileName $pngSaveOptions = New-Object -ComObject "Photoshop.PngSaveOptions" $doc.SaveAs($newImagePath, $pngSaveOptions)
这样修改后,Photoshop会正确将图片保存为PNG格式,而非默认的PSD。
内容的提问来源于stack exchange,提问作者Don Cummins
相关产品推荐
相关产品推荐

