Exemple de code permettant de récupérer des images de CD sur google et de les insérer dans les informations du TAG MP3.
J'ai créé ce code car des applications comme MP3TAG ne permettent pas de traiter des MP3 en rafale.
Ce code utilise des ressources open :
- la class read/write TAG MP3.NET :
https://github.com/mono/taglib-sharp 'taglib-sharp-2.0.4.0-windows
- l'API google GimageSearchClient :
http://code.google.com/p/google-api-for-dotnet/ 'GoogleSearchAPI_0.3.1
- ResizeImage a été récupéré sur internet
Source / Exemple :
Imports Google.API.Search
Imports TagLib
Module MP3CoverGoogle
'Objet : Met à jour automatiquement l'image du CD dans le TAG MP3. La recherche prend la première image proposé par google.
'ATTENTION : Pour que la recherche donne de bon résultat il faut que l'artiste et le titre du MP3 soit déja
'renseigné dans le fichier. Utiliser http://www.mp3tag.de/en/ pour éditer les TAG.
'Date de création 15 aout 2011
'Version 1.0
'Auteur : Stéphane PINEAU
'Utilise la class read/write TAG MP3.NET : https://github.com/mono/taglib-sharp 'taglib-sharp-2.0.4.0-windows
'Utilise l'API google GimageSearchClient : http://code.google.com/p/google-api-for-dotnet/ 'GoogleSearchAPI_0.3.1
'Pas de gestion des erreurs
Public Function MP3CoverInsertImage(ByVal strFileMP3 As String, ByVal blnOverRight As Boolean) As Long
Dim file As TagLib.File
Dim strRequete As String
Dim gimageSearch As New Google.API.Search.GimageSearchClient("http://www.google.fr")
Dim results As IList(Of Google.API.Search.IImageResult)
'On ajoute les mots clefs standards
strRequete = " cd "
strRequete = strRequete & " cover "
'Chargement des TAG du MP3 dans la class TagLib
file = TagLib.File.Create(strFileMP3)
If blnOverRight Or file.Tag.Pictures.Length = 0 Then
'On vérifie si il y a déja une image dans le MP3
If file.Tag.Artists.Length > 0 Then
strRequete = strRequete & " " & file.Tag.Artists(0).ToString & " " & file.Tag.Title
Else
strRequete = strRequete & " " & file.Tag.Title
End If
'On lance la recherche sur google
results = gimageSearch.Search(strRequete, 5, ImageSize.All, "", "", "")
'On prend le premier résultat, si une erreur de téléchargement est observée
'alors on prendra la deuxième.
For Each item As Google.API.Search.IImageResult In results
If MP3CoverInsertImageFromUrl(strFileMP3, item.Url, blnOverRight) = 0 Then
Exit For
End If
Next
results = Nothing
gimageSearch = Nothing
End If
'Pas de gestion des erreurs
MP3CoverInsertImage = 0
End Function
Public Function MP3CoverInsertImageFromUrl(ByVal strFileMP3 As String, ByVal strURLImage As String, ByVal blnOverRight As Boolean) As Long
Dim file As TagLib.File
Dim pictures(0) As Picture
Dim picture As New Picture
Dim objPictureBox As New PictureBox
Dim strJPGFile As String
On Error Resume Next
Err.Clear()
'On télécharge l'image de l'URL
objPictureBox.ImageLocation = strURLImage
objPictureBox.Load()
If Err.Number = 0 Then
'On récupère les informations de TAG du MP3
file = TagLib.File.Create(strFileMP3)
'On vérifie si une image est déja présente
If blnOverRight Or file.Tag.Pictures.Length = 0 Then
'Génération d'un fichier temporaire de l'image a insérer dans le MP3
strJPGFile = My.Computer.FileSystem.GetParentPath(My.Computer.FileSystem.GetTempFileName()) & "\" & file.Tag.Title & ".jpg"
If My.Computer.FileSystem.FileExists(strJPGFile) Then My.Computer.FileSystem.DeleteFile(strJPGFile)
'On redimmensionne l'image JPG et on la sauve
If ResizeImage(objPictureBox, 300, 300, strJPGFile) = 0 Then
picture = New Picture(strJPGFile)
picture.Description = file.Tag.Title
pictures(0) = picture
file.Tag.Pictures = pictures
Err.Clear()
file.Save()
My.Computer.FileSystem.DeleteFile(strJPGFile)
pictures(0) = Nothing
picture = Nothing
file.Dispose()
file = Nothing
End If
End If
Else
'Erreur de chargement de l'image
MP3CoverInsertImageFromUrl = 1
End If
objPictureBox.Dispose()
objPictureBox = Nothing
End Function
Private Function ResizeImage(ByVal objPicture As PictureBox, ByVal x As Int32, ByVal y As Int32, ByVal strNewFile As String) As Long
'following code resizes picture to fit
Dim bm As New Bitmap(objPicture.Image)
Dim width As Integer = Val(x) 'image width.
Dim height As Integer = Val(y) 'image height
Dim thumb As New Bitmap(width, height)
Dim g As Graphics = Graphics.FromImage(thumb)
g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.DrawImage(bm, New Rectangle(0, 0, width, height), New Rectangle(0, 0, bm.Width, _
bm.Height), GraphicsUnit.Pixel)
g.Dispose()
'image path. better to make this dynamic. I am hardcoding a path just for example sake
thumb.Save(strNewFile, _
System.Drawing.Imaging.ImageFormat.Jpeg) 'can use any image format
bm.Dispose()
thumb.Dispose()
End Function
End Module
Conclusion :
Cette application peut être très utile. Je vous conseille de l'utiliser avec le produit MP3TAG (
http://www.mp3tag.de/en/) pour gérer votre base de fichier MP3.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.