Я точно не знаю, как правильно сформулировать этот вопрос, поэтому попробую:
Смотрите растеризованный SVG на эта страница? Выглядит довольно искаженным, и — извините меня язык — скорее с ***. Теперь давайте сравним это с тем Вот. Оба файла имеют одинаковый SVG-файл, а исходный код идентичен викитексту. Разница в том, как создается растеризованная «миниатюра», кажется.
Результат я получаю от MediaWiki.
Предполагаемый результат.
Из того, что я заметил — поправьте меня, если я ошибаюсь — и Википедия, и Викия либо создают несколько растеризованных миниатюр для SVG, либо просто генерируют их по требованию, в зависимости от размера, который хотят страницы. Однако по умолчанию MediaWiki генерирует только одну миниатюру, которая, как предполагается, имеет то же разрешение, что и исходный SVG, — что дает нам размытые и **** растровые изображения при растеризации маленького SVG в большое изображение.
Либо так, либо SVG-файлы не масштабируются / не изменяют размер до миниатюры / растеризации, когда они должны быть.
Просто для головы, вот некоторые из моего LocalSettings.php:
$wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg',
'xls', 'mpp', 'pdf', 'ppt', 'tiff', 'ogg', 'svg',
'woff', 'eot', 'woff2'
);
// $wgSVGConverters['ImageMagick'] = '"' . $wgImageMagickConvertCommand . '" -background white -thumbnail $widthx$height^! $input PNG:$output';
// $wgSVGConverters['ImageMagick'] = '$path/convert -density $width -geometry $width $input PNG:$output';
$wgSVGConverters['ImageMagick'] = '$path/convert -density 1200 -background none -geometry $width $input PNG:$output';
$wgSVGConverters['rsvg'] = '/usr/bin/rsvg-convert -w $width -h $height $input -o $output';
$wgSVGConverter = 'ImageMagick';
// $wgSVGConverter = 'rsvg';
$wgSVGMaxSize = 2048;
$wgMaxImageArea = 1.25e7;
$wgMaxAnimatedGifArea = 1.0e6;
$wgUseImageResize = true;
$wgGenerateThumbnailOnParse = true;
Итак … как мне разрешить иметь несколько миниатюр, если их отсутствие является причиной проблемы? Это даже причина проблемы для начала? Если нет, то какова реальная причина, почему я не получаю желаемый результат? Что я могу сделать?
РЕДАКТИРОВАТЬ: Уже решено переключением на ImageMagick для RSVG.
В Imagemagick вам просто нужно обеспечить большую плотность перед чтением файла SVG. Так что это работает для меня.
convert -density 600 The_Mystics.svg mystics.png
Уже решено переключением с ImageMagick на RSVG.
Поверьте мне, лучшее решение — просто отключить imageMagick и просто позволить SVG отображаться как SVG в их исходном идеальном разрешении.
Здесь вы можете увидеть, как разрабатывается нативная функция SVG, но она еще не закончена.
https://phabricator.wikimedia.org/T5593
Вот бета-функция ov-in svg для wmf:
https://phabricator.wikimedia.org/T134482
Ларсон писал:
Хотелось бы, чтобы SVG визуализировался изначально в клиенте. Это 2013 год, поддержка есть — несмотря на 4-летний комментарий Брайона по этому поводу. Если вы не хотите включать его на сайтах Викимедиа, не нужно. Для моего сайта я бы предпочел, чтобы файл загружался и кэшировался один раз, а не извлекал несколько растеризованных размеров. «
Документация Mediawiki, кажется, делает вид, что клиентский рендеринг SVG выполняется на 99% веб-сайтов, а практика рендеринга в png никогда не выполняется. Они в основном игнорируют, что нативная обработка SVG является опцией, и ЛУЧШЕЙ опцией для любого сайта, не относящегося к wmf.
Это происходит главным образом потому, что документация нуждается в обновлении и является беспорядком, нет злонамеренных намерений.
ImageMagick содержит ошибки, и вместо обычных изображений будет использоваться библиотека GD MediaWiki.
Единственная причина, по которой mediawiki png отображает svgs, заключается в том, что им нравится поддерживать действительно старые браузеры, такие как IE6, которые никто не использует. Они делают это потому, что база пользователей Википедии огромна, и все демографические люди используют ее.
Просто позвольте SVG отображаться браузером на стороне клиента. Вы будете использовать меньше мощности сервера и не будете иметь огромную устаревшую цепочку зависимостей для беспокойства.
Установите это:
https://www.mediawiki.org/wiki/Extension:NativeSvgHandler
$wgFileExtensions[] = 'svg';
$wgAllowTitlesInSVG = true;
$wgUseImageMagick = false;
//Make sure this variable is false or not there at all:
$wgSVGConverter = false;
Если вы хотите прочитать больше (хотя это плохо написанная страница):
https://www.mediawiki.org/wiki/Manual:Image_administration#SVG
редактировать:
Не говоря уже о том, почему вы взяли бы SVG, а затем динамически их растеризовали? Вы также можете просто сохранить изображение как png.
Это разрушает все большие преимущества SVG.
Четкое изображение в полном разрешении
Может быть стилизован с помощью CSS
фильтры
Анимации
Полностью редактируемый файл, просто откройте его в текстовом редакторе
Меньший размер файла, в зависимости от того, насколько эффективно был создан SVG и насколько он сложен.
Проведите SVG через SVGOMG, это может оптимизировать файл много. Лично иногда, даже после того, как SVGOMG выполнит свою работу, можно даже на несколько десятков байт уменьшить мои собственные методы.