图片头文件信息解析

  今天发现获取图片的宽高,并不需要把图片完全读完之后再来获取,而只需要读取文件头文件,几十个字节便可以读出文件的宽高。

  图片的文件头部存储有该图片相关信息,可以从中读取相应字段,得到尺寸、大小、格式等信息。由于无需载入整张图片,故而速度较快。当图片较大时,优势更加明显。

  现在把今天发现的东西总结一下,所有数据都是用的QQ截图。特征码的位置可能和实际不同,目前发现jpg的宽高特征码不确定。如果以后发现特征码规律会回来修改这篇博客。

  所有数据都是QQ截图出来的,并且做了多张比较,以下例子只是其中之一。

bmp(771*434):

   bmp

  可以看出width低位:0x12,高位:0x13。height低位:0x16,高位0x17。

PNG(906*440)

  png

  width低位:0x13,高位0x12。height低位:0x17,高位0x16。和bmp刚好相反

GIF(976*402)

  gif

  width低位:0x07,高位0x06。height低位:0x09,高位0x08。

JPG(800*525)

  jpg

   width低位:0xA5,高位0xA6。height低位:0xA3,高位0xA4。

  再次强调,以上均为QQ截图的格式,以上特征码可能和实际图片不一致,已知jpg格式的图片特征码不一致,在使用特征码时,最好先检查一下是否一致。

补充:以上4种图片类型的特征码

1.BMP
-文件头标识 (2 bytes) 42 4D
2.PNG
- 文件头标识 (8 bytes) 89 50 4E 47 0D 0A 1A 0A
3.GIF
- 文件头标识 (6 bytes) 47 49 46 38 39(37) 61
4.JPEG/JPG
- 文件头标识 (2 bytes): FF, D8 (SOI) (JPEG 文件标识)
- 文件结束标识 (2 bytes): FF, D9 (EOI)

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC 是 Microsoft Foundation Class 的缩写,是一种基于 Windows 操作系统的 C++ 类库,用于开发 Windows 应用程序。如果想要用 MFC 解析 PDF 并生成图片,则需要使用第三方库。 以下是使用 MFC 和第三方库解析 PDF 并生成图片的步骤: 1. 下载并安装 PDF 解析库,例如 Adobe Acrobat SDK 或 Foxit PDF SDK。 2. 在 MFC 应用程序中添加 PDF 解析库的头文件和库文件。 3. 加载 PDF 文件,可以使用 PDF 解析库提供的接口或 MFC 的 CFile 类。 4. 通过 PDF 解析库提供的接口或 MFC 的 CDC 类创建位图和绘制 PDF 页面。 5. 将位图保存为图片文件,可以使用 MFC 的 CImage 类或 Windows API。 下面是一个使用 Adobe Acrobat SDK 的示例代码: ``` // 加载 PDF 文件 CAcroApp app; app.Initialize(); CAcroAVDoc avDoc; avDoc.Open("example.pdf", ""); CAcroPDDoc pdDoc = avDoc.GetPDDoc(); // 创建位图 CAcroRect rect(0, 0, 612, 792); // 页面大小 HBITMAP hBitmap = CreateBitmap(rect.right, rect.bottom, 1, 32, NULL); // 绘制 PDF 页面 CDC dc; dc.CreateCompatibleDC(NULL); HDC hdc = dc.GetSafeHdc(); HBITMAP hOldBitmap = (HBITMAP)SelectObject(hdc, hBitmap); pdDoc.DrawPage(hdc, 0, rect); // 保存为图片文件 CImage image; image.Attach(hBitmap); image.Save("example.png", Gdiplus::ImageFormatPNG); // 清理资源 SelectObject(hdc, hOldBitmap); DeleteDC(hdc); DeleteObject(hBitmap); pdDoc.Close(); avDoc.Close(); app.Exit(); ``` 需要注意的是,PDF 文件可能包含多个页面,需要循环遍历并绘制每一页。此外,不同的 PDF 解析库提供的接口和使用方法可能不同,需要按照具体的库文档进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值