JS 解析 png 图片的分辨率(宽高)

创建一个文件

sh 复制代码
touch image-size.cjs

然后写入下面内容:

js 复制代码
const fs = require('fs');
const path = require('path');

// PNG文件头结构:
// 前8字节:文件签名
// 第12-16字节:宽度(4字节大端)
// 第16-20字节:高度(4字节大端)
function getPNGDimensions(filePath) {
  try {
    // 读取文件前24字节
    const data = fs.readFileSync(filePath, { length: 24 });

    // 验证PNG文件签名
    const signature = data.toString('hex', 0, 8);
    if (signature !== '89504e470d0a1a0a') {
      throw new Error('不是有效的PNG文件');
    }

    // 提取宽度和高度(大端序)
    const width = data.readUInt32BE(16);
    const height = data.readUInt32BE(20);

    return { width, height };
  } catch (err) {
    console.error(`读取 ${path.basename(filePath)} 失败:`, err.message);
    return null;
  }
}

// 使用示例
const imgDir = path.join(__dirname, 'images');

fs.readdir(imgDir, (err, files) => {
  if (err) throw err;

  files.forEach(file => {
    if (path.extname(file).toLowerCase() === '.png') {
      const filePath = path.join(imgDir, file);
      const dimensions = getPNGDimensions(filePath);

      if (dimensions) {
        console.log(
          `${file.padEnd(20)} 分辨率: ${dimensions.width}x${dimensions.height}`
        );
      }
    }
  });
});

现在,运行上面代码,可以打印出文件夹 images 中所有 png 图片的分辨率。

参考链接:

相关推荐
xiaofeichaichai1 小时前
Map / Set / WeakMap / WeakSet
前端·javascript
有梦想的程序星空3 小时前
【环境配置】Vue3项目离线化本地部署echarts全攻略
前端·javascript·vue·echarts
薛先生_0994 小时前
vue-路由重定向
前端·javascript·vue.js
橘子星4 小时前
基于 ES6 语法的 NLP 任务模块化开发实践
前端·javascript
月光刺眼4 小时前
JS 底层执行机制探讨:执行上下文、变量提升与调用栈
前端·javascript
ZC跨境爬虫5 小时前
跟着 MDN 学 JavaScript day_1:什么是 JavaScript?
开发语言·前端·javascript·ecmascript
xiaofeichaichai5 小时前
Vue 响应式原理
前端·javascript·vue.js
提子拌饭1335 小时前
模态窗鸿蒙PC Electron框架实现技术详解 - 饮料含糖量应用案例分析
前端·javascript·华为·electron·前端框架·开源·鸿蒙
光影少年6 小时前
react的Context 和 Redux 区别?
前端·javascript·react.js·前端框架
前端 贾公子6 小时前
uni-app工程化实战:基于vue-i18n和i18n-ally的国际化方案 (上)
前端·javascript·vue.js