Differenze tra le versioni di "Estrarre l'immagine contenuta in un file MP3 con le sole risorse di Gambas"

Da Gambas-it.org - Wikipedia.
 
(8 versioni intermedie di uno stesso utente non sono mostrate)
Riga 2: Riga 2:
  
 
Per estrarre i dati dell'immagine "JPEG", contenuti nel file MP3, è necessario individuare all'interno del file il dato iniziale e quello finale dell'immagine, ricordando che i dati di un'immagine "JPG" iniziano con i seguenti tre valori esadecimali "FF D8 FF E0", e terminano con i due valori esadecimali "FF D9".
 
Per estrarre i dati dell'immagine "JPEG", contenuti nel file MP3, è necessario individuare all'interno del file il dato iniziale e quello finale dell'immagine, ricordando che i dati di un'immagine "JPG" iniziano con i seguenti tre valori esadecimali "FF D8 FF E0", e terminano con i due valori esadecimali "FF D9".
<BR>Invece per estrarre i dati dell'immagine di formato "PNG", bisognerà individuare l'iniziale numero magico, formato dal numero della versione del formato e dalle tre lettere "PNG", e almeno gli ultimi quattro byte terminali: &82 &60 &42 &AE.
+
<BR>Invece per estrarre i dati dell'immagine di formato "PNG", bisognerà individuare l'iniziale numero magico, formato dal numero della versione del formato seguito dalle tre lettere "PNG", e almeno gli ultimi quattro byte terminali: &82 &60 &42 &AE.
  
Mostriamo un semplice esempio pratico:
+
Mostriamo un semplice esempio pratico, nel quale si estrarrà l'immagine presente in un file mp3:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
   Dim mp3, est As String
 
   Dim mp3, est As String
 
   Dim ini, fin As Integer
 
   Dim ini, fin As Integer
 
    
 
    
   mp3 = File.Load("<FONT Color=gray>''/percorso/del/file.mp3''</font>")
+
   mp3 = File.Load("<FONT Color=darkgreen>''/percorso/del/file.mp3''</font>")
 
 
  If InStr(mp3, "image/") == 0 Then
 
    Message.Warning("Immagine non presente nel file mp3 !")
 
    Me.Close
 
  Endif
 
 
    
 
    
 +
  If InStr(mp3, "image/") == 0 Then Error.Raise("Immagine non presente nel file mp3 !")
 +
 
   Select Case Mid(mp3, InStr(mp3, "image/"), 10)
 
   Select Case Mid(mp3, InStr(mp3, "image/"), 10)
 
     Case "image/jpeg"
 
     Case "image/jpeg"
 
       ini = InStr(mp3, "image/jpeg")
 
       ini = InStr(mp3, "image/jpeg")
 
  <FONT Color=gray>' ''Individua l'inizio dei dati dell'immagine JPEG:''</font>:
 
  <FONT Color=gray>' ''Individua l'inizio dei dati dell'immagine JPEG:''</font>:
       ini = InStr(mp3, Chr(&FF) & Chr(&D8) & Chr(&FF) & Chr(&E0))
+
       ini = InStr(mp3, Chr(&FF) & Chr(&D8) & Chr(&FF) & Chr(&E0), ini)
 
  <FONT Color=gray>' ''Individua la fine dell'immagine JPEG:''</font>:
 
  <FONT Color=gray>' ''Individua la fine dell'immagine JPEG:''</font>:
 
       fin = InStr(mp3, Chr(&FF) & Chr(&D9), ini) + SizeOf(gb.Short)
 
       fin = InStr(mp3, Chr(&FF) & Chr(&D9), ini) + SizeOf(gb.Short)
Riga 28: Riga 25:
 
       ini = InStr(mp3, "image/png")
 
       ini = InStr(mp3, "image/png")
 
  <FONT Color=gray>' ''Individua l'inizio dei dati dell'immagine PNG:''</font>:
 
  <FONT Color=gray>' ''Individua l'inizio dei dati dell'immagine PNG:''</font>:
       ini = InStr(mp3, "PNG") - 1
+
       ini = InStr(mp3, "PNG", ini) - 1
 
  <FONT Color=gray>' ''Individua la fine dell'immagine PNG:''</font>:
 
  <FONT Color=gray>' ''Individua la fine dell'immagine PNG:''</font>:
 
       fin = InStr(mp3, Chr(&AE) & Chr(&42) & Chr(&60) & Chr(&82), ini) + SizeOf(gb.Integer)
 
       fin = InStr(mp3, Chr(&AE) & Chr(&42) & Chr(&60) & Chr(&82), ini) + SizeOf(gb.Integer)
Riga 34: Riga 31:
 
   End Select
 
   End Select
 
   
 
   
  mp3 = Mid(mp3, ini, fin - ini)
+
  <FONT Color=gray>' ''Salva i dati estratti in un file immagine coerente:''</font>:
+
   File.Save("/tmp/immagine" & est, Mid(mp3, ini, fin - ini))
  <FONT Color=gray>' ''Salva i dati estratti in un file immagine JPG indipendente:''</font>:
 
   File.Save("/tmp/immagine" & est, Mid(s, ini, (fin + 1) - (ini - 1)))
 
 
    
 
    
  '''End'''
+
  End
  
Un'altra modalità può anche essere:
+
Un'altra modalità può essere:
 
  Private im As Image
 
  Private im As Image
 
  Private PictureBox1 As PictureBox
 
  Private PictureBox1 As PictureBox
 
   
 
   
 
   
 
   
  '''Public''' Sub _new()
