当前位置:首页 > JavaScript

js实现二进制流转图片

2026-03-02 03:23:41JavaScript

使用 FileReader 读取二进制流

将二进制流转换为 DataURL 格式,可通过 FileReader 对象实现。这种方法适用于从 AJAX 请求或 WebSocket 获取的二进制数据。

js实现二进制流转图片

function binaryToImage(binaryData, mimeType) {
  return new Promise((resolve, reject) => {
    const blob = new Blob([binaryData], { type: mimeType });
    const reader = new FileReader();

    reader.onload = (e) => {
      const img = new Image();
      img.src = e.target.result;
      img.onload = () => resolve(img);
    };
    reader.onerror = reject;
    reader.readAsDataURL(blob);
  });
}

// 使用示例
fetch('image.bin')
  .then(res => res.arrayBuffer())
  .then(buffer => binaryToImage(buffer, 'image/png'))
  .then(img => document.body.appendChild(img));

使用 URL.createObjectURL 直接显示

对于不需要 base64 编码的场景,可以直接通过 Blob 创建对象 URL,这种方式内存效率更高。

js实现二进制流转图片

function displayBinaryImage(binaryData, mimeType) {
  const blob = new Blob([binaryData], { type: mimeType });
  const url = URL.createObjectURL(blob);
  const img = new Image();

  img.src = url;
  img.onload = () => URL.revokeObjectURL(url); // 释放内存
  return img;
}

// 使用示例
const binaryData = new Uint8Array([...]); // 二进制数据
const imgElement = displayBinaryImage(binaryData, 'image/jpeg');
document.body.appendChild(imgElement);

处理 ArrayBuffer 或 TypedArray

当二进制数据以 ArrayBuffer 或 TypedArray 形式存在时,可直接转换为 Blob:

// 假设收到的是 ArrayBuffer
const arrayBuffer = await response.arrayBuffer();

// 或者 Uint8Array
const uint8Array = new Uint8Array(arrayBuffer);

// 转换为Blob时无需额外处理
const blob = new Blob([uint8Array], { type: 'image/webp' });

Canvas 渲染二进制图像

若需进一步处理图像,可将生成的图像绘制到 Canvas:

binaryToImage(binaryData, 'image/png').then(img => {
  const canvas = document.createElement('canvas');
  canvas.width = img.width;
  canvas.height = img.height;
  const ctx = canvas.getContext('2d');
  ctx.drawImage(img, 0, 0);

  // 后续可操作canvas
  document.body.appendChild(canvas);
});

注意事项

  • 二进制数据必须包含正确的 MIME 类型标识(如 image/png
  • 大文件建议使用 URL.createObjectURL 避免内存问题
  • 跨域资源需确保服务器返回正确 CORS 头
  • 在 Web Worker 中使用时需将 Blob URL 通过 postMessage 传递

标签: 图片js
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

vue实现图片循环

vue实现图片循环

实现图片循环展示 在Vue中实现图片循环展示可以通过v-for指令结合数组数据完成。以下是具体实现方式: 基础循环展示 准备图片数据数组,使用v-for渲染图片列表: <template&g…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…