Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Создание программы оптимизации svg-файлов  (Прочитано 5605 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн andrew_bye

  • Автор темы
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
Re: Создание программы оптимизации svg-файлов
« Ответ #30 : 14 Марта 2012, 15:33:04 »
1. Достаточно было снять галку с опции "Convert width/height into a viewBox when possible".

2. Достаточно было снять галку с опции "Remove unreferenced IDs".

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Создание программы оптимизации svg-файлов
« Ответ #31 : 14 Марта 2012, 15:53:14 »
Спасибо, сейчас попробуем.
ЗЫ. Птички убрал, а результат аналогичен с установленными птичками.
Вероятно, изменение чек-боксов не было принято почему-то.
Посмотрел, точно.
1. Снял птичку.
2. Нажал OK.
3. Опять захожу на ту же страницу.
4. Смотрю уставки - все по старому, как будто птичку не снимал до этого.
ЗЫ2. Вывод такой. Все настройки сбрасываются и преобразование осуществляется по умолчанию.
Версия 0.3. из закромов Ubuntu.
svgcleaner_0.3-40~lucid1_amd64.deb
PS. Понял, что прав на запись уставок не хватает. Потому и сплошной дефолт. :coolsmiley:
« Последнее редактирование: 14 Марта 2012, 17:08:18 от alexander.pronin »

Оффлайн andrew_bye

  • Автор темы
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
Re: Создание программы оптимизации svg-файлов
« Ответ #32 : 14 Марта 2012, 20:08:57 »
Уже как бы и 0.4 вышла.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Создание программы оптимизации svg-файлов
« Ответ #33 : 15 Марта 2012, 09:07:23 »
Обновился. Потестируем. Первое впечатление - получше.
Дарю идею для улучшения программы.
Пока никак на используется возможности css.
Атрибуты переписываются. Например
style очень длинный атрибут. Например:
style="stroke-miterlimit:10;stroke:#000;stroke-linejoin:round;fill:none;stroke-width:12;stroke-linecap:round"
Если проанализировать, то он повторяется много-много раз. Правильнее сделать классы на оригинальные значения style, а в тексте использовать class.
Понятно, что здесь не все однозначно, но ужать svg можно в 2 раза точно таким образом. Это просто целина для работы.
PS. Эта версия у меня заработала как надо.
Могу предложить еще одну уставку в Вашей программе.
"Удаление скриптов из svg"
Я делаю это так (на питоне).
#! /usr/bin/env python
# -*- coding: UTF-8 -*-
'''Скрипт очищает svg файл от мусора.
Скрипт предназначен для встраивания в nautilus.
Для запуска из командной строки
 minSVG.py file.svg
Для массовой зачистки svg текущей директории можно сделать так
 find . -name "*.svg" -exec minSVG.py {} \;
'''

import sys, os
import re
if __name__=="__main__":
if len(sys.argv)!=2:
print '''usage: minSVG.py file.svg'''
raise SystemExit(1)

#прочитаем файл в переменную all
file= sys.argv[1]

f1=open(file, "r")
all=f1.read()
f1.close()

#чистим заголовочный тег svg от атрибутов скриптов (интересное решение)
p=re.compile(r"<svg[^>]*>",re.U)
all=p.sub('<svg  xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">',all)
#выбросим сами скрипты (интересное решение)
p=re.compile(r"<script[^>]*>.*?</script>",re.S | re.U)
all=p.sub('',all)
« Последнее редактирование: 15 Марта 2012, 13:20:54 от alexander.pronin »

Оффлайн andrew_bye

  • Автор темы
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
Re: Создание программы оптимизации svg-файлов
« Ответ #34 : 15 Марта 2012, 15:56:09 »
Спасибо за подаренные идеи, но, честно говоря, о существовании Internal CSS я знаю довольно давно и в SVG Cleaner 0.4 уже внедрена их частичная поддержка (на этапе предварительной обработки свойства содержащиеся в Internal CSS и Inline style преобразуются в обычные атрибуты XML для удобства дальнейшей обработки). В последующих версиях обязательно будет добавлена возможность выбора  Internal CSS, как одного из способов представления стилей.

Ну, а до обработки скриптов просто пока еще руки не дошли. :)

П.С. А удаление из элемента 'svg' атрибутов xmlns="http://www.w3.org/2000/svg и  xmlns:xlink="http://www.w3.org/1999/xlink" - довольно опрометчивое решение.
« Последнее редактирование: 15 Марта 2012, 16:05:12 от andrew_bye »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Создание программы оптимизации svg-файлов
« Ответ #35 : 15 Марта 2012, 16:54:07 »
А удаление из элемента 'svg' атрибутов xmlns="http://www.w3.org/2000/svg и  xmlns:xlink="http://www.w3.org/1999/xlink" - довольно опрометчивое решение.
Вы поспешили с выводами.
Это не удаление атрибутов, а замена типа (заголовки, пространства имен, события с присвоенными им скриптами)
<svg xmlns:xlink="http://www.w3.org/1999/xlink" zoomAndPan="magnify" xmlns="http://www.w3.org/2000/svg"    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" onload="init(evt)" onzoom="updateDialogPosition(evt)" onscroll="updateDialogPosition(evt)" onclick="processclick(evt)" onmouseover="toolTip.show(evt)" onmouseout="toolTip.remove(evt)">
на
<svg  xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">

