【问题标题】:Download original Canvas even after resizing即使在调整大小后下载原始画布
【发布时间】:2016-12-01 05:20:40
【问题描述】:

Click here to view image

Step1) 我正在使用 drawImage(image,0,0); 将 1920*1080 的图像绘制到 canvas1;

setp2) 现在我正在拍摄另一张徽标图像并将其绘制到另一个名为 canvas2 的画布上,并使用 drawImage(logo,0,0);

我使用fabricjs 来实现徽标可拖动和可调整大小的功能。

Step3) 然后我将 canvas1 和 canvas2 绘制到另一个名为 canvas3 的画布上并下载它。

在这种情况下,一切都很好,除了图像显示大(1920*1080)。为了用户体验,我使用了图像调整大小的方法来缩小图像并显示在 900*500 的画布中。但是当我下载时,我应该得到带有徽标的 1920*1080 的原始画布。但我得到 900*500 的标志。

任何人都可以在这方面提供帮助

调整大小的代码

这里的实际宽度和实际高度是背景图像的宽度和高度

function ImageResize(){ 
    var d_canvas = document.getElementById('canvas'); 
    var context = d_canvas.getContext('2d'); 
    var background = document.getElementById('background'); 
    var wrh = realWidth / realHeight; 
    newWidth = d_canvas.width; 
    newHeight = newWidth / wrh; 
    if (newHeight > d_canvas.height) { 
        newHeight = d_canvas.height; 
        newWidth = newHeight * wrh; 
    } 
    context.drawImage(background,0,0, newWidth , newHeight); 
}

【问题讨论】:

  • 下载步骤是如何实现的?
  • link.href = document.getElementById(canvasId).toDataURL();这里的canvasId是带有logo的图片的canvas id
  • 你如何调整大小?
  • 这里的实际宽度和实际高度是背景图像的宽度和高度函数 ImageResize(){ var d_canvas = document.getElementById('canvas'); var context = d_canvas.getContext('2d'); var background = document.getElementById('background'); var wrh = realWidth / realHeight; newWidth = d_canvas.width;新高度=新宽度/wrh; if (newHeight > d_canvas.height) { newHeight = d_canvas.height;新宽度 = 新高度 * wrh; } context.drawImage(background,0,0, newWidth , newHeight); }
  • 如果您需要详细信息,请访问我的网站:cricmovie.com/bbb-imagecrop

标签: javascript jquery css canvas html5-canvas


【解决方案1】:

使用drawImage 的扩展形式在原始背景图像上缩放和重新定位徽标:

  1. 创建一个大小为 1920x1080 的第三个 html5 画布,并将您的 step1-image 绘制到第三个画布上。
  2. 重新计算 FabricJS 提供的 Logo 坐标和尺寸从 900x500 到 1920x1080:

    // pseudo-code
    // Given FabricJS's position & size of the logo on a 950x500 stage
    // Calc the logo's relative position & size vs a larger background
    logoX *= 1920/900;
    logoY *= 1080/500;
    logoWidth *= 1920/900;
    logoHeight *= 1080/500;
    
  3. 使用重新计算的位置和大小将徽标绘制到第三个画布上

    thirdContext.drawImage(
        logoImage,
        0,0,logoImage.width,logoImage.height,
        logoX,logoY,logoWidth,logoHeight
    );
    
  4. 导出第三个画布

【讨论】:

  • 请通过此网址:cricmovie.com/bbb-imagecrop 并开始>桌面壁纸>1920*1080>下一步>继续添加徽标>保存>下载..请完成上述步骤我可以下载图像,但它以 900*500 作为图像并作为空白进行扩孔,这正是我的问题,我必须为所有设备的其余部分编写代码,请在这方面提出建议,谢谢
  • 或者你能提供任何使用相同概念的实时示例
  • @Bikshus。时间不允许访问 cricmove.com。第 2 步和第 3 步是答案的 90%。您应该能够从这里完成代码。 :-)
  • 当我应用它时显示此错误 Uncaught TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': Valid arities are: [3, 5, 9],但提供了 7 个参数。跨度>
猜你喜欢
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
  • 2011-03-14
  • 2013-12-15
相关资源
最近更新 更多