Regex для анализа URI данных изображения - PullRequest
17 голосов
/ 19 апреля 2011

Если у меня есть:

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

Как я могу разобрать часть данных в:

  • MIME-тип (изображение / рисунок)
  • Кодировка (base64)
  • Данные изображения (двоичные данные)

Ответы [ 3 ]

23 голосов
/ 19 апреля 2011

РЕДАКТИРОВАТЬ : расширен, чтобы показать использование

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;

ПРИМЕЧАНИЕ : регулярное выражение применяется к входу, показанному в вопросе. Если бы также было указано charset, это не сработало бы, и его пришлось бы переписать.

18 голосов
/ 19 апреля 2011

На самом деле, вам не нужно регулярное выражение для этого.Согласно Википедии формат данных URI

data:[<MIME-type>][;charset=<encoding>][;base64],<data>

, поэтому просто выполните следующее:

byte[] imagedata = Convert.FromBase64String(imageSrc.Substring(imageSrc.IndexOf(",") + 1));
0 голосов
/ 05 апреля 2016

Вот мое регулярное выражение, в котором я также должен был отделить mime-тип (image / jpg).

^data:(?<mimeType>(?<mime>\w+)\/(?<extension>\w+));(?<encoding>\w+),(?<data>.*)
...