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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 22:10:18