【问题标题】:Stitching several canvas images together and saving them as a file?将几个画布图像拼接在一起并将它们保存为文件?
【发布时间】:2014-01-18 11:41:56
【问题描述】:

我有一堆图片通过 Javascript 上传到一些 Canvas 元素中。 然后我想将它们拼接在一起并将它们保存为新图像。

我已将它们上传并在 Canvas 中获取,但我不知道如何将它们拼接在一起并保存它们。

想法?

【问题讨论】:

  • 请发布您目前拥有的相关代码,展示您如何存储图像,并详细说明如何将图像拼接在一起(水平、垂直、平铺......) .您的代码中哪里出现了问题?
  • 我还没做。到目前为止,每个 Canvas 项目都保存在它自己的由行和列值指定的画布标签中。我想把它们平铺。因此,如果您想象一个 3x3 网格。我想要水平缝合的行,然后将 3 行缝合在另一行之上。
  • 有点像this ?
  • 哇,这非常接近,但我希望能够将它们合并到一个画布中,以便将其保存为图像。
  • 在该演示中它们被合并到一个画布中。如果你对图书馆没问题,我可以为它做一个例子/答案。

标签: javascript html image canvas


【解决方案1】:

参考。 cmets:要使这个答案起作用,您需要使用我的库 easyCanvasJS(可在 GitHubhere 上获得)。这是一个免费的图书馆/麻省理工学院许可。

Online demo here

/// create a new instance of easyCanvas using canvas with id "demo"
var ez = new easyCanvas('demo'),

    /// define the image URLs
    urls = ['http://img1.jpg',
            'http://img2.jpg',
            ...etc...
    ];

/// Use the built-in loader to load all the images
ez.loadImages(urls, done);
    
/// draw all images that was loaded
function done(e) {

    var i, t, x = 0, y = 0,
        w = ez.width * 0.333,  /// grid 3x3 assuming 9 images
        h = ez.height * 0.333,
        count = 0;

    /// fill canvas with a grid of the images
    for(i = 0; i < e.images.length; i++) {

        /// if image was successfully loaded image will not be null
        if (e.images[i] !== null) {
            ez.ctx.drawImage(e.images[i], x, y, w, h);
            count++;

            /// move to next spot for next image
            if (((i + 1) % 3) === 0) {
                x = 0;
                y += h;
            } else x += w;
        }
    }
    
}

现在应该已经加载了所有图像,并在单个画布上以 3x3 网格绘制。

要将画布保存为图像,只需使用:

ez.download('filename.png');

demo我在画布下方添加了一个下载按钮。

如果您想合并进度条,请查看original sample here

【讨论】:

  • 感谢您的帮助,但我想我更喜欢没有库的手动解决方案。不过还是谢谢。
  • @ChrisG err,你为什么不说 before 我做了这个例子(正如我提前问过你的那样)......上面的大部分代码都不相关到库,但要平铺图像。反正..
  • 我仍然很感激,但我改变了主意。无论如何谢谢你。
猜你喜欢
  • 1970-01-01
  • 2019-10-19
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
相关资源
最近更新 更多