【问题标题】:How to render images from a random uint8array如何从随机 uint8array 渲染图像
【发布时间】:2019-02-17 03:12:32
【问题描述】:

我想在 reactjs 中使用一些随机函数将随机图像生成到 Uint8Array 中。现在我想通过标签来渲染它。例如:

img = new Uint8Array(100 * 100 * 3); // want to create a 100 * 100 3 channel color image
//someRandomFunction(img);
let blob = new Blob( [ img ], { type: "image/png" } );
var urlCreator = window.URL || window.webkitURL;
const imageUrl = urlCreator.createObjectURL( blob );

现在我想在 img 标签中渲染这个“imgUrl”。

我已将此数据转换为 blob 并创建了一个 URL 来设置图像源。然而,到目前为止还没有运气。它总是显示一些 0x0 空图像。即使我有一个全零数组,它不应该显示一个完整的黑色图像吗?

只是为了提供更多上下文,本质上,我试图从 python 复制 numpy 和 opencv 的行为。在那里我们可以创建一个 numpy 数组,然后通过 opencv 函数显示该图像,如下所示:

img = np.random.randint([100, 100, 3], dtype=np.uint8)
cv2.imshow('image', img);

如何在 reactjs 中实现这一点? 有谁能帮帮我吗?

【问题讨论】:

    标签: javascript reactjs numpy image-processing


    【解决方案1】:

    您可以尝试使用Uint8ClampedArrayImageDatacanvas 而不是img

    const canvas = document.getElementById('canvas');
    const ctx = canvas.getContext('2d');
    const arr = new Uint8ClampedArray(40000);
    
    // Iterate through every pixel
    for (let i = 0; i < arr.length; i += 4) {
      arr[i + 0] = 0;    // R value
      arr[i + 1] = 190;  // G value
      arr[i + 2] = 0;    // B value
      arr[i + 3] = 255;  // A value
    }
    
    // Initialize a new ImageData object
    let imageData = new ImageData(arr, 200);
    
    // Draw image data to the canvas
    ctx.putImageData(imageData, 20, 20);
    

    更多信息可以查看MDNImageDataUint8ClampedArray

    【讨论】:

      猜你喜欢
      • 2014-10-27
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多