C# TagLib 为 Mp3 设置专辑封面

     2023-03-07     259

关键词:

【中文标题】C# TagLib 为 Mp3 设置专辑封面【英文标题】:C# TagLib Set Album Cover for Mp3 【发布时间】:2018-05-20 17:03:52 【问题描述】:

我有一个 mp3 文件,我想将专辑封面添加到其中。艺术作品已保存到一个临时文件夹中,我检查了它,它在那里并且是一个 jpeg。 这是我给的代码:

        public void AddMp3Tags()
        
            TagLib.File file = TagLib.File.Create(OutputPath + OutputName + "." + Format);
            SetAlbumArt(Art, file);
            file.Tag.Title = SongTitle;
            file.Tag.Performers = Artists.Split(',');
            file.Tag.Album = Album;           
            file.Tag.Track = (uint)TrackNumber;
            file.Tag.Year = (uint)Convert.ToInt32(Regex.Match(Year, @"(\d)(\d)(\d)(\d)").Value);            
            file.Save();
        

        public void SetAlbumArt(string url, TagLib.File file)
             
            string path = string.Format(@"0temp\1.jpg", OutputPath, Guid.NewGuid().ToString());
            using (WebClient client = new WebClient())
            

                client.DownloadFile(new Uri(url), path);
            


            TagLib.Picture pic = new TagLib.Picture
            
                Type = TagLib.PictureType.FrontCover,
                Description = "Cover",
                MimeType = System.Net.Mime.MediaTypeNames.Image.Jpeg
            ;
            MemoryStream ms = new MemoryStream();
            Image image = Image.FromFile(path);
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            ms.Position = 0;
            pic.Data = TagLib.ByteVector.FromStream(ms);
            file.Tag.Pictures = new TagLib.IPicture[]  pic ;
            file.Save();
            ms.Close();

        

所有标签都设置正确,除了只显示黑框的艺术作品: Black box cover art in windows media player.

我尝试了很多东西,我做错了什么?

【问题讨论】:

只是一个注释,不会是这里的问题。可能没有理由将 JPEG 读入图像并再次保存,因为它会导致质量损失。只需打开文件并将该流提供给 TagLib。 【参考方案1】:

所以我做了更多的研究,结果发现默认情况下 WMP 尝试使用网络服务来获取专辑插图,我在 VLC 中打开了歌曲并显示了插图。专辑代码写得正确,如下所示:Mp3Tag Viewer/Editor

我发现的另一件事是我的标签使用的是 Id3v2.4 和 Id3v1。 WMP 出于某种原因不喜欢这个,所以我强迫 TagLib 使用 Id3v2.3。我还将文本编码更改为 UFT16,因为 UFT8 不起作用。专辑封面现在显示在 WMP 和 Windows 资源管理器中。

我还找到了一种不将图像写入磁盘的方法,方法是从网页下载数据并将其保存到内存中。

这是我的最终代码:

public void AddMp3Tags()

    TagLib.Id3v2.Tag.DefaultVersion = 3;
    TagLib.Id3v2.Tag.ForceDefaultVersion = true;
    TagLib.File file = TagLib.File.Create(OutputPath + OutputName + ".mp3");
    SetAlbumArt(Art, file);
    file.Tag.Title = SongTitle;
    file.Tag.Performers = Artists.Split(',');
    file.Tag.Album = Album;           
    file.Tag.Track = (uint)TrackNumber;
    file.Tag.Year = (uint)Convert.ToInt32(Regex.Match(Year, @"(\d)(\d)(\d)(\d)").Value);
    file.RemoveTags(file.TagTypes & ~file.TagTypesOnDisk);
    file.Save();


public void SetAlbumArt(string url, TagLib.File file)
            
    string path = string.Format(@"0temp\1.jpg", OutputPath, Guid.NewGuid().ToString());
    byte[] imageBytes;
    using (WebClient client = new WebClient())
    
        imageBytes = client.DownloadData(url);
    

    TagLib.Id3v2.AttachedPictureFrame cover = new TagLib.Id3v2.AttachedPictureFrame
    
        Type = TagLib.PictureType.FrontCover,
        Description = "Cover",
        MimeType = System.Net.Mime.MediaTypeNames.Image.Jpeg,
        Data = imageBytes,
        TextEncoding = TagLib.StringType.UTF16


    ;
    file.Tag.Pictures = new TagLib.IPicture[]  cover ;

