javascript - 如何从随机 uint8array 渲染图像

标签 javascript reactjs numpy image-processing

我想使用一些随机函数将随机图像生成到 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 中实现它? 任何人都可以帮我解决这个问题吗?

最佳答案

您可以尝试使用 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);

有关更多信息,请参阅 MDN ImageDataUint8ClampedArray

关于javascript - 如何从随机 uint8array 渲染图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54722254/

相关文章:

javascript - slidetoggle jquery 不会显示

reactjs - Jest/Enzyme document.createRange 不是挂载函数

Python:列表和 numpy 对象数组之间的区别

Javascript Canvas 颜色亮度变化不平滑

javascript - 通过正则表达式删除标签符号 js

javascript - 未捕获的类型错误 : getElementsByName is not a function

reactjs - Material-UI:您正在使用排版变体

javascript - react native 屏幕 : compileDebugKotlin Error

python - 为什么 NumPy reshape() 会创建一个新数组以及为什么顺序可能不被保留?

python - 为什么 numpy random.choice() 函数被停用了?