You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修改PowerShell脚本以仅转换PowerPoint中大于100KB的嵌入PNG为JPEG

如何修改PowerShell脚本以仅转换PowerPoint中大于100KB的嵌入PNG为JPEG

没问题,我来帮你调整这个PowerShell脚本,让它只针对大于100KB的嵌入PNG图片进行JPEG转换,这样那些小尺寸带透明背景的PNG就不会被处理,避免出现背景变黑的问题,同时还能保留原有的压缩大文件的效果。

以下是修改后的完整脚本,我会在后面标注关键的改动点:

# 加载PowerPoint COM对象
$powerPoint = New-Object -ComObject PowerPoint.Application
$powerPoint.Visible = [Microsoft.Office.Core.MsoTriState]::msoFalse

# 替换为你的PPT文件路径
$pptPath = "C:\Your\Presentation.pptx"
$presentation = $powerPoint.Presentations.Open($pptPath)

# 遍历所有幻灯片
foreach ($slide in $presentation.Slides) {
    # 遍历幻灯片中的所有形状
    foreach ($shape in $slide.Shapes) {
        # 检查是否是图片且格式为PNG
        if ($shape.Type -eq [Microsoft.Office.Core.MsoShapeType]::msoPicture -and $shape.PictureFormat.Type -eq [Microsoft.Office.Core.MsoPictureType]::msoPicturePNG) {
            # 获取图片的字节数据来判断大小
            $imageBytes = $shape.PictureFormat.Picture.Data
            # 判断是否大于100KB(100 * 1024 = 102400字节)
            if ($imageBytes.Length -gt 102400) {
                # 临时保存PNG到临时文件
                $tempPngPath = [System.IO.Path]::GetTempFileName() + ".png"
                $shape.PictureFormat.Picture.Save($tempPngPath)
                
                # 将PNG转换为JPEG并替换原图片
                $jpeg = New-Object -ComObject WIA.ImageFile
                $jpeg.LoadFile($tempPngPath)
                $tempJpgPath = [System.IO.Path]::GetTempFileName() + ".jpg"
                $jpeg.SaveFile($tempJpgPath)
                
                $shape.Fill.UserPicture($tempJpgPath)
                
                # 清理临时文件
                Remove-Item $tempPngPath, $tempJpgPath -Force
            }
        }
    }
}

# 保存修改后的PPT(可以另存为新文件避免覆盖原文件)
$presentation.SaveAs("C:\Your\Compressed_Presentation.pptx")
$presentation.Close()
$powerPoint.Quit()

# 释放COM对象
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($powerPoint) | Out-Null

关键改动说明:

  • 添加了$imageBytes = $shape.PictureFormat.Picture.Data来获取嵌入PNG的字节数据,通过$imageBytes.Length得到图片的字节大小。
  • 增加了判断条件if ($imageBytes.Length -gt 102400),这里的102400字节等于100KB,只有满足这个条件的PNG才会被转换为JPEG。
  • 保留了原脚本的核心转换逻辑,只针对大尺寸PNG执行转换,小透明PNG会被跳过。

注意事项:

  1. 运行脚本前请确保关闭目标PPT文件,避免权限冲突。
  2. 脚本需要依赖WIA(Windows Image Acquisition)组件,一般Windows系统默认已安装,如果遇到错误可以检查该组件是否正常。
  3. 建议先在测试PPT上运行脚本,确认效果后再处理正式文件,也可以修改SaveAs的路径来另存为新文件,避免覆盖原文件。

备注:内容来源于stack exchange,提问作者AKV

火山引擎 最新活动