Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с svg, Создание набора изображений 
:(
    Опции темы
AGENTxXx
Дата 14.5.2015, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 8.6.2009

Репутация: нет
Всего: 1



Добрый день уважаемые форумчане!

Необходимо решить следующую задачу: Есть куча svg файлов (ну на самом деле esp, но что-то я не нашел, как с этим форматом работать, так что думаю нужно будет все переконвертировать). Необходимо создать один каллаж из множества изображений (желательно с возможностью масштабирования). 
Нашел готовое решение только по открытию изображения из svg в picturebox (пример). 

Вопрос - как все же сделать каллаж (т.е. добавлять изображения на холст так сказать. Обязательно, чтобы формат оставался векторный (с растром проблем нет). Кто-нибудь знает как сделать или в какую сторону курить? Спасибо!
PM MAIL   Вверх
Amp
Дата 14.5.2015, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: нет
Всего: 17



Можешь вооружиться xml-ридером, считать <svg> узлы из входных файлов и в выходном файле вложить их внутрь корневого <svg> узла. Главное атрибуты viewBox правильно пересчитать, чтобы расположить их относительно друг друга.

Это сообщение отредактировал(а) Amp - 14.5.2015, 15:47
PM MAIL   Вверх
AGENTxXx
Дата 14.5.2015, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 8.6.2009

Репутация: нет
Всего: 1



Ну я вот примерно в этом направлении курю (смотрю на "всю красоту" svg-кода). Но чёт для сложных изображений не так то и просто это сделать. Там так много различных позиций, так что с виду то и не видно, где нужные((( Тем более если ещё масштабирование приписывать, то это полный ПИ...
PM MAIL   Вверх
Amp
Дата 14.5.2015, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: нет
Всего: 17



А какая разница сложное изображение или нет? Для вычисления лэйаута нужно будет перед компоновкой пробежаться по всем документами, вытащить из тэга <svg> ширину с высотой и запомнить их. После этого прогнать через bin-packing алгоритм. Далее документы сливаются в один и во viewBox прописываются вычисленные координаты.
PM MAIL   Вверх
AGENTxXx
Дата 14.5.2015, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 8.6.2009

Репутация: нет
Всего: 1



Немного всё не так. Я понял, о чём вы говорите, но тут есть проблема - viewBox имеет размер один, а изображение имеет размер другой (т.е. viewBox больше, чем сам рисунок). А изображений 2000 штук и в ручную подгонять под размер - не решение проблемы. А проблемы вычисления координат заключаются вот в таком тексте объектов например:
Код

<path fill="#040405" d="M22.936,12.255c0-0.736-0.479-1.298-0.784-1.751l0.001-1.75c-0.489-0.724-0.955-0.75-1.374-1.555
        c-0.645-1.235,0.103-0.903-1.177-1.752c0.001-1.754,0.056-3.306-1.764-3.306c-0.771,0-3.186,3.15-4.509,3.501l-0.238-1.357
        l-2.303-3.444l-0.204,0.132H9.605C9.136,0.661,8.731,0,8.232,0H3.136C2.523,0,2.58,0.35,2.352,0.779l-1.955,0.23
        C0.188,1.355,0,1.547,0,2.14v1.167c0,0.484,0.489,0.732,0.784,1.167V6.03l0.74,0.821c0.043,1.939,1.426,2.701,2.2,3.847h0.979
        c0.223,0.333,0.426,0.779,0.979,0.779h0.783c0.104,0.436,0.196,0.447,0.196,0.973v1.167c0,0.525-0.094,0.536-0.196,0.973
        c-1.156,0.025-2.216,0.736-2.408,1.699c-0.373,1.872,0.615,1.32,1.681,2.136c0.974,0.745,3.936,2.79,4.453,3.557h0.979
        c0.333,0.494,2.178,1.556,2.94,1.556h2.155l0.396-0.776l0.978-0.002c0.226-0.332,0.428-0.778,0.98-0.778h0.392
        c0.184,0,3.359,2.262,3.678,2.577c0.59,0.586,2.597,2.601,2.597,3.453v3.89c0,0.33-1.039,1.362-1.372,1.362l-4.51-0.001
        c-0.373,0-2.22-1.99-2.563-2.318c-1.47-1.407-1.292-1.037-3.513-0.988c-0.279,0.522-0.979,1.206-0.979,1.557v0.389
        c0,0.549,0.449,0.75,0.783,0.973v0.973c0.66,0.438,2.354,2.101,2.354,3.112v0.583c0,0.774-1.568,1.114-1.568,3.502
        c0,0.576,0.521,0.971,0.784,1.361v1.167l0.742,0.456l0.042,0.711c0,1.098,0.979,0.042,0.979,2.141l3.875,3.74
        c0.046,2.053,1.025,0.996,1.025,2.096v0.776c0,2.024-1.765,1.297-1.765,2.334l0.001,3.502c0,0.55,0.448,0.75,0.783,0.972
        l-0.229,0.123l2.617,4.825c0.159,0.845,0.943,2.833,1.531,2.833h1.766l0.395-0.776l1.175-0.001c0.229-0.43,0.171-0.778,0.783-0.778
        h0.196c0.676,0,0.759,0.145,1.372,0.194c0.318,1.357,0.593,1.418,1.418,2.288c0.262,0.275,1.641,1.603,1.914,1.603h6.077
        c0.554,0,0.757-0.446,0.979-0.778h0.98c0.332-0.492,1.176-1.052,1.176-1.556V67.5c0-0.854-0.235-0.879-0.784-1.167
        c0-3.426-1.596-4.07-2.744-6.225h-1.177c-1.328-1.969-2.633,0.648-2.549-3.112l3.746-2.894l-1.03-1.363l-0.95-0.021L35.635,51.2
        l-0.938-0.039l-0.621-0.748l-1.144-0.029c-0.274-0.518-0.885-1.199-1.462-1.468c-0.476-0.222-1.849-1.062-1.87-1.062h-2.549
        c-1.201,0-0.99,0.973-3.137,0.973c-1.318-0.001-3.112-1.813-3.87-2.58c-0.651-0.662-2.796-2.634-2.796-3.645v-2.334
        c0-0.926,1.415-2.141,2.354-2.141h4.313c0.391,0,1.688,1.495,2.045,1.861c0.313,0.318,2.087,1.445,2.464,1.445
        c1.041,0,1.327-1.82,1.766-2.724l-0.938-1.874c-2.325-1.373-1.416-1.961-1.416-4.156c0.433-0.228,0.784-0.17,0.784-0.778v-1.946
        c0-0.483-0.49-0.73-0.784-1.167c0-3.75-6.47-8.914-6.47-10.309v-0.778c0-0.837,1.568-1.303,1.568-2.14v-3.308h0.002V12.255z"/>


Я примерно понимаю, что тут написано, но тут везде прямая зависимость, и изменив в одном месте одну цифру - остальные точки могут сдвинуться. В общем задача - найти верхний, левый,нижний и правый угол. Есть ли какие инструменты по конвертации и вычисления размера и сдвига? 
PM MAIL   Вверх
Amp
Дата 14.5.2015, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: нет
Всего: 17



Вычислять вручную это конечно муторно - помимо определения границ самих примитивов необходимо учитывать трансформации, кисти и т.п. Посмотрите какие-нибудь библиотеки под .NET для работы с SVG, там наверняка должен быть метод вроде getBBox как у SVGElement-а в браузере.
PM MAIL   Вверх
AGENTxXx
Дата 14.5.2015, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 8.6.2009

Репутация: нет
Всего: 1



Да тут это скорее всего не полностью поможет, т.к. я могу узнать размер, а относительно какого количества пикселей находится объект от границ - все равно хз. 
Хотел выполнить следующих финт: так как у меня файлы в esp я хотел их с помощью inkscape переформатировать в svg, и возможно при конвертации область холста будет подогнана по размеру объекта, но.... чёт не работает у меня через командную строку это чудо... а pstoedit конвертирует, но криво (объект имеет уже другой вид, что не приемлемо). Может конвертор какой-нибудь знаете, который обрезает границы? Онлайн-конвертёр я нашел (хотя может некоторые тоже испортит. Я только на 1 изображении пробовал), но 2000 файлов в нём будет оооочень долго конвертироваться....
PM MAIL   Вверх
Amp
Дата 14.5.2015, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: нет
Всего: 17



У меня inkscape через командную строку запускается и даже более-менее обрезает под размер, но тут лучше по одному файлу ему отдавать, иначе памяти не хватит.
Код

inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg

PM MAIL   Вверх
AGENTxXx
Дата 15.5.2015, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 8.6.2009

Репутация: нет
Всего: 1



Да вот, смотрите что получается:

C:\Program Files\Inkscape>inkscape 123.eps --export-plain-svg test.svg

** (inkscape.exe:68): WARNING **: Specified document 123.eps cannot be opened (d
oes not exist or not a valid SVG file)
123.eps:1: parser error : Start tag expected, '<' not found
┼╨╙╞▲
^
123.eps:1: parser error : Start tag expected, '<' not found
┼╨╙╞▲
^


Т.е. если я правильно понимаю, то он почему-то eps считает что должен быть в виде svg, а так как eps не обязан первым символом иметь знак "меньше", то хрен его пойми. 

Вроде как ошибки в вызове нет, или всё же есть?
PM MAIL   Вверх
Amp
Дата 17.5.2015, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: нет
Всего: 17



Такая команда у меня конверитрует eps. Версия Inkscape 0.48.5 r10040. Единственное - версия линуксовая.
PM MAIL   Вверх
AGENTxXx
Дата 18.5.2015, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 8.6.2009

Репутация: нет
Всего: 1



Ну мне как раз нужно из eps перевести в svg. Но у меня ни чё не конвертируется... Или винде чего-то не хватает или ещё что-то не так. Попробовал uniconvertor, но он тоже криво это делает... Мда... не знаю, что и делать в данном случае уже... Пока вижу только вариант ручного преобразования...

А попробуйте через inkscape из eps в svg преобразовать. Появятся ли какие-то артифакты или всё нормально выглядеть будет (файл прикрепил)

Присоединённый файл ( Кол-во скачиваний: 0 )
Присоединённый файл  123.eps 364,57 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0605 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.