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

Posted

技术标签:

【中文标题】使用 TagLib 从 MP3 文件中提取专辑封面 - 有没有更好的方法编写此代码?【英文标题】:Extracting Album art from MP3 files using TagLib - Is there a better way write this code? 【发布时间】:2009-01-24 14:51:46 【问题描述】:

我正在使用 Visual Basic 9 (VS2008) 和 TagLib。

以下代码从 MP3 文件中提取专辑封面并将其显示在 PictureBox 中。

有没有更好的方法来编写这段代码?

 Dim file As TagLib.File = TagLib.File.Create(filepath)

 If file.Tag.Pictures.Length >= 1 Then
    Dim bin As Byte() = DirectCast(file.Tag.Pictures(0).Data.Data, Byte())
    PreviewPictureBox.Image = Image.FromStream(New MemoryStream(bin)).GetThumbnailImage(100, 100, Nothing, System.IntPtr.Zero)
 End If

【问题讨论】:

乍一看,我觉得代码没问题。你有问题吗? 它工作正常。我只是想知道是否有更快的方法来做到这一点。 【参考方案1】:

乍一看,我觉得没问题。

您可以添加一些错误处理,例如TagLib.File.Create() 抛出错误或返回“Nothing”。此外,如果 Tag 属性由于某种原因为空,如果您尝试访问“.Pictures”,则会引发错误。

【讨论】:

【参考方案2】:

我对 TagLib 不是很熟悉,但似乎没有更好的方法来编写它。我能给出的唯一建议是您可以通过利用类型推断来减少代码量。如果“选项推断”当前处于启用状态,则这两个变量声明不需要显式类型。这实际上并没有改变代码的质量,只是减少了代码的数量。

例子

 Option Infer On
 ...
 Dim file = TagLib.File.Create(filepath)

 If file.Tag.Pictures.Length >= 1 Then
    Dim bin = DirectCast(file.Tag.Pictures(0).Data.Data, Byte())
    PreviewPictureBox.Image = Image.FromStream(New MemoryStream(bin)).GetThumbnailImage(100, 100, Nothing, System.IntPtr.Zero)
 End If

【讨论】:

以上是关于使用 TagLib 从 MP3 文件中提取专辑封面 - 有没有更好的方法编写此代码?的主要内容,如果未能解决你的问题,请参考以下文章

C# TagLib 为 Mp3 设置专辑封面

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

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

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

使用 taglib# 提取 mp3 标签

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