LINUX.ORG.RU

svgcleaner 0.7.0

 ,


1

4

Вышла новая версия программы для очистки SVG-файлов от лишней информации.

svgcleaner позиционируется как оптимизатор без потерь, строго следующий спецификации SVG 1.1 Full.

Основные изменения:

  • ядро (консольная версия) переписано с C++ на Rust;
  • реализованы собственные библиотеки для разбора SVG и представления SVG в виде DOM;
  • программа стала работать приблизительно в 3 раза быстрее;
  • все функции очистки теперь работают в режиме lossless;
  • степень очистки упала примерно на 5% ради стабильности и корректности;
  • добавлена документация для каждой опции очистки;
  • графический интерфейс переписан с нуля и вынесен в отдельный репозиторий.

Программа распространяется под лицензией GNU GPL v2. Сопутствующие библиотеки — под MPL v2.

Готовые сборки

>>> Подробности

★★★★★

Проверено: Shaman007 ()
Последнее исправление: sudopacman (всего исправлений: 6)

Ответ на: комментарий от AVL2

раз уж пишете и развиваете

Меньше всего я хочу превращения в комбайн. Одна задача - одна программа.

RazrFalcon ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Этого мало. Он всё равно оставит кучу мусора.

RazrFalcon ★★★★★
() автор топика

Хороший проект, спасибо.

EXL ★★★★★
()
Ответ на: комментарий от RazrFalcon

Что пишет?

недопустимая инструкция. C записью в syslog

Oct 10 14:21:34 SkyMaverick kernel: [22930.914246] traps: 7za[17297] trap invalid opcode ip:5441d6 sp:7ffca8a051c0 error:0 in 7za[400000+1f8000]

SkyMaverick ★★★★★
()
Ответ на: комментарий от SkyMaverick

Магия. Баг 7z походу. У вас что за проц? Может я криво собрал 7z в статику... Можете удалить его и кинуть симлинк на системный, если есть.

RazrFalcon ★★★★★
() автор топика
Ответ на: комментарий от SkyMaverick

Возможно бинарник 7za, идущий в комплекте с программой, собран со всякими навороченными оптимизациями SSE.

Что если заюзать 7za из своего дистрибутива (/usr/bin/7za, предварительно установить пакет 7z)?

EXL ★★★★★
()
Ответ на: комментарий от EXL

Я хочу минимум зависимостей сборки. Да и api у него наркоманский. Или вы про врапперы?

Мне проще процесс запустить.

RazrFalcon ★★★★★
() автор топика
Ответ на: комментарий от RazrFalcon

Я хочу минимум зависимостей сборки.

Ну lib7z не такая уж большая либа. Можно даже в качестве submodule положить в репу, а то и вообще директорией.

Мне проще процесс запустить.

Проще-то оно проще, но с процессами всегда такие вот косяки и плюс тому, кому потребуется собрать это приложение для какой-нибудь экзотической архитектуры придётся думать ещё и о 7za.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Ну lib7z не такая уж большая либа.

Суть не в размере, а в мороке со сборкой. На винде и маке всё ок, по крайней мере пока претензий не было. А про линь я вообще не переживаю. Это тестовая сборка, пока в репы не добавят. Вон в арче уже есть.

кому потребуется собрать это приложение для какой-нибудь экзотической архитектуры придётся думать ещё и о 7za.

Поддерживается только win, linux и mac на базе x86_64. Все остальные - ССЗБ.

RazrFalcon ★★★★★
() автор топика
Ответ на: комментарий от Demimurych

Да, но не то что бы с меньшим. У нас немного разные направленности. В целом svgcleaner имеет более высокую степень очистки и корректности.

RazrFalcon ★★★★★
() автор топика

Каждый день пользуюсь inkscape, как мне может пригодиться svgcleaner? Что конкретно оптимизирует данная софтина? Что имеется ввиду под «лишней информацией»?

Deleted
()
Ответ на: комментарий от RazrFalcon

В svgo есть одна полезная опция - когда он объединяет разные контуры в один, чем часто сильно уменьшает исходный svg. Есть ли что-то похожее у Вас?

Demimurych
()
Ответ на: комментарий от Demimurych

чем часто сильно уменьшает исходный svg

В 99% случаев svgo жмет слабее svgcleaner.

