我需要你的帮助。我解释一下我的情况:我正在使用fabric.js库在应用程序中放置形状,文本等。我的画布大小为1000x1000像素(约26.45x26.45厘米)。我有一个图片上传脚本,仅用于上传高质量(如300 dpi)的图片。
基本上,我要做的是:-绘制画布(上传图像,放置文本等);-调整画布的大小乘以比例因子,以最终获得300dpi的图像;-将画布保存为PNG格式;-使用php / ajax和Imagick,以300 dpi的质量放置画布,并以jpg格式保存。
问题是:保存画布时,上载图像的质量会下降,因为我将画布的大小调整为72 dpi(目前保存为PNG)。
我认为可能的解决方案是:上传图像时,将位置保存在具有x和y位置和大小的数组中,直到整个过程结束,然后将图像替换为JPG。如果这是最好的方法,可以用Imagick库还是用PHP来实现?
我想知道您对此的看法。
谢谢。
处理图像时,DPI完全无关紧要。图像以像素为单位进行测量,因此需要进行调整。您可以放心地忽略DPI,因为在这种情况下它毫无意义。
缩放在这里无济于事-请记住,您使用的是像素设备,而不是矢量,因此画布必须已经达到您想要用于打印等的尺寸。否则缩放时由于插值会降低质量。
就是这样:
您需要根据最终阶段所需的大小预先计算画布大小(以像素为单位)。
假设您要在300DPI输出上打印15 x 10厘米的图像(或大约6 x 4英寸)。然后,您可以计算像素:
Width : 10 cm * 300 / 2.54 = 1181 pixels Height: 15 cm * 300 / 2.54 = 1772 pixels
对于英寸,只需将其与DPI相乘( 4 in!= 10 cm,所以结果略有不同,为简单起见选择了数字 ):
Width : 4 in * 300 = 1200 pixels Height: 6 in * 300 = 1800 pixels
对于26.45厘米@ 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软件以获取最终打印尺寸的提示,该提示将仅使用此信息对图像进行预缩放。与您用来设置打印内容的页面的关系。