Як підключити svg малюнки до їх полотна в командному рядку?


13

Обрізка .svgфайлів у командному рядку проста: $ inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg

Мені потрібно зробити навпаки. Я хочу помістити креслення в 64 x 64полотно з очками (вже встановлене у всіх .svgфайлах). На жаль, Inkscape не дає FitDrawingToCanvasкоманди. Більше того, примірник повинен зберігати співвідношення сторін малюнка.

Якщо це важливо: я використовую rabu Ubuntu.


1
Чи вдасться змінити розмір після пристосування полотна до малюнка? Дивіться graphicsdesign.stackexchange.com/questions/6574/…
Таккат

Два питання: (1) розмір полотна вже встановлений у кожному екземплярі, але малюнки більше, ніж полотно; чи ви вставляєте SVG-малюнок до іншого документа svg ?; (2) "зберегти співвідношення сторін": це заплутано у світлі 64-кратного полотна, згаданого у ваших запитаннях, але чи є у вас запропонований автоматизований процес прийняття рішень щодо обробки неквадратичного матеріалу? наприклад, висота повинна бути 64pt у всіх випадках ...
horatio

@Takkat: Дякую за підказку. Робочий процес працює, але співвідношення сторін руйнується.
Шукатимемо

@horatio: (1) малюнок менше, ніж полотно, і так, і те й інше в одному файлі. (2) Я хочу масштабувати креслення до такої точки, що макс. (Ширина малюнка, малюнокВисота) = 64пт.
Стефан Ендруліс

@Takkat: rsvg-convert має аргумент --keke-ratio-ratio :)
Стефан Ендруліс

Відповіді:


2

Я знайшов спосіб зробити це в цьому запитанні: Inkscape - центральний малюнок на сторінці через командний рядок / термінал

З "foo.svg" як зображенням для редагування:

inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit foo.svg

Щоб відредагувати всі зображення svg у поточному каталозі:

inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileClose *.svg

Але ця друга команда відкриває тонну вікон, що призведе до аварії вашого комп'ютера, якщо ви редагуєте занадто багато зображень. Тільки для Linux ця команда буде працювати краще:

for img in $(ls *.svg) ; do inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; done

Для вищевказаної команди, якщо будь-який із файлів є посиланнями, Inkscape відредагує цільовий файл, на який вказує символьне посилання. Якщо ви не хочете, щоб Inkscape цього робив, ви можете відфільтрувати будь-які посилання за допомогою цієї команди:

for img in $(ls *.svg) ; do if [[ $(readlink $img) == "" ]] ; then inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; fi ; done


Хоча я в цьому, я можу також розмістити сценарій bash, який я зробив для цього:

#!/bin/bash
# inkscape-center <file-or-directory>...

_analyse() {
    if [ -d "${1}" ] ; then
        _centerAll "${1}" ;
    else
        _center "${1}" ;
    fi
}

_centerAll() {
    cd "${1}" ;
    for img in $(ls "*.svg") ; do
        _filterSyms "${img}" ;
    done
}

_filterSyms() {
    if [[ $(readlink "${1}") == "" ]] ; then
        _center "${1}"
    fi
}

_center() {
    inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit "${1}"
}

for arg ; do
    _analyse "${arg}" ;
done

Я назвав його inkscape-centerі запустив так:

inkscape-center <file-or-directory>

Це вимагає стільки аргументів, скільки вам потрібно, так що ви можете зробити щось подібне:

inkscape-center 1st.svg 2nd.svg 3rd.svg 4th.svg

Будьте уважні - якщо ви вкажете каталог замість файлу, він буде редагувати кожен SVG-файл у цьому каталозі.


1

Ви можете використовувати viewBox для досягнення того, що ви хочете. Я не знаю, чи є спосіб зробити це з Inkscape, але оскільки SVG є стандартним форматом і може бути інший інструмент, який зробить потрібну вам роботу. Швидкий пошук "інструментів командного рядка svg" виявив цікаві результати, включаючи цей для створення значків CSS.

Другим варіантом було б написати власний інструмент своєю обраною мовою. Основна суть полягає в тому, щоб встановити viewBox на висоту документа, а потім встановити потрібну ширину та висоту документа. Нарешті, встановіть атрибут saveAspectRatio.

Ось як виглядають описані вище модифікації в документі, який був спочатку 744x1052.

<svg
   width="64"
   height="64"
   viewBox="0 0 744 1052"
    preserveAspectRatio="xMinYMin slice"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.