RazrFalcon ★★★★★
() автор топика
Ответ на: комментарий от Demimurych

когда он объединяет разные контуры в один

На основании одинаковой заливки?

AP ★★★★★
()
Ответ на: комментарий от Deleted

Каждый день пользуюсь inkscape, как мне может пригодиться svgcleaner? Что конкретно оптимизирует данная софтина? Что имеется ввиду под «лишней информацией»?

Inkscape дописывает в SVG служебные данные, которые нужны только в том случае, если файл надо потом снова открыть в Inkscape и отредактировать. Классический пример — контурные эффекты (live path effects), которые выглядят как 'исходный контур + описание его изменения + конечный контур, который пользователь видит'.

Я уж не говорю о том, что каждый второй дизайнер забывается чистить defs встроенной командой инкскейпа.

AP ★★★★★
()
Ответ на: комментарий от AP

Да уж, многого я не знаю. За инфу спасибо.

Deleted
()

А ты интерфейс отдельно писал только ради Rust? Если нет, почему не gtk-rs, им же уже худо бедно можно пользоваться.

consensus
()

И моя просьба, не распространяй бинари в 7z. Сколько не видел бинарных сборок на github, с 7z сталкивался крайне редко, точнее первый раз. Или это какая-то религиозная причина его популяризовать?

consensus
()
Ответ на: комментарий от consensus

А ты интерфейс отдельно писал только ради Rust? Если нет, почему не gtk-rs, им же уже худо бедно можно пользоваться.

Чтобы сношаться со сборкой под нелинупс? Классная идея :)

AP ★★★★★
()

А графическая оболочка на раст не переписана — слишком много и ненужно, или под раст нет тулкитов графических?

evilface ★★
()

ядро (консольная версия) переписано с C++ на Rust
Готовые сборки
Дистрибуция бинарей под линем

Мсье, вы латентный проприетарщик.

robus ★★★★★
()
Ответ на: комментарий от uin

2) удаление первичного захголовка <?xml version=«1.0» encoding=«UTF-8»>

Оооо, я тебе скажу, это очень полезный заголовок. Ибо всякое бывает в xml с кодировками

cvs-255 ★★★★★
()

А почему бы не сделать опциональную поддержку lossy? Добавить опцию --lossy, которая будет требоваться для других опций вроде округления чисел или lossy-сжатия цветов. Если уж религия у тебя такая, то можешь сделать так, чтобы по умолчания эта опция выдавала ошибку и требовала ввести ещё и --force. Или, там, чтобы юзер явно написал «yes, compress my file with generation loss». У меня вот, например, часто бывает такое, что вроде и привязываю всё к сетке в инкскейпе, но в исходнике потом куча нулей после запятой и пара бесполезных цифр в конце. Кому-то, может, удобно будет, если цвета вроде #abcdef будут преобразованы в #ace. Ну и опции для контроля округления чисел и цветов.

aliceklipper
()
Ответ на: комментарий от SkyMaverick

То же самое, Ubuntu MATE 16.04 x64.

