#include

// 保留,在读取 png 头部信息的是,每次读取到 0D 0A 读取就会产生错误,如果 0D 0A 修改为其他的数据,则数据可以正常读取,不知道为什么 ----文件打开的时候, 将读取文件的方式设置为 二进制 流文件读取就可以。

//typedef struct

//{

//    char HeadInfo[8];        // 文件头信息

//    int IhderChunkLength;    // IHDR 数据块的长度信息

//    int IhderChunkType;        // IHDR 数据块类型码 // 下面是数据块的具体数据了, 最前面两个是png 图片的宽高

//    int PngImgWidth;        // 宽

//    int PngImgHeght;        // 高

//} PNG_FILE_HEAD;

/*

* 函数说明:    读取 png 文件中,图片的宽高信息

* 参数描述:    pathName, 输入参数,文件的路径名信息

*                w, h, 输出参数,图片的宽高信息

* 返回值:        0,成功

*                -1,失败

*    备注信息:    PNG 文件头数据信息如下所示:

*

*                文件头信息:8 字节

*                IHDR 数据块的长度信息:4 字节

*                IHDR 数据块类型码 :4 字节

*                png 图片宽:4 字节

*                png 图片高:4 字节

*/

#define PNG_WH_DATA_OFFSET 16

int getPngImgSize(const char* pathName, int* w, int* h)

{

FILE* fp = NULL;

int    imgWidth= 0;

int imgHeight = 0;

if(NULL == pathName) return -1;

fp = fopen(pathName, "rb"); // 只读方式打开 (二进制方式)

if( NULL == fp )

{

return -1;

}

fseek(fp, PNG_WH_DATA_OFFSET, SEEK_SET);

fread(&imgWidth, sizeof(imgWidth), 1, fp);

fread(&imgHeight, sizeof(imgHeight), 1, fp);

fclose(fp);

if(w)

{

// 设置数据的高低位信息

*w = 0x00000000;

*w |= (imgWidth<<24)&0xff000000;

*w |= (imgWidth<< 8)&0x00ff0000;

*w |= (imgWidth>> 8)&0x0000ff00;

*w |= (imgWidth>>24)&0x000000ff;

}

if(h)

{

*h = 0x00000000;

*h |= (imgHeight<<24)&0xff000000;

*h |= (imgHeight<< 8)&0x00ff0000;

*h |= (imgHeight>> 8)&0x0000ff00;

*h |= (imgHeight>>24)&0x000000ff;

}

return 0;

}

int main(int argc, char** argv)

{

char chInput = 0;

int imgWidth = 0;

int imgHeght = 0;

printf("Read png imgae size \n");

getPngImgSize("003.png", &imgWidth, &imgHeght);

getPngImgSize("002.png", &imgWidth, &imgHeght);

getPngImgSize("001.png", &imgWidth, &imgHeght);

// test input

chInput = getchar();

return 0;

}

linux 读取png图片大小,读取 png 图片的宽高信息相关推荐

  1. jquery实现上传图片及图片大小验证、图片预览效果代码

    jquery实现上传图片及图片大小验证.图片预览效果代码 jquery实现上传图片及图片大小验证.图片预览效果代码 上传图片验证 */ function submit_upload_picture() ...

  2. 批量处理图形大小如何更改图片大小尺寸修改图片视频教程ps学习ps教程ps基础新教程

    批量处理图形大小如何更改图片大小尺寸修改图片视频教程ps学习ps教程ps基础新教程

  3. JAVA改变图片大小,将图片改为Jpg格式

    JAVA改变图片大小,将图片改为Jpg格式 package util;import javax.imageio.ImageIO; import java.awt.*; import java.awt. ...

  4. 视频直播源码,插入图片、删除图片、设置图片大小、提取图片

    视频直播源码,插入图片.删除图片.设置图片大小.提取图片 1.插入图片 Document对象有一个add_paragraph()方法插入图片,只需要传入路径或者字节流即可,实际上它也是调用段落的Run ...

  5. 图片大小自动按比例缩小图片不变形 解决方法

    图片大小自动按比例缩小图片不变形 解决方法 参考文章: (1)图片大小自动按比例缩小图片不变形 解决方法 (2)https://www.cnblogs.com/liujunchen/p/7598649 ...

  6. python 快速读取图像宽高信息

    python 快速读取图像宽高信息 1. 背景 2. 方法 2.1 仅读取图像文件头部信息 2.2 采用特定 python 包读取 1. 背景 存在100w张JPG图像,需要获取它们的宽高信息.如果用 ...

  7. XML文件转TXT,XML无图片宽高信息

    XML文件转TXT,XML无图片宽高信息 网络上有很多xml转txt的文章,不过有的xml文件不包括size信息,即图片本身的宽高,如先前提到的湛江水下目标检测大赛数据集的label文件.因此在前辈的 ...

  8. python给指定目录所有图片添加水印logo,批量生成替换文件,自适应图片大小添加到图片正中间

    首先需要安装PIL,pip install 2.x的版本安装 pip insall PIL 3.x的python版本安装 pip install pillow 实现功能步骤: 1.读取指定目录jpg或 ...

  9. css固定图片大小 vue_css3 实现图片等比例放大与缩小

    css3 实现图片等比例放大与缩小 在工作中,经常会碰到图片缩放的情况,比如服务器端返回的图片大小,可能大小不同,有的大,有的小,服务器端返回的图片大小我们不能控制的,但是在我们设计稿的时候,可能会规 ...

最新文章

  1. 自己写的小程序 deb打包
  2. 生产者,消费者,CDN
  3. python基础学习(二)注释和算术运算符
  4. 笔记本能连上WIFI网络,但是无法上网怎么办
  5. PDFMate PDF Converter Pro
  6. 算术的c语言程序设计,C 程序设计:变量与算术表达式
  7. C#判断联网状态检查电脑联网状态
  8. 以太网口差分电平_高速串行总线设计基础(八)揭秘SERDES高速面纱之CML电平标准与预加重技术...
  9. Java 死锁及解决方法
  10. Agile敏捷开发Planning Poker简介
  11. Linux宝库名人轶事栏目 | 智能化之边缘计算浅析
  12. 多组测试数据01字典树「模板」
  13. 路由器连接路由器设置方法
  14. 优秀logo设计解析_优秀logo设计作品及寓意解析,国外精品logo设计图片分享
  15. 详解Android/IOS平台下抓包工具使用以及抓取API接口
  16. 如何利用工时表来帮助项目管理做得更完善?
  17. word2vec学习+使用介绍
  18. python selenium 获取frame中的元素
  19. 分析许嵩的175首歌曲,看看大家为什么那么喜欢听他的歌
  20. Java四种引用类型

热门文章

  1. 人物 | 游戏安全“痴汉”——FairGuard CEO 陈士留创业起步史
  2. 公民身份证号码的编排规则
  3. NBMA和BMA的交换方式
  4. python求自然对数_计算自然对数的算法
  5. rsa1024 公钥c语言程序,两种方式生成RSA 公钥私钥
  6. idea去掉不想commit的文件
  7. vscode使用vetur格式化代码
  8. 充分利用计算机在教学中的作用,浅谈多媒体在教学中的作用
  9. kubeadm故障排除
  10. uniapp:版本更新(打包wgt)