从MP3ID3v2标签读出附加图片(专辑封面) |
您所在的位置:网站首页 › 专辑封面多大尺寸好看一点 › 从MP3ID3v2标签读出附加图片(专辑封面) |
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 |