You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Node.js/Javascript获取图片DPI信息

获取图片DPI的Node.js解决方案

我之前也碰到过这个问题——很多图片模块默认不会主动抓取DPI相关的元数据,得手动配置或者用更专注于EXIF处理的工具才行。下面给你几个经过验证的方案:

方案1:使用exifr(轻量且专注EXIF)

exifr是专门解析图片元数据的库,对EXIF里的分辨率信息支持很好,安装和使用都很简单:

  1. 安装依赖:
npm install exifr
  1. 示例代码:
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信息:

  1. 安装依赖:
npm install sharp
  1. 示例代码:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:13:27