ファイルアイコンをとり、それらをbase64に変換するpowershellスクリプトを作成します。ファイルアイコン(関連するだけでなく、画像のサムネイルと動画のサムネイル)を取得できるAPIアセンブリがあります。残念ながら、それが与えられるフォーマットはBitmapSourceです。どのようにソースをイメージに変換するか、より正確には、それをPowerShellを介して厳密にbase64に変換することができます。BitmapSourceをPowershell経由でBitmapImage(またはBase64)に変換する
メモ:IT PowerShellにする必要があります...
私は答えを見つけるための研究のトンをやってみましたが、すべてが、それは難しい私はPowerShellのにC#のを変換できるようになり、C#で行われます。..
これは私がこれまで持っているものです。
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:
私は、次のコードを使用して、イメージにソースを変換する方法を見つけました:
[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)
しかし、私も問題が起きているbase64に画像を変換する必要があります。イメージをメモリストリームに保存しようとしていますが、バイトを見るとnullになります。
MemoryStream = New-Object System.IO.MemoryStream
$bitmap.save($MemoryStream)
$Bytes = $MemoryStream.ToArray()
$MemoryStream.Flush()
$MemoryStream.Dispose()
$iconB64 = [convert]::ToBase64String($Bytes)
私はそれが簡単だったと思いますが、ビットマップソースはファイル(IE:ファイルエクスプローラまたはテキストドキュメントアイコンなど)のサムネイルのソースです実際には(効率的に、すべてのファイルタイプで動作します)。問題は、ビットマップソースが残っていることです。ファイルタイプ(任意)のサムネイルを取得してから返されるデータです。私はそれを変換しようとしています。つまり、これをbase64または画像のいずれかに変換するために、何らかのアセンブリが必要なことを意味します。 – TheTechyGamer