+
  Public Sub _new()
 
   
 
   
 
   Dim i, t As Integer
 
   Dim i, t As Integer
 
   Dim mp3 As String
 
   Dim mp3 As String
 
    
 
    
   mp3 = File.Load("<FONT Color=gray>''/percorso/del/file.mp3''</font>")
+
   mp3 = File.Load("<FONT Color=darkgreen>''/percorso/del/file.mp3''</font>")
 
   
 
   
 
   If InStr(mp3, "image/") == 0 Then  
 
   If InStr(mp3, "image/") == 0 Then  
Riga 62: Riga 57:
 
       i = InStr(mp3, "image/jpeg")
 
       i = InStr(mp3, "image/jpeg")
 
       i = InStr(mp3, MkShort(&D8FF), i)  
 
       i = InStr(mp3, MkShort(&D8FF), i)  
       t = InStr(mp3, MkShort(&D9FF)) + SizeOf(gb.Short)
+
       t = InStr(mp3, MkShort(&D9FF), i) + SizeOf(gb.Short)
 
     Case "image/png\x00"
 
     Case "image/png\x00"
 
       i = InStr(mp3, "image/png")
 
       i = InStr(mp3, "image/png")
 
       i = InStr(mp3, "PNG", i) - 1
 
       i = InStr(mp3, "PNG", i) - 1
       t = InStr(mp3, MkInteger(&826042AE)) + SizeOf(gb.Integer)
+
       t = InStr(mp3, MkInteger(&826042AE), i) + SizeOf(gb.Integer)
 
   End Select
 
   End Select
 
   
 
   
   mp3 = Mid(mp3, i, t - i)
+
   im = Image.FromString(Mid(mp3, i, t - i))
 
   
 
   
  im = Image.FromString(mp3)
+
End
 
   
 
   
'''End'''
 
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
 
   With Me
 
   With Me
Riga 91: Riga 85:
 
   End With
 
   End With
 
   
 
   
  '''End'''
+
  End
  
  

Versione attuale delle 17:19, 14 giu 2024

I file MP3 possono contenere i dati di una immagine (di tipo JPEG o PNG) che viene mostrata, come thumbnail, sul desktop al posto dell'icona standard collegata al file audio MP3.

Per estrarre i dati dell'immagine "JPEG", contenuti nel file MP3, è necessario individuare all'interno del file il dato iniziale e quello finale dell'immagine, ricordando che i dati di un'immagine "JPG" iniziano con i seguenti tre valori esadecimali "FF D8 FF E0", e terminano con i due valori esadecimali "FF D9".
Invece per estrarre i dati dell'immagine di formato "PNG", bisognerà individuare l'iniziale numero magico, formato dal numero della versione del formato seguito dalle tre lettere "PNG", e almeno gli ultimi quattro byte terminali: &82 &60 &42 &AE.

Mostriamo un semplice esempio pratico, nel quale si estrarrà l'immagine presente in un file mp3:

Public Sub Main()
 
 Dim mp3, est As String
 Dim ini, fin As Integer
 
 mp3 = File.Load("/percorso/del/file.mp3")
 
 If InStr(mp3, "image/") == 0 Then Error.Raise("Immagine non presente nel file mp3 !")

 Select Case Mid(mp3, InStr(mp3, "image/"), 10)
   Case "image/jpeg"
     ini = InStr(mp3, "image/jpeg")
' Individua l'inizio dei dati dell'immagine JPEG::
     ini = InStr(mp3, Chr(&FF) & Chr(&D8) & Chr(&FF) & Chr(&E0), ini)
' Individua la fine dell'immagine JPEG::
     fin = InStr(mp3, Chr(&FF) & Chr(&D9), ini) + SizeOf(gb.Short)
     est = ".jpg"
   Case "image/png\x00"
     ini = InStr(mp3, "image/png")
' Individua l'inizio dei dati dell'immagine PNG::
     ini = InStr(mp3, "PNG", ini) - 1
' Individua la fine dell'immagine PNG::
     fin = InStr(mp3, Chr(&AE) & Chr(&42) & Chr(&60) & Chr(&82), ini) + SizeOf(gb.Integer)
     est = ".png"
 End Select

' Salva i dati estratti in un file immagine coerente::
 File.Save("/tmp/immagine" & est, Mid(mp3, ini, fin - ini))
  
End

Un'altra modalità può essere:

Private im As Image
Private PictureBox1 As PictureBox


Public Sub _new()

 Dim i, t As Integer
 Dim mp3 As String
 
 mp3 = File.Load("/percorso/del/file.mp3")

 If InStr(mp3, "image/") == 0 Then 
   Message.Warning("Immagine non presente nel file mp3 !")
   Me.Close
 Endif

 Select Case Mid(mp3, InStr(mp3, "image/"), 10)
   Case "image/jpeg"
     i = InStr(mp3, "image/jpeg")
     i = InStr(mp3, MkShort(&D8FF), i) 
     t = InStr(mp3, MkShort(&D9FF), i) + SizeOf(gb.Short)
   Case "image/png\x00"
     i = InStr(mp3, "image/png")
     i = InStr(mp3, "PNG", i) - 1
     t = InStr(mp3, MkInteger(&826042AE), i) + SizeOf(gb.Integer)
 End Select

 im = Image.FromString(Mid(mp3, i, t - i))

End


Public Sub Form_Open()

 With Me
   .W = im.W
   .H = im.H
   .Center
 End With

 With PictureBox1 = New PictureBox(Me)
   .X = 0
   .Y = 0
   .W = Me.W
   .H = Me.H
   .Image = im
 End With

End


Riferimenti