将剪贴板中的图像转换为JPEG

时间:2017-01-05 17:44:25

标签: excel image powershell jpeg clipboard

我想出了如何使用PowerShell脚本在Excel工作表中复制范围。我在变量中编写了该输出,以便稍后将其转换为JPEG。 我已经使用Excel应用程序& Windows.Forms.Clipboard个方法(GetImage())。

现在我的问题是如何在PowerShell脚本中将当前剪贴板转换为JPEG。

我无法使用save方法转换剪贴板。 我的上一个命令看起来像这样:

  1. $clipboard.Save("C:\Data\picture.jpeg")
  2. $clipboard.Save(("C:\Data\picture.jpeg", "jpeg"))
  3. $clipboard.Save("C:\Data\picture.jpeg", "jpeg")
  4. 这三种解决方案都不起作用。我总是得到变量 null 的错误。

    在工作中我也不允许使用PowerShell版本5.因此,我也不能使用cmdlet Get-Clipboard& Set-Clipboard

    我知道可以将剪辑粘贴到绘画中,然后手动保存,但我不想自己做,但使用PowerShell脚本。

1 个答案:

答案 0 :(得分:1)

使用[System.Windows.Forms.Clipboard::GetImage()从剪贴板中提取图像,然后使用正确的格式参数调用图像对象的Save()方法:

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$file = 'C:\path\to\output.jpg'

if ([Windows.Forms.Clipboard]::ContainsImage()) {
  $img = [Windows.Forms.Clipboard]::GetImage()
  $img.Save($file, [Drawing.Imaging.ImageFormat]::Jpeg)
} else {
  Write-Warning 'No image in clipboard.'
}

请注意,对于剪贴板访问工作,您必须在STA模式下运行(单线程公寓):

  

注意
  Clipboard类只能在设置为单线程单元(STA)模式的线程中使用。要使用此类,请确保使用STAThreadAttribute属性标记 Main 方法。