Преобразование данных SVG в изображение [dубликат]

Регулярное выражение не учитывает символы UTF-8 по умолчанию. Мета-символ \ s учитывает только исходный латинский набор. Поэтому следующая команда удаляет только табуляции, пробелы, возврат каретки и новые строки

  // http://stackoverflow.com/a/1279798/54964 $ str = preg_replace ('/ \ s +  / ',' ', $ str);   

Когда UTF-8 становится основным, это выражение будет чаще останавливаться / останавливаться, когда оно достигает новых символов utf-8, оставляя за ним пробелы \ s не может учитываться.

Чтобы справиться с новыми типами белых пространств, введенных в unicode / utf-8, требуется более обширная строка для сопоставления и удаления современного пробела.

Потому что регулярные выражения по умолчанию не распознают многобайтовые символы, для их идентификации может использоваться только разделительная мета-строка, чтобы исключить, чтобы сегменты байтов изменялись в других символах utf-8 ( \ x80 в quad set может заменить все байты \ x80 в умных кавычках)

  $ cleanedstr = preg_replace ("/ (\ t | \n | \ v | \ f  | \r | | \ xC2 \ x85 | \ xc2 \ xa0 | \ xe1 \ xa0 \ x8e | \ xe2 \ x80 [\ x80- \ x8D] | \ xe2 \ x80 \ xa8 | \ xe2 \ x80 \ xa9 | \ xe2  \ x80 \ xaF | \ xe2 \ x81 \ x9f | \ xe2 \ x81 \ xa0 | \ xe3 \ x80 \ x80 | \ xef \ xbb \ xbf) + / "," _ ", $ str);   

Здесь учитываются и удаляются вкладки, новые строки, вертикальные вкладки, формы, возврат каретки, пробелы и дополнительно из здесь :

nextline, неразрывные пробелы, разделитель монгольских гласных, [en quad, em quad, en space, em space, пространство три на em, пространство с четырьмя пробелами, пространство с шестью на em, пространство цифр, пространство препинания, тонкое пространство, пространство для волос, пространство с нулевой шириной, нулевой ширины, стопор для нулевой ширины, разделитель нулевой ширины], разделитель строк, разделитель абзацев, узкое пространство без разрыва, среднее математическое пространство, столярный столик, идеографическое пространство и нулевая ширина неразрывное пространство.

Многие из этих хакеров в файлах xml при экспорте из автоматизированных инструментов или сайтов, которые вытесняют текстовый поиск, распознавание и могут быть незаметно вставлены в исходный код PHP, что заставляет парсер перейти к следующей команде (разделители абзацев и строк), которые приводят к пропуску строк кода, что приводит к прерывистым необъяснимым ошибкам, которые мы начали называть «текстологическими заболеваниями»

[ не безопасно копировать и вставлять из Интернета. Используйте защитный код для защиты вашего кода. лол]

8
задан Scott 6 June 2011 в 16:35
поделиться

3 ответа

[D3] Ну.

Я устанавливаю этот пакет nuget

  Install-Package Svg  
]

Здесь вы можете найти исходный код пакета на github здесь

. Тогда вы можете сделать это:

  var svgDocument = SvgDocument.  Открытый (путь);  using (var smallBitmap = svgDocument.Draw ()) {var width = smallBitmap.Width;  var height = smallBitmap.Height;  if (width! = 2000) // Я изменяю размер моего растрового изображения {width = 2000;  высота = 2000 / маленькийBitmap.Width * высота;  } using (var bitmap = svgDocument.Draw (ширина, высота)) // Я снова визуализирую {bitmap.Save (pngPath, ImageFormat.Png);  }}  

Наслаждайтесь!

4
ответ дан Daniel 16 August 2018 в 01:49
поделиться

Вы можете взглянуть на SVG Rendering Engine на CodePlex. Он имеет перегрузку, которая будет принимать поток в памяти (ваш SVG), который затем может быть использован для преобразования в изображение .

4
ответ дан keyboardP 16 August 2018 в 01:49
поделиться
  • 1
    спасибо, я пытаюсь использовать предложение ur, но я получаю ошибку Ссылка на объект, не установленная на экземпляр объекта , могла бы u помочь plz – Armance 7 December 2011 в 13:29
  • 2
    Я также получаю ссылку «Объект», не установленную на экземпляр объекта ». когда я вызываю метод Draw (). – Frank Hale 14 December 2011 в 00:04
  • 3
    @FrankHale - Помогло ли решение в ссылке astrocybernaute для вас? – keyboardP 14 December 2011 в 01:46
  • 4
    Код кода рендеринга SVG не работает для меня. Я получаю ошибку ссылки объекта, когда пытаюсь вызвать Draw (). В настоящее время я использую метод с некоторыми pinvokes из libs, которые установлены с The Gimp. – Frank Hale 14 December 2011 в 05:29
  • 5
    Я знаю, что мой SVG хорошо сформирован. У меня нет проблем с его рендерингом или с использованием libs из Gimp. Я не знаю, что происходит с методом SVG Rendering Engine. – Frank Hale 14 December 2011 в 05:30

Все, что вам нужно сделать, это установить пакет SVG Rendering Library nuget.

  Install-Package Svg  

И затем

  // читаем svg-документ из файловой системы var svgDocument = SvgDocument.  Открытый ( "test.svg");  var bitmap = svgDocument.Draw ();  // сохранение преобразованного svg в файловую систему bitmap.Save ("test.png", ImageFormat.Png);   

Вот и все.

2
ответ дан user 16 August 2018 в 01:49
поделиться
  • 1
    При использовании в цикле это создает мусор после первого файла – toddmo 16 September 2017 в 02:04
Другие вопросы по тегам:

Похожие вопросы: