我想创建一个powershell脚本,它接受文件图标并将它们转换为base64。有一个API程序集,允许我获取文件图标(不只是关联,但图像缩略图和视频缩略图)。不幸的是,它给出的格式是BitmapSource。我想知道如何将源转换为图像,或者更确切地说,通过powershell将其转换为base64。
注意:它必须是PowerShell ......
我尝试了大量的研究来找到答案,但一切都是在c#中完成的,这使我很难将c#转换为powershell ..
这是我到目前为止所做的:
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
编辑:
我找到了一种使用以下代码将源转换为图像的方法:
[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。我试图将图像保存到内存流,但是当我查看字节时它变为空。
MemoryStream = New-Object System.IO.MemoryStream
$bitmap.save($MemoryStream)
$Bytes = $MemoryStream.ToArray()
$MemoryStream.Flush()
$MemoryStream.Dispose()
$iconB64 = [convert]::ToBase64String($Bytes)
答案 0 :(得分:1)
$ bitmap | gm定义显示需要imageformat的第二个参数。
尝试将图像格式添加到位图。这似乎对我有用:
MemoryStream = New-Object System.IO.MemoryStream
$bitmap.save($MemoryStream, [System.Drawing.Imaging.ImageFormat]::Jpeg)
$Bytes = $MemoryStream.ToArray()
$MemoryStream.Flush()
$MemoryStream.Dispose()
$iconB64 = [convert]::ToBase64String($Bytes)
答案 1 :(得分:0)
也许我在这里误解了这个问题,但是将图像转换为Base64应该就这么简单:
__HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE);
同样,我可能误解了你的问题,但我已经用它来嵌入GUI中的blob,这样我就不会有任何文件依赖。