我正在使用节点画布实现 https://github.com/Automattic/node-canvas
我用它把一个时事通讯设计的 jpg 导出切割成切片,并生成一个基于图像的 HTML 模板,该模板对电子邮件友好。本质上,它只是根据我的电子邮件要求从源代码中截取大约 550 像素的切片。
问题是当我加载源 jpg 文件时,我在导出的切片中看到了一些损失。这是一个例子:
如您所见,右侧的版本(源 - jpg)比节点画布处理的版本更清晰,质量更好。
我已经在我的所有 toDataUrl 调用中以全质量使用导出 jpg,而不是规范中的 0.92。我正在使用节点画布提供的 loadImage 功能,那里可能会失去质量吗?
this.writeImage(canvas.toDataURL('image/jpeg', 1.0), i);
另外,我已经加强了上下文的质量设置:
ctx.patternQuality = 'best';
ctx.quality = 'best';
ctx.antialias = 'subpixel';
ctx.imageSmoothingEnabled = false
我在想也许我没有正确使用上面的那些设置?或者,也许,错过了一个?
飞来飞去的想法之一就是将源放大2倍,然后在处理时调整大小,以保持原始jpeg质量。
我的问题是,我能做些什么来防止加工过程中的质量损失?在应用了所有步骤的过程结束时获得较低质量的图像是没有意义的,但是......
非常感谢你,德拉戈斯。
后期编辑:
我实际上问错了问题,我使用的来源实际上是 PNG,正是因为我希望我的 jpeg 导出质量很高。出口显然不如原始 PNG,但我以 JPG 形式获得了源,但与我可能使用的潜在JPG 相比,它仍然有损失,但从技术上讲,我是从 PNG 中删除的。