如何从 Mediawiki 中的低分辨率 SVG 中获取高分辨率缩略图?

How to get high-res thumbnails out of low-res SVGs in Mediawiki?

我不知道如何正确地表达这个问题,所以我会尝试一下:

查看 this page? Looks pretty distorted, and - excuse me language - rather s***. Now let's compare it with the one here 上的光栅化 SVG。它们都有完全相同的 SVG 文件,并且源代码在 wikitext 中是相同的。似乎不同之处在于栅格化 "thumbnail" 的生成方式。

我从 MediaWiki 得到的结果。

预期的结果。

据我所知 - 如果我错了请纠正我 - Wikipedia 和 Wikia 要么为 SVG 创建多个光栅化缩略图,要么只是根据页面所需的大小按需生成它们。然而,默认情况下,MediaWiki 仅生成一个缩略图,这意味着与原始 SVG 具有相同的分辨率 - 当将小 SVG 光栅化为大图像时,这会给我们带来模糊和****的光栅图像。

或者 SVG 在 thumbnailing/rasterization 之前没有得到 scaled/resized,而它们应该是。

提醒一下,这里有一些来自我的 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 切换到 RSVG 解决。

在Imagemagick中,你只需要在读取svg文件之前提供一个大的密度。所以这对我有用。

convert -density 600 The_Mystics.svg mystics.png

相信我,最好的解决方案就是禁用 imageMagick,让 SVG 以其原始的完美分辨率呈现为 SVG。

这里可以看到正在开发的原生SVG特性,还没有完成。 https://phabricator.wikimedia.org/T5593

这是为 wmf 提议的 beta 功能选择加入 svg: https://phabricator.wikimedia.org/T134482

”拉森写道:

希望在客户端中本地呈现 SVG。现在是 2013 年,支持还在——尽管 Brion 在这方面已有 4 年历史。如果您不想在维基媒体网站上启用它,没关系,您不必这样做。对于我的网站,我宁愿将文件下载并缓存一次,也不愿获取多次光栅化大小调整。"

Mediawiki 文档似乎假装 SVG 的客户端渲染在 99% 的网站上完成,而渲染到 png 的做法从未完成。他们基本上忽略了本地 SVG 处理是一个选项,并且是任何非 wmf 站点的最佳选项。 这主要是因为文档需要更新而且很乱,没有恶意。

ImageMagick 有问题,mediawiki 的 GD 库将用于普通图像。

mediawiki png 呈现 svg 的唯一原因是因为他们喜欢支持真正老式的浏览器,例如 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 的制作效率和复杂程度。

运行 SVGs through SVGOMG, 可以优化文件很多。就我个人而言,有时在 SVGOMG 完成工作后,使用我自己的技术甚至可以让小几十个字节更小。