从MP3ID3v2标签读出附加图片(专辑封面)

您所在的位置:网站首页 专辑封面多大尺寸好看一点 从MP3ID3v2标签读出附加图片(专辑封面)

从MP3ID3v2标签读出附加图片(专辑封面)

#从MP3ID3v2标签读出附加图片(专辑封面)| 来源: 网络整理| 查看: 265

ID3v2(简单介绍)

标签头:

‘ID3’                             3字节

版本号                         1字节

副版本号                     1字节

标志                            1字节

标签大小                     4字节

帧头:

帧标识                         4字节

帧内容大小                  4字节

标志                             2字节

具体说明找别的文章看吧,这不是本文重点

APIC帧(APIC=Attached picture,即附加图片)

帧内容与图片之间还间隔有一小段数据,有的文章对此介绍的很模糊,有的干脆直接认为它有特定的字节数,但实际上并不是,由下面的三张图可看出

这一小段的格式如下:

(注,十六进制用$表示,xx代表不确定字节,具体数值代表确定字节)

(帧标识为APIC)

文本编码                          $xx

MIME 类型                       $00(如'image/bmp')

图片类型                          $xx

描述                                 $00 (00)

文本编码表示描述字符串使用的编码方式,定义如下:

$00  ISO-8859-1,即Latin-1(拉丁语-1),兼容ASCII,GB2312也兼容Latin-1

$01  UTF-16LE(若为ID3v2.3,则此值代表UTF-16,具体大小端根据BOM区分)

$02  UTF-16BE(仅ID3v2.4)

$03  UTF-8(仅ID3v2.4)

MIME类型字符串为ASCII码,以NULL结尾

图片类型定义如下:

$00  其他

$01  32x32 像素“文件图标”(仅PNG)

$02  其他文件图标

$03  封面(正面)

$04  封面(背面)

$05  宣传单页

$06  媒体(例如 CD 的标签面)

$07  首席艺术家/首席表演者/独奏者

$08  艺术家/表演者

$09  指挥者

$0A  乐队/管弦乐队

$0B  作曲家

$0C  作词/文本作者

$0D  录制地点

$0E  录音期间

$0F  演出期间

$10  电影/视频截图

$11  艳鱼图

$12  插图

$13  乐队/艺术家Logo

$14  出版商/工作室Logo

描述字符串以NULL结尾(\0个数由文本编码决定)

代码 ......... else if (memcmp(pUnitHeader->ID, "APIC", 4) == 0)//图片 { BYTE* pImageData = (BYTE*)pUnitHeader + sizeof(ID3v2_UnitHeader);//指向帧内容 BYTE byEncodeingType = *pImageData;//读文本编码 int cbSize, cbImageSize = dwUnitSize;//dwUintSize为帧内容总大小,下面会将多余部分减掉 pImageData++; cbImageSize--;//跳过文本编码 cbSize = lstrlenA((LPCSTR)pImageData);//取MIME字符串长度 pImageData += cbSize; cbImageSize -= cbSize;//跳过MIME类型字符串 pImageData += 2; cbImageSize -= 2;//跳过MIME结尾NULL和图片类型 if (byEncodeingType == 0 || byEncodeingType == 3)//ISO-8859-1或UTF-8 cbSize = lstrlenA((LPCSTR)pImageData) + 1;//取描述文本字符串长度 else//UTF-16LE或UTF-16BE cbSize = lstrlenW((LPCWSTR)pImageData) * sizeof(WCHAR) + 2;//取描述文本字符串长度 pImageData += cbSize; cbImageSize -= cbSize;//跳过描述字符串和结尾NULL //现在pImageData指向图片数据,cbImageSize为图片数据长度 ......... } .........

 有什么错误请告诉我



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3