$ ldd ./lib/plugins/platforms/libqxcb.so
ldd: ./lib/plugins/platforms/libqxcb.so: No such file or directory
$ ldd ./lib/platforms/libqxcb.so
	linux-vdso.so.1 =>  (0x00007fff80bf4000)
	libQt5XcbQpa.so.5 => lib/libQt5XcbQpa.so.5 (0x00007f7e567a3000)
	libQt5Gui.so.5 => lib/libQt5Gui.so.5 (0x00007f7e562c9000)
	libQt5Core.so.5 => lib/libQt5Core.so.5 (0x00007f7e55d3b000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7e5598a000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7e555c1000)
	libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007f7e553be000)
	libXi.so.6 => /usr/lib/x86_64-linux-gnu/libXi.so.6 (0x00007f7e551ae000)
	libxcb-render-util.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-render-util.so.0 (0x00007f7e54faa000)
	libSM.so.6 => /usr/lib/x86_64-linux-gnu/libSM.so.6 (0x00007f7e54da1000)
	libICE.so.6 => /usr/lib/x86_64-linux-gnu/libICE.so.6 (0x00007f7e54b87000)
	libxcb-render.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-render.so.0 (0x00007f7e5497d000)
	libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f7e5475a000)
	libxcb-image.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-image.so.0 (0x00007f7e54555000)
	libxcb-icccm.so.4 => /usr/lib/x86_64-linux-gnu/libxcb-icccm.so.4 (0x00007f7e54350000)
	libxcb-sync.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1 (0x00007f7e54148000)
	libxcb-xfixes.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0 (0x00007f7e53f40000)
	libxcb-shm.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007f7e53d3c000)
	libxcb-randr.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-randr.so.0 (0x00007f7e53b2d000)
	libxcb-shape.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shape.so.0 (0x00007f7e53929000)
	libxcb-keysyms.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-keysyms.so.1 (0x00007f7e53726000)
	libxcb-xinerama.so.0 => not found
	libxcb-xkb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-xkb.so.1 (0x00007f7e5350a000)
	libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f7e532c7000)
	libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f7e5301c000)
	libQt5DBus.so.5 => lib/libQt5DBus.so.5 (0x00007f7e52f9b000)
	libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f7e52c61000)
	libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f7e5294f000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7e52732000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7e52429000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f7e5220e000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7e51ff8000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7e51df3000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f7e51beb000)
	/lib64/ld-linux-x86-64.so.2 (0x000055a4674d7000)
	libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f7e519d8000)
	libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f7e517d3000)
	libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f7e515cf000)
	libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f7e513c8000)
	libxcb-util.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-util.so.1 (0x00007f7e511c2000)
	libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f7e50f98000)
	libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f7e50d73000)
	libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f7e50b03000)
plantago
()
Ответ на: комментарий от plantago

Таки да, тот же отсутствующий по-умолчанию libxcb-xinerama0. В репах есть, поставить - заработает.

SkyMaverick ★★★★★
()
Ответ на: комментарий от consensus

А ты интерфейс отдельно писал только ради Rust?

Не распарсил.

почему не gtk-rs

На gtk+ аллергия. Да и под виндой и маком он выглядит убого.

RazrFalcon ★★★★★
() автор топика
Ответ на: комментарий от consensus

Да полно архивов в 7z. Он жмет хорошо. Вот и использую его.

RazrFalcon ★★★★★
() автор топика
Ответ на: комментарий от aliceklipper

Для lossy есть svgo. Его нишу я занимать не собираюсь.

Возможно поменяю свои приоритеты, но пока так.

RazrFalcon ★★★★★
() автор топика
Ответ на: комментарий от plantago

Да. Нужно будет потыкать xinerama. С собой эту либу я тягать всё равно не могу.

RazrFalcon ★★★★★
() автор топика

Классная штука. Спасибо за работу.

Worron ★★★
()
Ответ на: комментарий от RazrFalcon

Шта? Сорцы на гитхабе. Какие проблемы?

Сорцы на расте - языке, на котором совсем немного программ на сегодняшний день. Компилятор же для него весит около 450 Мб.

На раст сорцы переписаны совсем недавно. Не для того ли, чтобы создать проблеммы со сборкой у конечных пользователей? И тут же услужливо подносятся бинари, в которые можно зашить что угодно..

Наверное, у меня всё таки паранойя. Но это вовсе не отменяет того факта, что кругом проприетарь :D

robus ★★★★★
()
Ответ на: комментарий от robus

Я даже не хочу комментировать ваши больные фантазии.

RazrFalcon ★★★★★
() автор топика

Чистил кое-какие пиктограммы. В федоре нормально, в убунте/дебиане часть из них перекрючило. Разница в версиях librsvg минимальна. Файлы могу предоставить, если есть интерес повозиться.

frob ★★★★★
()
Ответ на: комментарий от RazrFalcon

Раз показывает правильно «неоптимизированный» файл, значит достаточно хорош для данного применения =)

Из «подозрительного» в сломавшихся файлах были трансформы. Утром попробую новой версией и если не исправилось — форвардну образчик.

frob ★★★★★
()
Ответ на: комментарий от frob

Вы не поняли. svgcleaner производит операции следуя спецификации SVG. Если ваша прога не умеет нормально в SVG, то это не проблема клинера. В частности librsvg уныл. Он проваливает большую часть SVG Full 1.1 Test Suite. Он годится только для рисования фигурок и их заливания выбранным цветом.

RazrFalcon ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.