Differenze tra le versioni di "Estrarre l'immagine contenuta in un file MP3 con le sole risorse di Gambas"
(Creata pagina con "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 M...") |
|||
(9 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 | + | <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() | |
− | Dim | + | Dim mp3, est As String |
Dim ini, fin As Integer | Dim ini, fin As Integer | ||
− | + | mp3 = File.Load("<FONT Color=darkgreen>''/percorso/del/file.mp3''</font>") | |
+ | 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") | ||
<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) | |
− | |||
<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) | |
− | + | est = ".jpg" | |
− | <FONT Color=gray>' ''Salva i dati estratti in un file immagine | + | Case "image/png\x00" |
− | File.Save("/tmp/immagine | + | ini = InStr(mp3, "image/png") |
+ | <FONT Color=gray>' ''Individua l'inizio dei dati dell'immagine PNG:''</font>: | ||
+ | ini = InStr(mp3, "PNG", ini) - 1 | ||
+ | <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) | ||
+ | est = ".png" | ||
+ | End Select | ||
+ | |||
+ | <FONT Color=gray>' ''Salva i dati estratti in un file immagine coerente:''</font>: | ||
+ | File.Save("/tmp/immagine" & est, Mid(mp3, ini, fin - ini)) | ||
− | + | End | |
− | Un'altra modalità può | + | Un'altra modalità può essere: |
Private im As Image | Private im As Image | ||
Private PictureBox1 As PictureBox | Private PictureBox1 As PictureBox | ||
− | + | 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= | + | mp3 = File.Load("<FONT Color=darkgreen>''/percorso/del/file.mp3''</font>") |
If InStr(mp3, "image/") == 0 Then | If InStr(mp3, "image/") == 0 Then | ||
Riga 44: | 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 | ||
− | + | im = Image.FromString(Mid(mp3, i, t - i)) | |
− | + | End | |
− | |||
− | + | Public Sub Form_Open() | |
With Me | With Me | ||
Riga 73: | Riga 85: | ||
End With | End With | ||
− | + | 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