Ich möchte ein Powershell-Skript erstellen, die Dateisymbole übernimmt und sie in base64 konvertiert. Es gibt eine API-Assembly, die es mir ermöglicht, die Dateisymbole zu erhalten (nicht nur zugeordnet, sondern auch Bild-Thumbnails und Video-Thumbnails). Leider ist das Format, in dem es angegeben wird, eine BitmapSource. Ich würde gerne wissen, wie ich die Quelle in ein Bild umwandeln könnte, oder genauer, es in base64 ausschließlich durch Powershell konvertieren.Konvertieren einer BitmapSource in eine BitmapImage (oder Base64) über Powershell
HINWEIS: ES HAT Powershell sein ...
Ich habe versucht, eine Tonne Forschung zu tun, die Antwort zu finden, aber alles ist in C# getan, was es schwer macht für mich C# in Powershell zu konvertieren ..
Dies ist, was ich bisher:
Add-Type -Path ..\dll\Microsoft.WindowsAPICodePack.Shell.dll
Add-Type -Path ..\dll\Microsoft.WindowsAPICodePack.dll
Import-Module ..\dll\Microsoft.WindowsAPICodePack.dll
Import-Module ..\dll\Microsoft.WindowsAPICodePack.Shell.dll
[System.Windows.Media.Imaging.BitmapSource] $iconSrc = [Microsoft.WindowsAPICodePack.Shell.ShellFile]::FromFilePath('image I am converting').Thumbnail.BitmapSource
EDIT:
ich einen Weg gefunden, um die Quelle zu einem Bild mit dem folgenden Code zu konvertieren:
[System.Windows.Media.Imaging.BitmapSource] $iconSrc = [Microsoft.WindowsAPICodePack.Shell.ShellFile]::FromFilePath ('Image to convert path').Thumbnail.BitmapSource
$MemoryStream = New-Object System.IO.MemoryStream
$enc = New-Object System.Windows.Media.Imaging.BmpBitmapEncoder
$enc.Frames.Add([System.Windows.Media.Imaging.BitmapFrame]::Create($iconSrc))
$enc.Save($MemoryStream)
$bitmap = New-Object System.Drawing.Bitmap($MemoryStream)
Allerdings muss ich auch das Bild in Base64 konvertieren, die ich habe Probleme damit. Ich versuche, das Bild in einem Speicherstream zu speichern, aber es wird null, wenn ich auf die Bytes schaue.
MemoryStream = New-Object System.IO.MemoryStream
$bitmap.save($MemoryStream)
$Bytes = $MemoryStream.ToArray()
$MemoryStream.Flush()
$MemoryStream.Dispose()
$iconB64 = [convert]::ToBase64String($Bytes)
Ich wünschte, es so einfach wäre, aber die Bitmap-Quelle ist die Quelle für die Miniaturansicht einer Datei (IE: Datei-Explorer oder ein Textdokument Symbol zum Beispiel), die kann ich nur wirklich bekommen (effizient und arbeitet mit allen Dateitypen). Das Problem ist, dass ich mit einer Bitmap-Quelle festhalte, da dies die Daten sind, die beim Abrufen des Thumbnails eines Dateityps (any) zurückgegeben werden. Ich versuche das zu konvertieren, was bedeutet, dass ich wahrscheinlich eine Art Assembly benötige, um das entweder in base64 oder ein Bild zu konvertieren. – TheTechyGamer