正则表达式解析图像数据URI

Ste*_*ven 17 c# base64 uri image

如果我有 :

<img src="data:image/gif;base64,R0lGODlhtwBEANUAAMbIypOVmO7v76yusOHi49AsSDY1N2NkZvvs6VVWWPDAutZOWJ+hpPPPyeqmoNlcYXBxdNTV1nx+gN51c4iJjEdHSfbc19M+UOeZk7m7veSMiNtpauGBfu2zrc4RQSMfIP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAC3AEQAAAb/QJBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrNbrvf8Lh8Tq/b7/i8fs" />
Run Code Online (Sandbox Code Playgroud)

如何将数据部分解析为:

  • Mime类型(图像/ gif)
  • 编码(base64)
  • 图像数据(二进制数据)

Fra*_*čik 23

编辑:扩展以显示用法

var regex = new Regex(@"data:(?<mime>[\w/\-\.]+);(?<encoding>\w+),(?<data>.*)", RegexOptions.Compiled);

var match = regex.Match(input);

var mime = match.Groups["mime"].Value;
var encoding = match.Groups["encoding"].Value;
var data = match.Groups["data"].Value;
Run Code Online (Sandbox Code Playgroud)

注意:正则表达式适用于所示的输入.如果也有charset指定,它将无法工作,必须重写.


jaz*_*cat 18

实际上,你不需要正则表达式.根据维基百科,数据URI格式是

data:[<MIME-type>][;charset=<encoding>][;base64],<data>
Run Code Online (Sandbox Code Playgroud)

所以只需执行以下操作:

byte[] imagedata = Convert.FromBase64String(imageSrc.Substring(imageSrc.IndexOf(",") + 1));
Run Code Online (Sandbox Code Playgroud)

  • 我可能会使用此方法删除数据部分,然后使用Split(';')来获取其他部分.另外,认为它应该是Indexof(",")+ 1,而不是-1 ..当然,在实际代码中你还要检查-1(未找到)结果. (3认同)