Bild in Zwischenablage in JPEG konvertieren - Excel, Bild, Powershell, JPEG, Zwischenablage

Ich habe herausgefunden, wie man einen Bereich in einem Excel-Blatt mit einem PowerShell-Skript kopiert. Ich habe diese Ausgabe in eine Variable geschrieben, um sie später in ein JPEG umzuwandeln. Ich habe das mit der Excel-Anwendung gemacht & Windows.Forms.Clipboard Methoden (GetImage()).

Jetzt ist meine Frage, wie ich meine aktuelle Zwischenablage zu einem JPEG in einem PowerShell-Skript umwandeln kann.

Es war mir nicht möglich, die Zwischenablage mit der Speichermethode zu transformieren. Mein letzter Befehl sah ungefähr so ​​aus:

  1. $clipboard.Save("C:Datapicture.jpeg")
  2. $clipboard.Save(("C:Datapicture.jpeg", "jpeg"))
  3. $clipboard.Save("C:Datapicture.jpeg", "jpeg")

Keine dieser drei Lösungen hat funktioniert. Ich habe immer den Fehler, dass die Variable ist Null.

Bei der Arbeit darf ich auch PowerShell Version 5 nicht verwenden. Daher kann ich die Cmdlets auch nicht verwenden Get-Clipboard & Set-Clipboard.

Ich weiß, dass es möglich ist, den Clip einfach in Farbe einzufügen und dann manuell zu speichern, aber ich möchte das nicht alleine machen, sondern mit einem PowerShell-Skript.

Antworten:

1 für die Antwort № 1

Benutzen [System.Windows.Forms.Clipboard::GetImage() um ein Bild aus der Zwischenablage zu holen, rufen Sie dann das Bildobjekt "s Save() Methode mit dem korrekten Formatparameter:

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

$file = "C:pathtooutput.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."
}

Beachten Sie, dass Sie für die Zwischenablage Zugriff auf die Arbeit müssen Sie im STA-Modus (Single Thread Apartment) ausgeführt werden:

Hinweis
Die Clipboard-Klasse kann nur in Threads verwendet werden, die auf den Single-Thread-Apartment-Modus (STA) eingestellt sind. Um diese Klasse zu verwenden, stellen Sie sicher, dass Ihre Main Methode ist mit dem Attribut STAThreadAttribute gekennzeichnet.


Verwandte Fragen