Я боролся с этим некоторое время, и, похоже, нигде не могу найти ответ (который работает). У меня есть файл SVG, который выглядит так:
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
...
width="72.9375"
height="58.21875"
...>
...
<g
...
transform="translate(10.75,-308.96875)"
style="...">
<path
inkscape:connector-curvature="0"
d="m -10.254587,345.43597 c 0,-1.41732 0.17692,-2.85384 0.5312502,-3.5625 0.70866,-1.41733 2.14518,-2.82259 3.5625,-3.53125 1.41733,-0.70866 2.11392,-0.70867 3.53125,0 1.41732,0.70866 ... z"
... />
</g>
</svg>
Я хочу удалить transform="..."
линию, но изображение остается там, где я ее разместил (в InkScape). Если я вручную удаляю преобразование, изображение перемещается в другую часть экрана (как и ожидалось), но мне нужно полностью избавиться от преобразования и, в то же время, оставить изображение именно там, где я хочу. Есть ли способ удалить / сгладить преобразования в сами координаты пути? (Единственные преобразования, с которыми мне приходится иметь дело, это перевод и масштабирование, без матриц.)
Ответы:
Как убрать трансформации в Inkscape
Как полностью переместить все объекты без создания других атрибутов преобразования
Перейти к объекту -> Transform
В панели Transform
Снимите флажок Относительное движение и установите флажок Применить к каждому объекту отдельно.
источник
Я решил, в чем проблема. Я надеялся, что мне не придется прибегать к ответу Роберта, хотя я рад за подтверждение, что это сработает! В конце концов ответ Дюопикселя был самым близким, хотя, оказывается, что-то еще происходило.
Когда вы работаете с разными путями в документах Inkscape, я считаю, что по умолчанию он группирует их вместе под
<svg:g.../>
тегом. При изменении путей в группе Inkscape автоматически добавляет преобразование в группу для представления этих изменений. Однако если вы откроете редактор XML и перетащите свой путь за пределы<svg:g.../>
тега и сделаете его собственным<svg:path.../>
тегом, Inkscape сможет редактировать отдельные точки по своему усмотрению . В конце концов, это оказалось проблемой группировки, хотя я работал только с одним путем! Надеюсь, что это помогает другим в подобных ситуациях.источник
источник
Существует расширение inkscape под названием Apply Transforms, которое пересчитывает пути с их преобразованиями. Это именно то, что я искал.
После установки вы найдете его в меню « Расширения»> «Изменить путь»> «Применить преобразование» .
Титры: Inkscape forum> Удалите все преобразования, оставив их на месте
источник
Для групп перегруппировка может сделать работу быстро. Выберите группу и нажмите Ctrl + Shift + G (разгруппировать), а затем Ctrl + G (группа).
Для некоторых объектов, которые имеют похожую проблему, например, спирали и звезды, быстрый способ - нажать Ctrl + Alt + C (штрих к пути) - это, однако, преобразует объект в чистый путь и удаляет все дополнительные атрибуты, такие как sodipodi: cx, sodipodi: революции и так далее.
источник
Откройте свой svg на Inkscape :
Таким образом вы избавитесь от преобразований, примененных к группе, и они будут перенесены в пути, содержащиеся в этой группе.
источник
По моему опыту, если вы используете Inkscape, достаточно слегка переместить элемент пути (например, с помощью клавиш курсора), и Inkscape удалит атрибут transform и соответствующим образом скорректирует данные пути. (Раздражает, если вы действительно хотите сохранить атрибут преобразования.)
Итак, вы можете просто выбрать путь (убедитесь, что это путь, а не окружающая группа), нажать правую и левую клавиши курсора, и все готово.
источник
<g>
и я хочу сохранить преобразование в<g>
.Хотя я предпочитаю Inkscape, Affinity Designer (~ 40 долларов США / Mac) сэкономил мне много времени при работе с Android Vector Drawables.
Откройте SVG, File -> Export -> SVG -> More -> Flatten transforms отлично работали.
источник
SVGO является отличным открытым исходным кодом инструмент командной строки для этого и куча других оптимизаций. Для него есть такой же отличный веб-интерфейс под названием SVGOMG.
Соответствующие параметры в этом случае
moveGroupAttrsToElems
(SVGOMG:Move group attrs to elements
) , чтобы переместитьtransform
атрибуты из групп элементов пути, плюсconvertPathData
(SVGOMG:Round/rewrite paths
) выравниватьсяtransform
вd
.источник
Следует отметить, что в настройках есть «Оптимизированный» режим:
Настройки Inkscape> Трансформации> Трансформация магазина> Оптимизировано
Что должно минимизировать появление
transform
атрибутов в максимально возможной степени (но не делает).Похоже, это включено по умолчанию.
Согласно обсуждению , один случай, когда этот оптимизированный режим испытывает недостаток в усердии, - это когда размер страницы изменяется . Это заставляет
translate
преобразование быть примененным к<g>
элементу слоя . Кажется, что на данный момент лучшим решением является эвакуация детей в другой слой.источник
translate
преобразований на каждом слое, попробуйте открыть.svg
файл в текстовом редакторе и управлять атрибутами высоты и ширины, которые отображаются в верхней части.Inkscape имеет возможность очистить данные преобразования, но при этом оставить значение объекта без изменений.
В Inkscape выберите объект и меню «Путь», «Упростить». Теперь у вас будут удалены преобразования.
источник
В этом случае просто добавьте перевод к значениям m для каждого дочернего элемента, чтобы -10,254587 + 10,75 = -0,504587 и -308,96875 + 345,43597 = 36,46722.
Поскольку все термины в примере являются относительными (то есть строчными буквами), вот и все. Если бы они были абсолютными (верхний регистр), например, M или C, их тоже пришлось бы корректировать.
Для масштаба вы должны умножить все дочерние значения на шкалу.
источник
источник
<g>
Сtransform
пребыванием атрибута так же , как это было. Кроме того, мой объект (как показано в вопросе здесь) уже является путем.Чтобы удалить атрибут преобразования из
g
элемента (группы) в Inkscape, вы можете переместить группу на ее окончательное место, разгруппировать ее, а затем перегруппировать все элементы. Теперь новая группа создана, и если вы не переместите ее снова, к ней не будет прикреплен атрибут transform.источник
Если кто-то приземлится здесь в поисках решения для этого в Sketch 3, выберите слой и затем нажмите Layer-> Paths-> Flatten.
источник
Нашел это:
*: Или, по крайней мере, разместите объекты там, где они вам нужны, относительно верхнего левого угла страницы. К сожалению, координаты SVG ссылаются на верхний левый угол, а Inkscape изменяет размер страницы относительно нижнего левого!
источник
Мне удалось избавиться от
matrix(...)
преобразования (из-за зеркального отображения), объединив путь с прямоугольником, а затем удалив узлы прямоугольника.translate(...)
Часть осталась , хотя.источник
В моем случае сохранение как оптимизированный SVG решило проблему. Так что в Inkscape используйте:
Файл -> Сохранить как ... -> Оптимизирован SVG.
источник
transform
атрибута, который не поддерживается Android Studio.Это работает, если вы используете Inkscape:
Во всех случаях, которые я пробовал, это удалило все атрибуты преобразования. Не уверен, что это работает для более сложных SVG.
источник
Я попробовал опубликованное здесь решение, а именно: удалить групповые теги в SVG-файле и снова открыть его в Inkscape (0.48.3.1 в моем случае). Увы, после того, как я снова перевел пути, используя режим выбора и преобразования (F1) и сохранил его, теги группы снова появились! Inkscape сохраняет все преобразования, примененные к пути в окружающем элементе группы. Если вы не используете инструмент выбора пути (F2), нажмите Ctrl + A и переместите узлы пути в нужное место. После того, как я сделал это и сохранил впоследствии, Inkscape не добавил групповые теги, потому что этот перевод применялся непосредственно к модели пути. Надеюсь это поможет.
источник
В моем случае группы на самом деле вызваны слоями. Удаление всех слоев в документе привело к удалению группы и преобразования (возможно, в сочетании с разгруппировкой объектов и их перегруппировкой и т. Д., Как в разделе Удаление преобразований в файлах SVG (answer-35490189 из @Charlie выше))
источник
Моя конкретная проблема была с символами, которые были определены вне страницы, таким образом, требуя преобразования, которое будет показано на странице.
Чтобы переместить символы на страницу без преобразования, мне нужно было выполнить следующие действия в Inkscape:
источник
Это кажется случайным, но ничто другое, что я пробовал, не сработало, так что вот вам случайный другой человек. Некоторые из моих путей имели своего рода поле вокруг них, которое можно было увидеть только при их выборе ( ). Я думаю, что это было создано, когда я вставил слой из другого файла Inkscape и повернул его на 90 градусов. Это заставило заливку узора на фигурах иметь другое преобразование (линии разнесены дальше). Это также заставило выравнивать объекты не работать, как ожидалось. Использование Apply Transform, упомянутого @Piotr_cz, решило проблему с преобразованием, но странное поле осталось. Я случайно избавился от него, изменив Blur на Stroke на любое значение и вернув его к нулю.
источник
Как-то мне не повезло ни с одним из подходов. Если
<defs>
в вашем svg есть раздел и его использование выглядит следующим образом:Возможно, вам придется удалить все использования и удалить все из раздела defs. Затем вы можете использовать inkscape для правильного размещения всего этого, а затем применить преобразования, используя упомянутый плагин. Надеюсь, это кому-нибудь поможет.
источник
У меня была эта проблема в течение многих лет. Очевидно, что решение заключается в том, чтобы иметь возможность динамически воспроизводить преобразования в браузере, если он не будет «исправлен» в inkscape.
Пользователь Mc на форумах Inkscape дал мне это решение .
Решение создает текущее преобразование между элементом SVG и его корневым элементом SVG, а затем возвращает полный набор информации BBox на основе суммы преобразований.
Также можно было бы легко изменить, к какому элементу относятся вычисления, если вы захотите выполнить в браузере работу между двумя частями одного и того же файла SVG.
Наконец, у меня действительно может быть панорама SVG.
источник
Inkscape 1.0 на Kubuntu 20.04
Хотя эта ветка довольно старая, я хотел бы опубликовать свой опыт / решение. Я столкнулся с этой проблемой, когда пытался создать шаблон для FreeCAD TechDrawing Workbench. Эти шаблоны не должны содержать никаких преобразований.
В моем случае мне пришлось добавить логотип компании из внешнего файла .svg (целиком сделанного с помощью Inkscape). Этот логотип содержит как графические, так и текстовые элементы. При копировании этого логотипа в шаблон были созданы преобразования, из-за которых шаблон работал некорректно в FreeCAD.
Во-первых, это решение, предложенное на www.freecadweb.org / ... , не работает для меня. Вот почему я искал в Интернете и нашел это обсуждение.
Во-вторых, ни одно из предложенных выше решений не сработало для меня, но они поставили меня на правильный путь. Ответ Чарли был близок, но Object> Transform> Uncheck относительный ход> Apply не показал никакой разницы.
Что сработало для меня:
Работает нормально, когда я использую этот шаблон в FreeCAD.
Одна странная деталь: хотя мое решение указывает на то, что текстовые элементы были проблемой в моем случае, это не может быть так просто. На самом деле базовый документ (тот, в который я скопировал логотип) содержит много текстовых элементов, и я не конвертировал ни один из них. Так что это может быть сочетание «внешнего источника» и текстовых элементов. Я просто публикую эту деталь как подсказку для других, у которых могут быть связанные проблемы.
источник