Yii2中在DetailView渲染Base64格式图片的问题
解决Yii DetailView中展示Base64图片的问题
我来帮你搞定这个问题~你之前的代码没生效的原因很简单:你直接把Base64字符串解码成二进制数据了,但DetailView的image格式需要的是浏览器能识别的图片源地址,而不是原始二进制内容。
正确的做法是用Data URI Scheme来包装你的Base64字符串,这样浏览器就能直接解析并显示图片了。具体代码如下:
<?= DetailView::widget([ 'model' => $model, 'attributes' => [ 'nome:ntext', [ 'attribute' => 'img1', // 这里要根据你的图片实际MIME类型调整,比如image/png、image/gif 'value' => "data:image/jpeg;base64,{$model->img1}", 'format' => ['image', ['width' => '100', 'height' => '100']] ], ], ]) ?>
补充说明:
- 如果你不确定图片的MIME类型,或者图片类型不固定,可以考虑在存储Base64的同时记录对应的MIME类型(比如新增一个字段
img1_mime),然后动态生成Data URI:
[ 'attribute' => 'img1', 'value' => function ($model) { return "data:{$model->img1_mime};base64,{$model->img1}"; }, 'format' => ['image', ['width' => '100', 'height' => '100']] ]
- 为什么之前的代码不行?因为
base64_decode()返回的是图片的二进制字节流,这不能直接作为<img>标签的src属性值,而Data URI是把二进制内容编码成字符串格式,让浏览器能正确识别为图片源。
内容的提问来源于stack exchange,提问作者Carlos Lima
相关产品推荐
相关产品推荐

