内嵌图片"/>
java获取mp3内嵌图片
mp3封面图片的嵌入与显示的代码
现在的智能手机播放器大多可以显示mp3中的封面图片,我们自编的播放器也应与时俱进,跟上潮流,能嵌能显,所以笔者研究了一下这个问题,写出代码,现贴出来与大家共享,对mp3数据结构不熟悉的请先参阅笔者的旧贴《MP3文件的数据结构以及为mp3内嵌歌词的代码》一文。
先看一下嵌入了封面图片的mp3的部分数据:
--------------------------------------------------------------------------
0000: 49 44 33 03 00 00 00 40 01 7A 41 50 49 43 0001 ID3....@.zAPIC..
0010: 00 12 00 00 00 69 6D 61 67 65 2F 6A 70 65 6700 .....image/jpeg.
0020: 03 00 FF D8 FF E0 00 10 4A 46 49 46 00 01 0100 ...?...JFIF....
---------------------------------------------------------------------------
可以看到,封面图片的数据是保存在ID3V2的“APIC”标签帧下的,在这首mp3中,从0022字节起,就是图片的数据,只要把图片的全部数据原封不动地复制到这里就行了。这首mp3的封面图片格式是jpg,其实可以是任何图片格式,只要你播放器上的图片框能显示就行。
一、显示封面图片的代码。
Private Declare Sub CopyMemory Lib "kernel32" Alias"RtlMoveMemory" (Destination As Any, Source As Any, ByVal picLen AsLong)
Private Sub 显示mp3封面图片()
Dim OpenName As String, SaveName As String
Dim ID3v As String * 3, L1 As Byte, L2 As Byte, L3 As Byte
Dim ID3V2Info() As Byte, tem() As Byte
Dim picLen As Long, ID3Len As Long, Place As Long, p As Long, annexAs String
OpenName = "(全路径mp3文件名)"
Open OpenName For Binary As #1
Get #1, , ID3v
If ID3v <> "ID3" Then Close #1: Exit Sub
Get #1, 8, L1
Get #1, , L2
Get #1, , L3
ID3Len = L1
ID3Len = ID3Len * &H4000 L2 * &H80 L3
ReDim ID3V2Info(ID3Len - 1)
Get #1, , ID3V2Info
Close #1
tem = StrConv("APIC", vbFromUnicode)
p = InStrB(ID3V2Info, tem): If p = 0 Then Exit Sub '如果没有图片退出
picLen = CLng(ID3V2Info(p 4)) * 65536 CLng(ID3V2Info(p 5)) *256 ID3V2Info(p 6)
tem = StrConv("imag", vbFromUnicode)
p = InStrB(p, ID3V2Info, tem): If p = 0 Then Exit Sub
CopyMemory tem(0), ID3V2Info(p 5), 4 '获取图片格式
annex = Replace(StrConv(tem, vbUnicode), Chr(0), "")
Place = p IIf(Len(annex) = 4, 12, 11)
picLen = picLen - IIf(Len(annex) = 4, 14, 13)
ReDim tem(picLen - 1)
更多推荐
java获取mp3内嵌图片
发布评论