У меня есть несколько изображений, которые я сделал в inkscape с .svg
расширением. Эти изображения имеют разный размер (256*265, 512*512 и т.д.) в пикселях.
Как я могу изменить размер всех этих изображений сразу в Linux?
Я нашел решение своей проблемы, способ сделать это с помощьюrsvg-converter
и после поиска в 3W я нашел этот скрипт здесь
все, что вам нужно, это сделать этот скрипт исполняемым и запустить его, а затем указать новый размер ваших .svg
файлов .
Не зная причин вашего желания сделать это, моя первая реакция — не делать этого .
Размер SVG-файла действительно рекомендуется — он предназначен для увеличения и уменьшения размера (отсюда и масштабируемая векторная графика). Высота и ширина файла SVG для большинства практических целей не имеют значения. Если вы хотите, чтобы изображение было больше (например) на веб-странице, вы можете просто установить атрибуты высоты и ширины. Если вы экспортируете в файл PNG, вы можете установить любые размеры. Атрибуты height
и width
на самом деле даже не обязательны . Если высота или ширина не указаны для корневого <svg>
элемента, по умолчанию будет установлено значение 100%.
Игра с высотой и шириной действительно упускает одно из больших преимуществ файлов SVG, а именно масштабируемость.
Могут быть случаи, когда вам действительно нужно установить высоту и ширину файла SVG, но, на мой взгляд, это обычно происходит из-за ограничений вашего рабочего процесса или инструментов.
Файлы SVG — это просто файлы XML — вы можете открыть их в текстовом редакторе и посмотреть. Вы можете манипулировать ими так же, как и любым другим файлом XML. В Mozilla Dev Network есть фантастический справочник для изучения XML-стороны SVG-файлов.
Для управления файлом XML традиционным методом является использование XSL, языка таблиц стилей для преобразования одного файла XML в нечто другое (обычно в другой файл XML).
Создайте текстовый файл с именем scale-svg.xsl и вставьте следующее содержимое:
<xsl:stylesheet version="1.0">
<xsl:output method="xml"/>
<xsl:template match="svg:svg">
<xsl:copy>
<xsl:copy-of select="svg:metadata|svg:defs|sodipodi:namedview"/>
<xsl:element name="svg:g">
<xsl:attribute name="transform">
<xsl:value-of select="concat(concat('scale(',$scale),')')"/>
</xsl:attribute>
<xsl:copy-of select="*[not(svg:metadata|svg:defs|sodipodi:namedview)]"/>
</xsl:element>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Теперь вам нужно применить таблицу стилей к файлу SVG (или файлам). Доступно множество XSLT-программ. Если вы используете Linux, xlstproc
возможно, он уже установлен.
# This command will scale small.svg up by 3x
$ xsltproc --stringparam scale 3 scale-svg.xsl small.svg>big.svg
# This command will scale all SVG files in the current directory
$ for f in *.svg; do xsltproc --stringparam scale 3 scale-svg.xsl $f>3x_$f; done
Если вы хотите сделать что-то другое (например, изменить высоту и ширину документа SVG, а не масштабировать его), вам потребуется изменить файл XSL в соответствии с вашими потребностями. Существует множество руководств по XSL, например, этот в W3Schools .
Есть и другие подходы, которые вы принимаете. Быстрый поиск в Google также нашел svg-resizer — подход на основе JavaScript с использованием rsvg. Вероятно, вы также можете заставить ImageMagick сделать это.
Хотя у Inkscape есть возможности пакетной обработки, я не верю, что он может это сделать (опять же, размеры SVG-файла являются приблизительными, поэтому полезность ограничена).
В Inkscape есть возможность автоматизировать экспорт файлов SVG разных размеров. Параметры командной строки Inkscape позволяют вручную устанавливать высоту и ширину при экспорте файла PNG.
scale-svg.xsl:1: namespace error : Namespace prefix xsl on stylesheet is not defined
Йоонас
вискишеф