You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在下载JPEG图片时设置DPI?

如何在下载JPEG图片时设置DPI?

嘿,我来给你唠唠怎么在下载JPEG的时候设置DPI哈。其实html2canvas本身没法直接给生成的图片设置DPI属性,但咱们可以通过调整缩放比例来间接实现——毕竟DPI和像素尺寸是挂钩的:相同物理尺寸下,DPI越高,需要的像素数就越多。

先看看你现有的代码,里面已经定义了目标DPI是300,但计算像素尺寸的时候还是用了默认的72(屏幕常用DPI),这就没发挥300DPI的作用。咱可以这么改:

步骤1:修正像素尺寸计算逻辑

把原来用72计算像素的代码,改成用目标DPI来算,同时算出对应的缩放比例:

// 目标DPI
var dpi = 300;
// 用目标DPI计算画布需要的像素尺寸(物理尺寸×DPI)
var widthInPixels = pdfWidthInInches * dpi;
var heightInPixels = pdfHeightInInches * dpi;
// 计算缩放比例:目标DPI ÷ 默认屏幕DPI(72)
var scale = dpi / 72;

步骤2:给html2canvas加上缩放配置

html2canvas的参数里加上scale,让它按照咱们需要的比例渲染画布,同时指定画布的宽高:

html2canvas(elementHTML, {
    useCORS: true,
    scale: scale, // 关键:用这个缩放比例来匹配目标DPI
    width: widthInPixels,
    height: heightInPixels
}).then(canvas => {
    // 把生成的画布转成JPEG并触发下载
    const downloadLink = document.createElement('a');
    // toDataURL第二个参数是图片质量,0-1之间,0.9兼顾质量和大小
    downloadLink.href = canvas.toDataURL('image/jpeg', 0.9);
    downloadLink.download = fileName;
    downloadLink.click();
});

为啥这么做?

html2canvas是基于浏览器屏幕渲染的,默认用72DPI来生成画布。咱通过scale参数把画布放大到300DPI对应的像素数,这样下载下来的JPEG,实际像素尺寸就符合300DPI的要求了——比如你要的是12.8英寸宽的图片,300DPI下就是12.8×300=3840像素宽,打印出来的物理尺寸和清晰度都能达标。

要注意的是:如果是想修改JPEG文件里的DPI元数据(就是查看图片属性时显示的DPI数值),toDataURL本身不会自动添加这部分信息。如果非要改元数据,可能得用额外的库来处理,但大多数场景下,用缩放的方式保证像素尺寸对应目标DPI就足够啦。

备注:内容来源于stack exchange,提问作者WonderShare

火山引擎 最新活动