当前位置:首页 > 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 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

vue实现图片闪烁

vue实现图片闪烁

实现图片闪烁效果的方法 在Vue中实现图片闪烁效果可以通过CSS动画或JavaScript动态控制样式。以下是几种常见方法: CSS动画实现 通过@keyframes定义闪烁动画,并应用到图片元素上…