如何将图片路径转换为Base64 Data URL格式?
问题
现有Dart代码如下:
var byte = File(item.path).readAsBytesSync(); String img64 = base64Encode(byte);
当前生成的是纯Base64编码字符串:
(/9j/4TY3RXhpZgAASUkqAAgAAAALADIBAgAUAAAAkgAAABABAgAaAAAApgAAAAABBAABAAAAwAMAABMCAwABAAAAAQAAACgBAwABAAAAAgAAAAEBBAABAAAAwAMAABsBBQABAAAAwAAAABIBAwABAAAAAQAAAGmHBAABAAAA1wAAABoBBQABAAAAyAAAAA8BAgAHAAAA0AAAALUBAAAyMDIzOjExOjIxIDEzOjMyOjQ5AEFuZHJvaWQgU0RLIGJ1aWx0IGZvciB4ODYASAAAAAEAAABIAAAAAQAAAEdvb2dsZQAOAAGgAwABAAAA\)
需要生成带Data URI前缀的格式,示例如下:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA3gAAALyCAYAAACIMnZEAAAABHNCSVQICAgIfAhkiAAAIABJREFUeJzsvXd8XMW9sP/MOWertGqWrGbLBSPbuIALtummGXAw5QIhJr/7JpDCJYSEAJeUl18wgRtyEyAJgSSQkJBGCwkdnFBMCS64gXvvsrosabX9nDPvH2d3t
解决方案
只需在Base64编码后的字符串前拼接对应的Data URI前缀即可。如果已知图片格式,直接添加对应前缀;若需适配不同格式,可通过文件扩展名或文件头判断后动态拼接。
固定PNG格式的代码修改:
import 'dart:io'; import 'dart:convert'; // ... 其他逻辑代码 var byte = File(item.path).readAsBytesSync(); String img64 = base64Encode(byte); // 拼接Data URI前缀 String dataUri = 'data:image/png;base64,$img64';
适配多种图片格式的示例(通过文件扩展名判断):
import 'dart:io'; import 'dart:convert'; // ... 其他逻辑代码 File imageFile = File(item.path); var byte = imageFile.readAsBytesSync(); String img64 = base64Encode(byte); // 根据文件扩展名获取MIME类型 String extension = imageFile.path.split('.').last.toLowerCase(); String mimeType = 'image/$extension'; // 兼容jpg与jpeg格式 if (extension == 'jpg') { mimeType = 'image/jpeg'; } String dataUri = 'data:$mimeType;base64,$img64';
内容的提问来源于stack exchange,提问作者Tantely José
相关产品推荐
相关产品推荐