我希望这可以帮助任何和我有同样问题的人,并且不需要像我那样花太多时间来解决这个问题。

【讨论】:

不确定为什么需要所有这些代码。我在 1 行中添加了图片,它在 WMP 和 VLC 中运行良好,没有问题(不更改标签版本)>>>>> file.Tag.Pictures = new TagLib.IPicture[] new TagLib.Picture(@"c :\temp\mycover.png") ;【参考方案2】:

确保您的文件已成功下载并尝试以下操作:

public void SetAlbumArt(string url, TagLib.File file)
     
    string path = string.Format(@"0temp\1.jpg", OutputPath, Guid.NewGuid().ToString());
    using (WebClient client = new WebClient())
    

        client.DownloadFile(new Uri(url), path);
    

    file.Tag.Pictures = new TagLib.IPicture[]
    
        new TagLib.Picture(new TagLib.ByteVector((byte[])new System.Drawing.ImageConverter().ConvertTo(System.Drawing.Image.FromFile(path), typeof(byte[]))))
        
            Type = TagLib.PictureType.FrontCover,
            Description = "Cover",
            MimeType = System.Net.Mime.MediaTypeNames.Image.Jpeg
        
    ;

    file.Save();

【讨论】:

不幸的是这仍然不起作用,并且图像文件肯定是下载的,我可以在文件夹中看到它。 确保 jpeg 文件格式正确。可能是带有“.jpg”扩展名的位图图像。用paint打开你的jpeg文件并用不同的名字保存(用于测试)。 这不是问题。不过还是谢谢。我现在已经解决了我的问题。

使用 TagLib 从 MP3 文件中提取专辑封面 - 有没有更好的方法编写此代码?

】使用TagLib从MP3文件中提取专辑封面-有没有更好的方法编写此代码?【英文标题】:ExtractingAlbumartfromMP3filesusingTagLib-Isthereabetterwaywritethiscode?【发布时间】:2009-01-2414:51:46【问题描述】:我正在使用VisualBasic9(VS2008)和TagLib。以下... 查看详情

如何使用千千静听为mp3添加专辑封面和文字信息

...打开某MP3文件,右击该文件,选择属性。  2点击专辑封面即可添加或更换专辑封面点击保存到文件再点击重新读取文件即可发现有效了  3为MP3批量添加添加封面选中播放列表的所有文件,右击点击批量文件属性注... 查看详情

如何在 Win8 C# 应用程序中设置专辑封面?

】如何在Win8C#应用程序中设置专辑封面?【英文标题】:HowcanIsetalbumartworkinaWin8C#application?【发布时间】:2013-04-1605:31:02【问题描述】:我希望能够拍摄现有照片并将其设置为专辑插图。我可以使用GetThumbnailAsync给我一个缩略图和... 查看详情

如何使用 jsmediatags 从 mp3 获取专辑封面

】如何使用jsmediatags从mp3获取专辑封面【英文标题】:howtogetalbumartfrommp3usingjsmediatags【发布时间】:2017-07-2906:14:19【问题描述】:大家好,我有一个像song.mp3这样的mp3文件,我想获取它的专辑封面和艺术家姓名,然后想在我的html... 查看详情

从 mp3 文件中获取专辑封面?

】从mp3文件中获取专辑封面?【英文标题】:Gettingalbumartworkfromanmp3file?【发布时间】:2012-01-2904:04:59【问题描述】:我想使用PHP从一个mp3文件中获取专辑封面。请您提供一些代码或向我指出一个好的库...谢谢【问题讨论】:你知... 查看详情

如何使用 ffmpeg 添加专辑封面?

】如何使用ffmpeg添加专辑封面?【英文标题】:Howtoaddalbumartwithffmpeg?【发布时间】:2013-09-1316:41:07【问题描述】:我一直无法在mp3文件中添加专辑封面。我已经对此问题进行了研究和搜索,但尚未找到解决方案。ffmpeg文档建议使... 查看详情

taglib : 如何编辑专辑艺术家?

】taglib:如何编辑专辑艺术家?【英文标题】:taglib:howtoeditAlbumArtist?【发布时间】:2013-05-1820:47:58【问题描述】:如何使用TagLib库修改MP3文件的“专辑艺术家”字段?有没有类似的东西:f.tag()->setArtist("blabla");?【问题讨论】:... 查看详情

