如何使用Node.js/Javascript获取图片DPI信息
获取图片DPI的Node.js解决方案
我之前也碰到过这个问题——很多图片模块默认不会主动抓取DPI相关的元数据,得手动配置或者用更专注于EXIF处理的工具才行。下面给你几个经过验证的方案:
方案1:使用exifr(轻量且专注EXIF)
exifr是专门解析图片元数据的库,对EXIF里的分辨率信息支持很好,安装和使用都很简单:
- 安装依赖:
npm install exifr
- 示例代码:
const exifr = require('exifr'); async function getImageDPI(imagePath) { try { const metadata = await exifr.parse(imagePath, { resolution: true }); // DPI信息通常存在XResolution和YResolution字段 const dpiX = metadata.XResolution?.value; const dpiY = metadata.YResolution?.value; return { dpiX, dpiY }; } catch (error) { console.error('读取图片DPI失败:', error); return null; } } // 调用示例 getImageDPI('./test.jpg').then(dpi => { if (dpi) { console.log(`图片DPI:横向${dpi.dpiX},纵向${dpi.dpiY}`); } else { console.log('未检测到DPI信息'); } });
注意:如果图片本身没有嵌入EXIF的分辨率数据(比如很多网页图片会被压缩移除元数据),这个方法会返回
undefined,这时候可以考虑用默认值(比如72DPI,网页图片常见默认值)或者提示用户。
方案2:使用sharp(全能图片处理库)
sharp是Node.js里常用的高性能图片处理库,也能提取元数据中的DPI信息:
- 安装依赖:
npm install sharp
- 示例代码:
const sharp = require('sharp'); async function getImageDPI(imagePath) { try { const metadata = await sharp(imagePath).metadata(); // sharp会把DPI放在resolutionX和resolutionY字段 const dpiX = metadata.resolutionX; const dpiY = metadata.resolutionY; return { dpiX, dpiY }; } catch (error) { console.error('读取图片DPI失败:', error); return null; } } // 调用示例 getImageDPI('./test.png').then(dpi => { if (dpi.dpiX && dpi.dpiY) { console.log(`图片DPI:${dpi.dpiX}x${dpi.dpiY}`); } else { console.log('图片未包含DPI信息'); } });
为什么之前的模块没返回DPI?
- 很多通用图片信息模块默认不提取EXIF的分辨率字段,需要手动开启相关配置;
- 部分模块只处理图片的宽高像素,不涉及元数据;
- 图片本身没有嵌入DPI信息(这种情况很常见,尤其是经过压缩或在线分发的图片)。
内容的提问来源于stack exchange,提问作者Stweet
相关产品推荐
相关产品推荐

