如何在Javascript中设置JPEG/PNG图像的分辨率/密度?

问题描述 投票:0回答:4

我需要在 JavaScript 中更改 JPG/PNG 类型图像的分辨率/密度。我需要这样做的原因是,我可以将图像发送到第三方 API,然后第三方 API 将根据分辨率/密度元数据知道要打印的每英寸像素数 (DPI/PPI)。

javascript中有这样的解决方案吗?

javascript node.js image jpeg resolution
4个回答
5
投票

对于任何对解决方案感到好奇的人,我最终使用了graphicMagic(Image Magick 的节点版本)。因为我使用的是 AWS Lambda(其实例预装了 ImageMagic),所以它变得更容易,我只需安装“gm”npm 包即可。

这不是性能最好的解决方案,因为我必须在重新采样后调整大小,但它有效!

const gm = require('gm').subClass({imageMagick: true});

function addResolution(inputBuffer, resizeWidth, resizeHeight) {
  return new Promise((resolve, reject) =>{

    gm(inputBuffer)
    .resample(150, 150) // resampled to 150 resolution
    // you have to set the width and height again because resample rearranges those params
    .resize(resizeWidth, resizeHeight, '!')
    .toBuffer('JPEG',function (err, buffer) {
      if (err) reject(err)
      resolve(buffer)
    })
  })
}

5
投票

您还可以使用这个最近发布的库,它只对 JPEG (JFIF) 和 PNG 进行 dpi 操作

https://github.com/shutterstock/changeDPI


0
投票

您可以通过添加/更改 PNG 文件的 pHY 块来完成此操作:

您可以在https://github.com/murkle/rewrite-png-pHYs-chunk查看我的代码以了解更多


-1
投票

可以使用JavasCript标准图像处理库sharp通过withMetadata功能轻松设置分辨率/密度。

简单的例子:

// Set output metadata to 96 DPI
const data = await sharp(input)
  .withMetadata({ density: 96 })
  .toBuffer();

Npm 模块:sharp

© www.soinside.com 2019 - 2024. All rights reserved.