zoukankan      html  css  js  c++  java
  • 常见图片格式分析-bmp,png

    一、bmp图片

    ①   单色位图:每个像素最多可以表示2种颜色,只需要使用长度为1的二进制位来表示,因此每个像素占1/8byte

    ②   16色位图:每个像素最多可以表示16种颜色,只需要长度为4(2^4=16)的二进制表示,每个像素占1/2byte

    ③   256色位图:每个像素最多表示256种颜色,需要长度为8(2^8=256)的二进制表示,每个像素占1byte

    ④   24位位图:即RGB三原色位图,每个像素占24位,3个byte

             ps:一字节(1byte)=8位(8bit)

             图形的大小 = 图片的总像素*每个像素的大小, 图片的总像素 = 图片长*高

    bmp图片格式:

    ①   位图文件头bmfh(占14个字节):

             数据结构如下:

             typedef struct tagBITMAPFILEHEADER {

             WORD bfType; //类型名,字符串“BM”,占2个字节,

             DWORD bfSize; //文件大小,占4个字节

             WORD bfReserved1; //保留字,占2个字节

             WORD bfReserved2; //保留字,占2个字节

             DWORD bfOffBits; //实际位图数据的偏移字节数,即前三个部分长度之和,占4个字节

             } BITMAPFILEHEADER;

     

    ②   位图信息头bmih(占40个字节)

             typedef struct tagBITMAPINFOHEADER{

             DWORD biSize; //指定此结构体的长度,0x28

             LONG biWidth; //位图宽

             LONG biHeight; //位图高.为正,表示从下往上存储,左下角是起点。为负,表示从上往下储存,左上角是起点

             WORD biPlanes; //平面数,为1

             WORD biBitCount //采用颜色位数,可以是1,2,4,8,16,24,32

             DWORD biCompression; //压缩方式,可以是0,1,2,其中0表示不压缩

             DWORD biSizeImage; //实际位图数据占用的字节数

             LONG biXPelsPerMeter; //X方向分辨率

             LONG biYPelsPerMeter; //Y方向分辨率

             DWORD biClrUsed; //使用的颜色数,如果为0,则表示默认值(2^颜色位数)

             DWORD biClrImportant; //重要颜色数,如果为0,则表示所有颜色都是重要的

             } BITMAPINFOHEADER;

     

    ③   彩色表aColors

             单色位图彩色表占8字节

             16色位图彩色表占64字节

             256色位图彩色表占1024字节

    二、png图片

             png图片格式:由8个字节的PNG文件署名和数据块组成

             png文件署名域:89 50 4e 47 0d 0a 1a 0a (固定)

             IHDR数据块:

                       00 00 00 0d(说明IHDR头块长度为13)

                       49 48 44 52(IHDR的hex值)

                       00 00 00 64(图像的宽,这里为100像素)

                       00 00 00 4f(图像的高,这里为79像素)

                      08 表示色深 02 表示颜色类型 00 预留 00 预留 00 非隔行扫描

                       92 eb f7 f6(CRC校验)

    ※  这里需要注意的是图像的宽、高数据,ctf题目经常将修改宽高后的图片作为题目来隐藏信息

    最后得有个IEND数据块,通常值为 00 00 00 00 49 45 4E 44 AE 42 60 82

    在IEND块后面添加任何的字符都对文件的打开造成不了影响,那我们就可以在这里藏一些数据了

    参考资料:1.利用文件头标识判断文件类型:https://blog.mythsman.com/post/5d301940976abc05b345469f/

    2.PNG文件格式详解:https://blog.mythsman.com/post/5d2d62b4a2005d74040ef7eb/

    3.PNG文件结构分析与加密解密原理:https://www.cnblogs.com/amws/archive/2013/09/24/3336536.html

    4.https://blog.csdn.net/u012611878/article/details/52215985

  • 相关阅读:
    apache开启.htaccess及.htaccess的使用方法
    如何解决PHP startup: Unable to load dynamic library './php_mysql.dll 找不到指定的模块
    html判断IE版本
    php.ini 配置详解
    检测apache是否支持htaccess文件
    MySql my.ini 中文详细说明
    "安装SQL2005时出现“以前的某个程序安装在计算机上创建挂起文件操作,运行安装程序之前必须重新启动计算机
    iOS开发笔记-两种单例模式的写法
    SQL 2005此计算机上已经安装了同名实例
    win7(windows 7)系统下安装SQL2005(SQL Server 2005)图文教程
  • 原文地址:https://www.cnblogs.com/robin-oneway/p/13932982.html
Copyright © 2011-2022 走看看