更改Node.js中的JPEG文件DPI头

更改Node.js中的JPEG文件DPI头,node.js,phantomjs,jpeg,puppeteer,Node.js,Phantomjs,Jpeg,Puppeteer,我有一个文件(例如JPEG大小1588×2244px)。它是由puppeter生成的(但是phantomjs也会生成72 DPI屏幕截图)。当我将此图像保存到扩展名为.jpeg的文件中并使用macOS General Info时,我看到: 正如您所看到的,它在元数据中设置了72 DPI,但我想使用300 DPI的文件。我知道,在数码技术中,它不会改变任何东西——它是用于打印的属性,但我不想向每位客户解释,该文件可以以300 DPI打印 当我使用Gimp和图像>打印尺寸时 我可以更改DPI,然

我有一个文件(例如JPEG大小1588×2244px)。它是由
puppeter
生成的(但是
phantomjs
也会生成
72 DPI
屏幕截图)。当我将此图像保存到扩展名为
.jpeg
的文件中并使用macOS General Info时,我看到:

正如您所看到的,它在元数据中设置了
72 DPI
,但我想使用
300 DPI
的文件。我知道,在数码技术中,它不会改变任何东西——它是用于打印的属性,但我不想向每位客户解释,该文件可以以
300 DPI
打印

当我使用Gimp和
图像>打印尺寸时

我可以更改DPI,然后再次导出图片。现在它在
General Info
窗口中有
300 DPI

我尝试在Node.JS服务器中执行此操作,但我发现在
.PNG
图片上几乎没有更改此属性的选项,但任何人都在为
.JPEG
文件工作

我认为最准确的选择是使用此库中的方法
changedpidataul
: 但是当我把我的图像作为
base64image
时,在
分割
操作之后,我有一个只有1个元素的
数组
——我认为这是主体,所以我没有格式属性(在63行)

以前有人遇到过这个问题吗

您可以使用库更改图像的EXIF数据。该库只更改元数据(称为EXIF),而不更改图像本身

代码示例

下面的代码使用读取图像的EXIF数据,对其进行更改,并从更改的数据创建新的缓冲区

const piexif=require(“piexifjs”);
//从Puppeter或磁盘获取图像缓冲区
常量imageBuffer=/**/
//将缓冲区转换为字符串并加载它
常量imageString=imageBuffer.toString('binary');
const exif=piexif.load(imageString);
//更改分辨率
exif['0th'][piexif.ImageIFD.x分辨率]=[300,1];
exif['0'][piexif.ImageIFD.YResolution]=[300,1];
//生成新的EXIF数据
const newExifDump=piexif.dump(exif);
//生成新图像
const newData=piexif.insert(newExifDump,imageString);
const jpgBuffer=新缓冲区(newData,“二进制”);
//写入文件或使用缓冲区
// ...
请注意,我自己没有使用过这个库,也没有测试过代码