89 50 4E 47 0D 0A 1A 0A,IHDR数据块的长度为13个字节,格式如下:| 域的名称 | 字节数 | 说明 |
|---|---|---|
| Width | 4 bytes | 宽度 |
| Height | 4 bytes | 高度 |
| Bit depth | 1 bytes | 图像深度 |
| ColorType | 1 bytes | 颜色类型 |
| Compression method | 1 bytes | 压缩方法 |
| Filter method | 1 bytes | 滤波器方法 |
| Interlace method | 1 bytes | 隔行扫描方法 |
开始编码,如下所示:
const fs = require('fs');
const path = require('path');const argvs = process.argv.slice(2);
if(argvs.length<=0){
console.error('请输入图片:png.js img1 img2 ...');
process.exit(-1);
}
argvs.forEach((img,idx,arr)=>{
var stat = fs.statSync(img);
fs.open(img,'r',(err,fd)=>{
if(err) throw err;
var buff = Buffer.alloc(stat.size);
fs.read(fd,buff,0,stat.size,0,(err, bytesRead, buffer)=>{
if(err) throw err;
fs.close(fd,()=>{});
getImgDimension(buff,(err,dimension)=>{
if(err) throw err;
console.log(`${img}的尺寸为:${dimension.width}x${dimension.height}`);
});
});
});
});
function getImgDimension(buff,cb){
if((buff.toString('utf8',1,8) === 'PNGrnx1an') && (buff.toString('utf8',12,16) === 'IHDR')){
return cb(null,{
width:buff.readUInt32BE(16),
height:buff.readUInt32BE(20)
}),!0;
}else{
return cb(new Error('不是PNG图片'),{}),!1;
}
}
执行结果如下:
E:developmentdocumentnodejsdemo>node png.js 20160824083157.png 下载.png
20160824083157.png的尺寸为:195×195
下载.png的尺寸为:720×600









