在PowerShell中,我希望在taglip-sharp库的帮助下将图片添加为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还有另一个名为CreateFromFile(File.IFileAbstraction )
的方法来加载图片。但是,如何将[System.Drawing.Bitmap]
转换为IFileAbstraction
?
我在网上找到的最近帮助是here和here。但它适用于.NET 4.5,我无法将其转换为PowerShell语法
Here is the documentation of taglib-sharp's picture object如果有帮助的话。
答案 0 :(得分:2)
简易版只需在powershell中调用c# code(如here所述)
"*\n"
完整的PowerShell版本:
$refs = @(
"c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Drawing.dll",
"d:\taglib-sharp.dll"
)
$Source = @"
namespace YourNamespace
{
public class Helper
{
public static TagLib.IPicture[] GetPictureFromBitmap(System.Drawing.Bitmap img)
{
return
new TagLib.IPicture[]
{
new TagLib.Picture(
new TagLib.ByteVector(
(byte[]) new System.Drawing.ImageConverter().ConvertTo(img, typeof (byte[]))))
};
}
}
}
"@
Add-Type -Path $refs
Add-Type -ReferencedAssemblies $refs -TypeDefinition $Source -Language CSharp
# 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 = [YourNamespace.Helper]::GetPictureFromBitmap($pic)
# Save Mp3
$media.Save()
在powershell v3中测试