【问题标题】:What is the best practice to export canvas with high quality images?导出具有高质量图像的画布的最佳做法是什么?
【发布时间】:2013-06-06 05:03:03
【问题描述】:

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

基本上我做的是以下几点: - 绘制画布(上传图片、放置文字等); - 调整画布的大小乘以比例因子,以便最终能够获得 300dpi 的图像; - 以 PNG 格式保存画布; - 使用 php/ajax 和 Imagick,将画布设置为 300 dpi 质量,保存为 jpg 格式。

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

我认为一个可能的解决方案是:上传图片时,将位置保存在数组中,x和y位置和大小到整个过程结束,将图片替换为JPG。如果这是最好的方法,是否可以使用 Imagick 库或 PHP 来实现?

我想知道您对此的看法。

谢谢。

【问题讨论】:

    标签: php canvas html5-canvas fabricjs imagick


    【解决方案1】:

    在处理图像时,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 英寸!= 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>
    

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

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

    关于 DPI:如果此图像是 72 DPI 或 300 DPI,则像素数将完全相同。已经提到的原因是图像以像素为单位。

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

    【讨论】:

    • @K3N:我听从了你的建议,但我遇到了一个问题,正在放置的文本非常小。请看小提琴jsfiddle.net/Q3TMA/1042
    • @Abhinav 字体大小必须在绘制前提前放大。您可以为此使用 scale() 或直接尝试使用字体高度。由于字体的制作方式,后者并不总是线性的,但你应该能够接近。
    • 但是大小控件仍然显得很小,图像可以做什么?
    • @Abhinav 我建议您将其作为一个新问题打开。我在这里的回答只涉及基本原则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 2011-03-01
    • 2017-05-20
    • 2016-01-13
    • 1970-01-01
    • 2016-08-01
    相关资源
    最近更新 更多