javascript - 渲染 base64 图像,当前返回为空白
问题描述
在将字符串存储到 vuex 之前,我从 Microsoft graphQL 中提取了一个图像并应用了以下内容。
Buffer.from(image).toString('base64')
在我的组件内部,我试图以下列方式渲染图像
<img class="shadow avatar border-white" :src="`data:image/jpg;base64,${this.$store.state.user.profilePhoto}`"/>
我尝试将 charset-utf-8 添加到组合中,并添加了一些变体,包括不同的图像类型,包括 png 和 jpeg。
CSS 类只是将图像四舍五入并添加一点阴影。
目前我得到一个透明的圆圈,没有找到图像。
在尝试渲染图像之前,是否有另一种方法需要对图像进行编码?
解决方案
您可以改进以下几点:
- 您不必添加
this
模板($store
就足够了)。 我怀疑编译模板时您的商店中不存在您的值。您访问变量的方式不会使其反应。这意味着如果它在第一次评估时不是正确的值,它以后不会改变。相反,您应该使用计算属性访问您的数据 - 这样 vue 将附加一个 setter 和 getter,这允许属性在运行时进行响应式更新:
<img :sry="imgSrc" /> computed: { profileImg() { return this.$store.state.user && this.$store.state.user.profilePhoto; }, imgSrc() { return 'data:image/jpg;base64,${this.profileImg}`; } }
编辑:将图像数据编码为 dataURL
如果要将图像数据转换为可用作src
图像标签值的 dataURL,则可以使用HTMLCanvasElement
:
function imageToDataURL(image) {
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
context.drawImage(image, image.width, image.height);
return = canvas.toDataURL('image/png');
}
此函数假定您已经有一个加载的图像。如果您需要从 URI 加载图像,请将其包装在 image.onload 函数中。
推荐阅读
- java - 如何使用 firebase 数据库在 recyclerview 中打开新活动
- reactjs - Firebase: Cannot use import statement outside a module and require is not defined
- c++ - leetcode inorder binary search tree traversal
- visual-studio - 问:visual studio 2019 无法在服务器中按名称搜索文件和文件夹
- assimp - 从 4.1 更新到 5.0.1 后动画变慢
- javascript - MongoDB 触发器函数返回“无法访问未定义的成员”
- elasticsearch - 如何解决 HostUnreachableError 错误?
- amazon-web-services - AWS 如何设计 dynamoDB 控制台?
- javascript - 如何使用后端 Node.js Express-Sessions 对 React 前端进行身份验证?
- bash - 如何在 shell 脚本中找到比当前时间早 30 天的纪元时间?