![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| AGENTxXx |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 8.6.2009 Репутация: нет Всего: 1 |
Добрый день уважаемые форумчане!
Необходимо решить следующую задачу: Есть куча svg файлов (ну на самом деле esp, но что-то я не нашел, как с этим форматом работать, так что думаю нужно будет все переконвертировать). Необходимо создать один каллаж из множества изображений (желательно с возможностью масштабирования). Нашел готовое решение только по открытию изображения из svg в picturebox (пример). Вопрос - как все же сделать каллаж (т.е. добавлять изображения на холст так сказать. Обязательно, чтобы формат оставался векторный (с растром проблем нет). Кто-нибудь знает как сделать или в какую сторону курить? Спасибо! |
|||
|
||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
Можешь вооружиться xml-ридером, считать <svg> узлы из входных файлов и в выходном файле вложить их внутрь корневого <svg> узла. Главное атрибуты viewBox правильно пересчитать, чтобы расположить их относительно друг друга.
Это сообщение отредактировал(а) Amp - 14.5.2015, 15:47 |
|||
|
||||
| AGENTxXx |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 8.6.2009 Репутация: нет Всего: 1 |
Ну я вот примерно в этом направлении курю (смотрю на "всю красоту" svg-кода). Но чёт для сложных изображений не так то и просто это сделать. Там так много различных позиций, так что с виду то и не видно, где нужные((( Тем более если ещё масштабирование приписывать, то это полный ПИ...
|
|||
|
||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
А какая разница сложное изображение или нет? Для вычисления лэйаута нужно будет перед компоновкой пробежаться по всем документами, вытащить из тэга <svg> ширину с высотой и запомнить их. После этого прогнать через bin-packing алгоритм. Далее документы сливаются в один и во viewBox прописываются вычисленные координаты.
|
|||
|
||||
| AGENTxXx |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 8.6.2009 Репутация: нет Всего: 1 |
Немного всё не так. Я понял, о чём вы говорите, но тут есть проблема - viewBox имеет размер один, а изображение имеет размер другой (т.е. viewBox больше, чем сам рисунок). А изображений 2000 штук и в ручную подгонять под размер - не решение проблемы. А проблемы вычисления координат заключаются вот в таком тексте объектов например:
Я примерно понимаю, что тут написано, но тут везде прямая зависимость, и изменив в одном месте одну цифру - остальные точки могут сдвинуться. В общем задача - найти верхний, левый,нижний и правый угол. Есть ли какие инструменты по конвертации и вычисления размера и сдвига? |
|||
|
||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
Вычислять вручную это конечно муторно - помимо определения границ самих примитивов необходимо учитывать трансформации, кисти и т.п. Посмотрите какие-нибудь библиотеки под .NET для работы с SVG, там наверняка должен быть метод вроде getBBox как у SVGElement-а в браузере.
|
|||
|
||||
| AGENTxXx |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 8.6.2009 Репутация: нет Всего: 1 |
Да тут это скорее всего не полностью поможет, т.к. я могу узнать размер, а относительно какого количества пикселей находится объект от границ - все равно хз.
Хотел выполнить следующих финт: так как у меня файлы в esp я хотел их с помощью inkscape переформатировать в svg, и возможно при конвертации область холста будет подогнана по размеру объекта, но.... чёт не работает у меня через командную строку это чудо... а pstoedit конвертирует, но криво (объект имеет уже другой вид, что не приемлемо). Может конвертор какой-нибудь знаете, который обрезает границы? Онлайн-конвертёр я нашел (хотя может некоторые тоже испортит. Я только на 1 изображении пробовал), но 2000 файлов в нём будет оооочень долго конвертироваться.... |
|||
|
||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
У меня inkscape через командную строку запускается и даже более-менее обрезает под размер, но тут лучше по одному файлу ему отдавать, иначе памяти не хватит.
|
|||
|
||||
| AGENTxXx |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 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 не обязан первым символом иметь знак "меньше", то хрен его пойми. Вроде как ошибки в вызове нет, или всё же есть? |
|||
|
||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
Такая команда у меня конверитрует eps. Версия Inkscape 0.48.5 r10040. Единственное - версия линуксовая.
|
|||
|
||||
| AGENTxXx |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 8.6.2009 Репутация: нет Всего: 1 |
Ну мне как раз нужно из eps перевести в svg. Но у меня ни чё не конвертируется... Или винде чего-то не хватает или ещё что-то не так. Попробовал uniconvertor, но он тоже криво это делает... Мда... не знаю, что и делать в данном случае уже... Пока вижу только вариант ручного преобразования...
А попробуйте через inkscape из eps в svg преобразовать. Появятся ли какие-то артифакты или всё нормально выглядеть будет (файл прикрепил) Присоединённый файл ( Кол-во скачиваний: 0 )
123.eps 364,57 Kb |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |