首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将ArrayBuffer (PNG图像)直接呈现为反应中的图像?

如何将ArrayBuffer (PNG图像)直接呈现为反应中的图像?
EN

Stack Overflow用户
提问于 2020-06-15 15:11:44
回答 1查看 3.8K关注 0票数 1

我得到一个ArrayBuffer,表示通过套接字发送的PNG图像文件。是否有一种方法可以直接将其呈现到图像选项卡,而无需首先将其转换为base64?似乎没有必要仅仅为呈现添加额外的转换步骤。

EN

回答 1

Stack Overflow用户

发布于 2020-06-15 16:50:55

可以将数组缓冲区转换为blob,然后使用URL.createObjectURL(blob)为图像创建源。

示例

代码语言:javascript
复制
const { useState, useEffect } = React;

const url = "https://cors-anywhere.herokuapp.com/https://www.w3schools.com/howto/img_avatar2.png"


const App = () => {
  const [{
    srcBlob,
    srcDataUri
  }, setSrc] = useState({
    srcBlob: null,
    srcDataUri: null
  });

  useEffect(() => {
    let isUnmounted = false;
    
    fetch(url, {
    })
      .then(response => response.blob())
      .then(blob => blob.arrayBuffer())
      .then(arrayBuffer => {

        if(isUnmounted) {
          return;
        }
        
        const blob = new Blob([arrayBuffer])
        const srcBlob = URL.createObjectURL(blob);
        
        setSrc(state => ({
          ...state,
          srcBlob
        }));
   
      })
    
    return () => {
      isUnmounted = true;
    }
    
  }, [])

return <div>
  {srcBlob && <div>
    <img width="100" height="100" src={srcBlob} alt="image blob"/>
    <div>Blob: {srcBlob}</div>
    </div>}
</div>
}

ReactDOM.render(
    <App />,
    document.getElementById('root')
  );
代码语言:javascript
复制
<script src="https://unpkg.com/react/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<div id="root"></div>

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62391319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档