在 mp3 元数据中使用 python 添加专辑封面

】在mp3元数据中使用python添加专辑封面【英文标题】:AddingAlbumArtusingpythoninmp3metadata【发布时间】:2010-02-2519:23:45【问题描述】:下面的代码似乎没有更新mp3文件的图片。代码:-#EditingtheMetaDatatag=eyeD3.Tag()printtag.link(\'location\')//Ret... 查看详情

如何从 MP3 ID3 标签中提取专辑封面?

】如何从MP3ID3标签中提取专辑封面?【英文标题】:HowcanIextractthealbumartfromanMP3ID3tag?【发布时间】:2013-05-2505:13:00【问题描述】:我可以使用php从我的mp3应用程序中成功获取mp3ID3标签。我留下了一个巨大的BLOB。我敢肯定这很简单... 查看详情

是否可以从 Android 中的远程 mp3 文件中检索专辑封面?

】是否可以从Android中的远程mp3文件中检索专辑封面?【英文标题】:Isitpossibletoretrievealbumartfromremotemp3fileinAndroid?【发布时间】:2013-08-0107:32:45【问题描述】:我目前正在编写一个UPnP远程控制应用程序,用于将远程MediaServer连接... 查看详情

使用 TagLib 读取 MP3 等级

】使用TagLib读取MP3等级【英文标题】:ReadMP3ratingusingTagLib【发布时间】:2012-10-0908:24:22【问题描述】:我有一个音乐应用程序,它使用TagLib库读取ID3标签。它适用于艺术家、标题、专辑、年份...但我无法读取评级。我试过这个:... 查看详情

带有 tagLib 锐库的 C# 自定义 mp3 标签

】带有tagLib锐库的C#自定义mp3标签【英文标题】:C#Custommp3tagwithtagLibsharplibrary【发布时间】:2016-06-1213:40:38【问题描述】:我正在尝试读取自定义标签并将其写入MP3文件。我在这里遵循了这段代码;addingcustomtagusingtagLibsharplibrary... 查看详情

如何在音频文件中添加艺术品,以显示在专辑封面中?

...图。那么,有可能吗?还有,如何在iOS编程中为音频文件设置专辑封面的插图?实际上,我合并了两个音频文件,并想添加将在iTune中显示的专辑封面的插图。代码如下:-(BOOL)combi 查看详情

从音频文件中获取专辑封面、歌曲名称、专辑名称和艺术家姓名

】从音频文件中获取专辑封面、歌曲名称、专辑名称和艺术家姓名【英文标题】:Gettingthealbumartwork,songname,albumnameandartistnamefromanaudiofile【发布时间】:2010-09-2514:28:08【问题描述】:如何?我需要在不使用iTunes的情况下显示它。谢... 查看详情

在 Swift 中将专辑封面添加为子视图

】在Swift中将专辑封面添加为子视图【英文标题】:AddalbumartworkassubviewinSwift【发布时间】:2015-07-2500:39:52【问题描述】:我正在使用以下代码将正在播放的图稿添加为我的应用程序中的子视图。overridefuncviewDidLoad()super.viewDidLoad()l... 查看详情

如何给flac文件写入专辑封面?200分来领吧

...器无需安装,并不会修改注册表,自动下载和显示歌词、专辑封面。手动加载封面的方法:打开你需要加载封面的Flac文件,拖动所需封面图片到歌词窗口,右键关联即可。经试验验证成功。参考资料:http://www.podez.com 参考技术B... 查看详情

在 android 11 中接收专辑封面

】在android11中接收专辑封面【英文标题】:Receivingalbumartinandroid11【发布时间】:2021-03-2918:32:28【问题描述】:作为known,ALBUM_ART在Android11中已被弃用。Google表示应该改用ContentResolver.loadThumbnail。但我完全不明白如何使用它,尤其... 查看详情

如何使用 taglib 将图片添加到 ID3 相册标签#

】如何使用taglib将图片添加到ID3相册标签#【英文标题】:HowdoyouaddapicturetotheID3Albumtagusingtaglib#【发布时间】:2019-08-0505:25:16【问题描述】:我一直在搜索互联网并尝试各种方法将picturbox图像保存到id3相册图片标签。一个示例代码... 查看详情