当前位置:首页 > JavaScript

js实现二进制流转图片

2026-03-02 03:23:41JavaScript

使用 FileReader 读取二进制流

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

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,这种方式内存效率更高。

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:

js实现二进制流转图片

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 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">点…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…