【问题标题】:Creating a large image composed by smaller images, dynamically on the server在服务器上动态创建由较小图像组成的大图像
【发布时间】:2022-01-13 19:19:59
【问题描述】:

我在这个问题上已经有几天了,我需要做的是创建一个大图像来映射到一个球体上,要求是:

  • 创建一个高度是宽度两倍的大图像,两者都必须是 2 的幂,例如:2048x1024
  • 从包含 10.000 张图像的文件夹中创建,它们可能具有不同的分辨率,因此可能需要调整大小

到目前为止我已经尝试过:

Tile four images together using Node.js and GraphicsMagick http://www.imagemagick.org/script/montage.php

我愿意使用任何服务器端的东西,从 nodejs 到 python 甚至 php,任何可以完成这项工作的东西。

谁能给我指出正确的方向?

谢谢!!

【问题讨论】:

  • 那么,究竟是什么不适合您?您是否能够创建平铺图像?您必须使用多个图像吗?似乎选择一张接近您所需分辨率的图像,然后根据需要裁剪或缩放以适应尺寸可能会产生更好的结果。
  • 我需要创建一个总共 10k 的图像网格,所以假设是 100x100 图像,我不知道创建它的最快方法是什么,以及使用什么语言?

标签: python node.js image image-processing server


【解决方案1】:

使用 merge-images-v2 解决

const mergeImages = require('merge-images-v2');
const Canvas = require('node-canvas');
const { Image } = require('node-canvas');

var images = [];
let totalWidthPixels, totalHeightPixels;
let imageDir = './images/'


Array.prototype.random = function () {
    return this[Math.floor((Math.random()*this.length))];
  }

function createImagesObject(gridHorizontalWidth,gridVerticalHeight,imageRes) {
    totalWidthPixels = gridHorizontalWidth * imageRes;
    totalHeightPixels = gridVerticalHeight * imageRes;
    let totalPlots = gridHorizontalWidth * gridVerticalHeight;

    for (let i = 0; i <= totalPlots; i++) {
        let currentX = 0;
        let currentY = 0;

        let currentColumn =  parseInt(i/gridVerticalHeight);
        let currentColumnRemainder =  i % gridVerticalHeight;

        //console.log(currentColumn+ "   ------     " + currentColumnRemainder);

        currentX = currentColumn * imageRes;
        currentY = currentColumnRemainder * imageRes;

        images.push({ src: [imageDir+'default_gray.png',
                            imageDir+'bought_gray.png',
                            imageDir+'userImage.png'].random(),
                       x: currentX, 
                       y: currentY })
    }

}
createImagesObject(128,64,64);

mergeImages(images, {
  Canvas: Canvas,
  width: totalWidthPixels,
  height: totalHeightPixels
})
  .then(b64 => {
    var base64Data = b64.replace(/^data:image\/png;base64,/, "");

    require("fs").writeFile("out.png", base64Data, 'base64', function(err) {
    console.log(err);
    });
      
  });

【讨论】:

    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    相关资源
    最近更新 更多