Powershell 将[System.Drawing.Bitmap]转换为[File.IFileAbstration] 任务

Powershell 将[System.Drawing.Bitmap]转换为[File.IFileAbstration] 任务,powershell,system.drawing,taglib-sharp,Powershell,System.drawing,Taglib Sharp,在PowerShell中,我想在库的帮助下添加一张图片作为ID3V2标记。 通常你是这样做的: # Load taglib-sharb library [Reflection.Assembly]::LoadFrom( (Resolve-Path "..\Common\taglib-sharp.dll")) # Load MP3 file $media = [TagLib.File]::Create("C:\MusicFile.mp3") # Load picture $pic = [tagl

在PowerShell中,我想在库的帮助下添加一张图片作为ID3V2标记。
通常你是这样做的:

# Load taglib-sharb library
[Reflection.Assembly]::LoadFrom( (Resolve-Path "..\Common\taglib-sharp.dll"))

# Load MP3 file
$media = [TagLib.File]::Create("C:\MusicFile.mp3")

# Load picture
$pic = [taglib.picture]::createfrompath("C:\MyAlbumArt.jpg")

# Add picture to MP3
$media.Tag.Pictures = $pic

# Save Mp3 
$media.Save() 
一般问题 只有当您的图片是位于本地某处的文件时,上述方法才有效。 但是我有一个图片作为
[System.Drawing.Bitmap]
对象,它没有文件路径来加载
createfrompath

在你说之前,把它写到光盘上:我宁愿避免保存它们,因为我的最终脚本处理了很多图片和mp3文件。我不想写和删除数百张图片

具体问题 我看到taglib还有另一个方法用来加载图片。但是如何将
[System.Drawing.Bitmap]
转换为
iFileAbstration

我在网上找到的最贴切的帮助是和。但它是针对.NET4.5的,我绝对无法将其转换为PowerShell语法


如果有帮助的话。

简单的版本就是在powershell中调用

完整powershell版本:

function GetPictureFromBitmap([System.Drawing.Bitmap]$bitmap)
{
    $converter = New-Object -TypeName System.Drawing.ImageConverter
    $byte_vec = New-Object -TypeName TagLib.ByteVector -ArgumentList $converter.ConvertTo($bitmap, [byte[]])
    $picture = New-Object -TypeName TagLib.Picture -ArgumentList $byte_vec
    $picture_list = New-Object TagLib.IPicture[] 1
    $picture_list[0] = $picture
    return $picture_list
}


$refs = @(
"c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Drawing.dll",
"d:\taglib-sharp.dll"
)

Add-Type -Path $refs

# Load MP3 file
$media = [TagLib.File]::Create("C:\MusicFile.mp3")

# Load picture into System.Drawing.Image
[Bitmap]$pic = [System.Drawing.Image]::FromFile("C:\MyAlbumArt.jpg")

# Add picture to MP3
$media.Tag.Pictures = GetPictureFromBitmap($pic)

# Save Mp3 
$media.Save() 

在powershell v3中测试

是否可以添加指向正在使用的
taglib sharp.dll
文件的链接?@CB。完成。感谢提醒我一个警告:我的Powershell 4.0抱怨
[Bitmap]
,所以我不得不删除它
function GetPictureFromBitmap([System.Drawing.Bitmap]$bitmap)
{
    $converter = New-Object -TypeName System.Drawing.ImageConverter
    $byte_vec = New-Object -TypeName TagLib.ByteVector -ArgumentList $converter.ConvertTo($bitmap, [byte[]])
    $picture = New-Object -TypeName TagLib.Picture -ArgumentList $byte_vec
    $picture_list = New-Object TagLib.IPicture[] 1
    $picture_list[0] = $picture
    return $picture_list
}


$refs = @(
"c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Drawing.dll",
"d:\taglib-sharp.dll"
)

Add-Type -Path $refs

# Load MP3 file
$media = [TagLib.File]::Create("C:\MusicFile.mp3")

# Load picture into System.Drawing.Image
[Bitmap]$pic = [System.Drawing.Image]::FromFile("C:\MyAlbumArt.jpg")

# Add picture to MP3
$media.Tag.Pictures = GetPictureFromBitmap($pic)

# Save Mp3 
$media.Save()