导出包含高质量图像的画布的最佳做法是什么?

2022-08-30 20:41:55

我需要你的帮助。我解释了我的情况:我正在使用结构.js库在我的应用程序中放置形状,文本等。我的画布大小为 1000x1000 像素(约 26.45x26.45 厘米)。我有一个图像上传脚本,仅用于上传高质量的图像,例如300 dpi。

基本上我做的是以下内容: - 绘制画布(上传图像,放置文本等);- 调整画布的大小乘以比例因子,以便在结束时具有300dpi的图像;- 以PNG格式保存画布;- 使用php / ajax和Imagick,将画布质量为300 dpi,以jpg格式保存。

问题是:当我保存画布时,上传图像的质量将决定一定,因为我调整画布的大小是72 dpi(在我保存PNG的那一刻)。

我认为一个可能的解决方案是:上传图像时,将位置保存在具有x和y位置和大小的数组中,直到整个过程结束时,替换JPG中的图像。如果这是最好的方法,那么可以使用Imagick库或PHP进行制作吗?

我想知道你对此的看法。

谢谢。


答案 1

处理图像时,DPI 根本不重要。图像以像素为单位进行测量,因此这是您需要调整的。您可以放心地忽略 DPI,因为它在此上下文中没有任何意义。

缩放在这里不会帮助你 - 请记住,你使用的是像素设备,而不是矢量,所以画布需要已经是你想要用于打印等的大小,否则你会因为在缩放时插值而降低质量。

操作方法如下:

您需要根据最终阶段所需的大小预先计算画布大小(以像素为单位)。

假设您要打印 15 x 10 厘米(或约 6 x 4 英寸)的 300DPI 输出图像。然后计算像素:

Width : 10 cm * 300 / 2.54 = 1181 pixels
Height: 15 cm * 300 / 2.54 = 1772 pixels

对于英寸,只需与DPI相乘(4英寸!= 10厘米,因此结果略有不同,为简单起见,选择数字):

Width : 4 in * 300 = 1200 pixels
Height: 6 in * 300 = 1800 pixels

对于 26.45 cm @ 300 DPI 的图像,画布需要是:

26.45 cm * 300 DPI / 2.54 inches = 3124 pixels.

要在屏幕上较小的区域显示该画布,请使用CSS来显示元素,例如 -

<canvas width="3124" height="3124" style="width:600px;height:600px;"></canvas>

现在,您可以在画布的实际像素位置绘制到画布,它将在屏幕上按比例显示(但保留画布本身上的所有信息)。如果使用鼠标坐标,则只需按比例缩放鼠标位置(画布 pos = 鼠标坐标 * 3124px / 600px)。

对于缩放等,它变得有点复杂,但原理仍然存在:图像的最终尺寸必须是最终结果的大小。

关于DPI:如果此图像为72 DPI或300 DPI,则像素数将完全相同。如前所述,原因是图像是以像素为单位测量的。

当涉及到像素设备(位图,监视器,相机等)时,DPI是一个任意值,仅用于DTP软件,以获取有关最终打印尺寸的提示,该提示将仅使用此信息预先缩放图像相对于您用于设置打印的页面。


答案 2

推荐