第 1 部分:生成 50 毫米的打印绘图需要多少画布像素?
打印机通常以每英寸 300 像素的速度打印。
以毫米为单位:300ppi / 25.4 mm-in = 11.81 像素/毫米。
因此,如果您想打印 50 毫米的图纸,您可以这样计算所需的像素大小:
50mm x 11.81ppm = 590.5 像素(591 像素)
然后您将画布的大小调整为 591 像素(假设为正方形),如下所示:
// resize the canvas to have enough pixels to print 50mm drawing
c.width=591;
c.height=591;
第 2 部分:将画布导出为图像
要打印画布,您需要将画布转换为可以使用context.toDataURL 进行的图像。
// create an image from the canvas
var img50mm=new Image();
img50mm.src=canvas.toDataURL();
第 3 部分:将导出的图像转换为正确的打印分辨率
context.toDataURL 始终创建每英寸 72 像素的图像。
打印机通常以更高的分辨率打印,可能是每英寸 300 像素。
所以要让导出的图像在页面上正常打印,必须将导出的图像从 72ppi 转换为 300ppi。
ImageMagick 库可以进行转换:http://www.imagemagick.org/
它是一个服务器端工具,因此您必须将导出的图像从服务器反弹(可能使用 AJAX 来回传输您的图像)。
ImageMagick 适用于 PHP、IIS 和其他服务器环境。
这是一个使用 PHP 转换图像分辨率并将转换后的图像回显给调用者的示例:
// Assume you've uploaded the exported image to
// "uploadedImage.png" on the server
<?php
$magic = new Imagick();
$magic->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH);
$im->setImageResolution(300,300);
$im->readImage("uploadedImage.png");
$im->setImageFormat("png");
header("Content-Type: image/png");
echo $im;
?>
最后部分:打印出来!
您从服务器收到的转换后的文件将在您的 300ppi 打印机上打印一个 50 毫米的正方形图像。