当前位置:首页 > 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实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

vue实现图片单选

vue实现图片单选

Vue 实现图片单选功能 在 Vue 中实现图片单选功能可以通过多种方式完成,以下是两种常见的实现方法: 方法一:使用 v-model 和单选按钮 通过将单选按钮与图片绑定,利用 v-model…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现dh

js实现dh

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