Типа sed.
« Последнее редактирование: 15 Марта 2012, 16:55:52 от alexander.pronin »

Оффлайн andrew_bye

  • Автор темы
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
Re: Создание программы оптимизации svg-файлов
« Ответ #36 : 15 Марта 2012, 17:55:10 »
Сколько не старался вникнуть в синтаксис Питона - всё тщетно.

Тем не менее, также весьма опрометчивым решением является сокращение элемента 'svg' без каких-либо проверок до следующего вида:
<svg  xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Создание программы оптимизации svg-файлов
« Ответ #37 : 16 Марта 2012, 08:27:57 »
Зря Вы так про питон. На сегодняшний день это самый минималистичный, самодокументированный, самый логичный, динамичный и перспективный язык. Количество различный библиотек (компонентов) уже сейчас может превышает Java, С# и т.д. Поддержка регулярных выражений не хуже, чем в перл.
Если без лирики, то пример.

p=re.compile(r"<script[^>]*>.*?</script>",re.S | re.U)
all=p.sub('',all)
Это пример sed.
В начале (строка 1) регулярное выражение предварительно компилируется (можно и без того обойтись). Это дает выигрыш в скорости при массовом использовании регулярного выражения.
Второй строкой осуществляется собственно замена, причем все цокается на месте (как выражается ArcFi).
ЗЫ. Меня задели Ваши интервью в части питона. Перловые перлы - это не пример для подражания, мсм.

Оффлайн andrew_bye

  • Автор темы
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
Re: Создание программы оптимизации svg-файлов
« Ответ #38 : 16 Марта 2012, 10:50:01 »
По поводу Питона я высказал свое субъективное личное мнение и оно навряд ли изменится. ИМХО минималистичность, выдаваемая как заслуга Питона, приводит к тому, что код (особенно чужой) становится более трудным для восприятия. Про необходимость соблюдения отступов перед блоками кода вообще молчу.

В Перле же, благодаря более строгому синтаксису, код гораздо более удобочитаемый, особенно в текстовых редакторах с подсветкой синтаксиса. Кроме того, для обработки XML-документов лучше использовать специальные парсеры, а не регулярные выражения. В Перле таким парсером является XML::Twig, который и быстрый, и весьма функциональный.

Кроме того, практика показала, что лежащий в основе SVG Cleaner перловский скрипт, гораздо быстрее обрабатывает SVG-файлы, чем написанный на Питоне Scour. Причем зачастую разница во времени обработки составляет разы, а не проценты.

В общем я считаю, что Перл является наиболее подходящим скриптовым языком для обработки как текстовых, так и XML-документов.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Создание программы оптимизации svg-файлов
« Ответ #39 : 16 Марта 2012, 11:15:05 »
Для питона есть масса xml парсеров (под SAX и DOM), например lxml. Это просто подключаемые модули.
Насчет скорости обработки. Я где-то сравнивал, но применительно к интересующему меня случаю.
А в общем случае, результаты могут быть различными и отличаться на порядок и выше. Если стоит задача - получения максимального быстродействия, то она решается с помощью различных ухищрений. Если таким вопросом люди не заморачиваются (здесь именно такой случай), то зачем сравнивать. Это не корректно.
ЗЫ. Я ничего против перла не имею, но писать на нем что-то не хочется после освоения питона.
Меня в начале изучения питона тоже очень волновали отступы. С этим надо вначале смириться и найти редактор под него (geany вполне годится), а потом наступит нирвана и осознание дао. ;D
Я сделал пару подходов к снаряду. Первый раз меня именно отступы убили.
« Последнее редактирование: 16 Марта 2012, 11:24:28 от alexander.pronin »

Оффлайн andrew_bye

  • Автор темы
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
Re: Создание программы оптимизации svg-файлов
« Ответ #40 : 16 Марта 2012, 11:25:26 »
Ладно, остановимся на том, что выбор ЯП - это вопрос личных предпочтений.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Создание программы оптимизации svg-файлов
« Ответ #41 : 16 Марта 2012, 11:32:12 »
Согласен.
Это религиозный вопрос.

KEIII

  • Гость
Re: Создание программы оптимизации svg-файлов
« Ответ #42 : 16 Марта 2012, 22:48:49 »


Иконка для программы в стиле Faenza
http://dl.dropbox.com/u/43039840/svgcleaner/svgcleaner.svg

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Создание программы оптимизации svg-файлов
« Ответ #43 : 16 Марта 2012, 22:51:03 »
Довольно симпатично!


 ;)
« Последнее редактирование: 16 Марта 2012, 22:53:37 от RazrFalcon »
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн batan

  • Новичок
  • *
  • Сообщений: 28
    • Просмотр профиля
хорошая работа, но её можно ещё немного доделать и дополнить.
в принципе, svg файл - это набор координат точек и команд связей между этими точками. Бывает весьма актуальной задачей вытянуть из svg файла те самые точки ( или часть изних)и построить по ним данные в гнуплоте. было бы здорово, если бы вы смогли добавить в программу функцию портирования точек svg файла в файл данных.

 

Страница сгенерирована за 0.02 секунд. Запросов: 21.