Автор: adnim дата: 11 Фев 2012 - 10:17 пп
Psd Splitter
«Как распарсить псд» рунет объясняет очень скудно, всё больше какие-то неудобоваримые советы и неработающие примеры. Нерусский гугл на вопросы «Parse psd», «Export layers from psd» даёт уже побольше информации, есть уже почти готовые решения в исходном виде, но их надо мучительно долго собирать из исходников (чтобы в итоге констатировать, что они работают не так, как ожидается)… Короче, пришлось писать своё.
PsdSplit – утилита с графическим интерфейсом, предназначенная для парсинга файлов Adobe Photoshop (psd).
Позволяет открывать psd файлы, просматривать содержащиеся внутри слои, экспортировать их в файлы различных форматов (jpeg, png, bmp, jng, tiff), создавать xml описание экспортированных слоёв. Корректно обработывает psd c RGB Color. Индексированные цвета в настоящее время не поддерживаются (за ненадобностью). Вроде как корректно обрабатываются маски (кроме векторных). Разные хитросделанные эффекты – под вопросом. Для того, чтобы изображение, содержащее какие-то сложные эффекты, режимы блендинга и т.п. было успешно экспортировано, этот слой следует преобразовать в фотошопе в смарт-объект. Текущий файл можно отправить в фотошоп, выбрав соответсвующий пункт в меню File или нажав кнопку с логотипом фотошопа на панели инструментов (или просто F4).
В программе нет встроенной справки, интерфейс вроде бы прост и интуитивно понятен. После открытия файла в левой панели будут отображены содержащиеся в нём слои, в левой нижней части – панель со свойствами текущего слоя, а основное рабочее место занято изображением, содержащимся в слое.
В меню Layers содержатся пункты для выделения необходимых слоёв и команда Export, которая приводит к появлению диалогового окна с настройками экспорта. Здесь можно выбрать путь для экспорта изображений, задать режим иеррархии для групп слоёв, настроить параметры XML файла, выбрать формат изображений (отдельно для слоёв с прозрачностью и без), а также задать уровень сжатия для форматов с потерей качества (jpeg, jng).
Можно указывать несуществующий путь – программа предложит создать папку в указанном месте.
Так как изображения в данный момент уже сформированы, то сам экспорт происходит практически мгновенно. В случае какой-либо ошибки будет выдано соответствующее сообщение и работа с программой может быть продолжена. На данном этапе возможно появление ошибок, связанных с тем, что указанный путь не доступен для записи или в имени слоя (а соответственно и файла) содержатся какие-то недопустимые символы (например ‘?’ или ‘\’). Проверка на корректность имён слоёв в данной версии не производится.
В случае успешного экспорта в статусной строке будет сообщение: Selected layers have been exported successfully.
PsdParser является FreeWare – вы можете использовать его без каких-либо ограничений и для любых целей. Лично мне понадобился для экспорта из psd небольших по размеру прозрачных картинок (jng) при написании Android игры. Некоторые товарищи по достоинству оценят этот продукт исходя из тех соображений, что он позволяет использовать на практике файлы psd без Photoshop’a, т.е. отпадает надобность покупать этот самый Photoshop за немалые деньги.
Инструмент оказался весьма удобным удобным и полезным, так что не могу не поделиться им со всеми нуждающимися. Пользуйтесь на здоровье.
Download Psd Splitter: PsdSplit_v1.2.Net4.exe (323 kB)
Наряду с письменными благодарностями и устными восторгами высоко ценятся денежные пожертвования, которые следует отправлять на любой из этих кошельков с указанием , на что мне следует потратить эти деньги (или просто нажать кнопку [спасибо] чуть выше):
WebMoney: Z349690337331, R374872679131, E331325268518
Яндекс.Деньги: 410011129570792
Это будет +1 к вашей карме. Ещё кармических плюсов можно заработать, посетив http://www.chance.by и проделав там пару простых манипуляций.
Все вопросы, отзывы, замечания, предложения по улучшению – можно оставлять в комментариях, можно отправлять на мыло или в асю (они указаны здесь: http://papirosnik.net/about/).
15 Комментариев на “Psd Splitter”
Trackback URI | Комментарии в RSS



Valeriy 03 Апр 2012 - 17:04 #
Нужен исходный код.
[Translate]
adnim 03 Апр 2012 - 21:53 #
@Valeriy:
А поговорить? )
Короче, обоснуйте.
Для каких целей нужен исходный код,
И куда выслать? Или желаете чтобы я здесь всё выложил?
[Translate]
Вадим 10 Апр 2012 - 07:16 #
в xml вроде нет информации о координате, в которой обрезанная картинка присутствует в psd (или я не нашел).
т.е. имея эту информацию, можно отпарсив xml восстановить положение слоев.
в остальном супер!
если бы еще можно было собирать все текстуры в атлас, то вообще была бы отличная альтернатива TexturePacker’у, учитывая, что ваша программа сама слои выдернет из фотошопа.
Стоит ждать? Пополню ваш баланс обязательно!
[Translate]
Вадим 10 Апр 2012 - 07:21 #
Есть же затупил на счет координат )))
Просто всю ночь парсил атласы, и там x, y, w, h – четыре параметра, по которым можно найти только спрайт в атласе, а точка, в которую выводить это еще два параметра, которые сразу не нашел как получить в xml ))
[Translate]
adnim 10 Апр 2012 - 09:16 #
>>Стоит ждать?
Да, это будет в след. опубликованной версии.
Самому стало не хватать этой возможности.
Поэтому в текущей рабочей версии уже собирает в атласы – но довольно примитивно.
Сейчас алгоритмы просматриваю и соображаю, как реализовать поэффективнее.
Хочу опцию реализовать «поворачивать на 90*» – чтоб поменьше пустого места оставалось в атласе – или возможность ручного корректирования… на тот случай если надо несколько атласов и определённые спрайты должны быть в конкретном атласе.
Только на счет последнего не уверен.
Возможно не стану усложнять себе жизнь и сделаю просто – одна psd’шка – один атлас.
[Translate]
Вадим 10 Апр 2012 - 10:18 #
>> на тот случай если надо несколько атласов и определённые спрайты должны быть в конкретном атласе
да, думаю это лишнее.
на счет поворотов еще можно подумать. в TexturePakere такое есть. хотя я не пользуюсь ))
ладно, удачи! буду регулярно заглядывать. интересует очень.
[Translate]
adnim 11 Апр 2012 - 16:07 #
Обновил до версии 1.2
Исправлены ошибки обработки вложенных групп в psd (до 10-го уровня вложенности)
[Translate]
Евгений 13 Апр 2012 - 10:52 #
Не смог открыть файл
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
ae: Invalid color mode (CMYK).
at w.c()
at w.j(Object A_0, EventArgs A_1)
at y.b(Object A_0, EventArgs A_1)
at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
at System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ToolStrip.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
[Translate]
adnim 13 Апр 2012 - 12:04 #
Это видимо Вы успели качнуть поломанную версию.
Был такой период, когда примерно полдня здесь висела нерабочая версия.
Попробуйте скачать ещё раз.
[Translate]
stotskii 27 Апр 2012 - 16:21 #
привет
мой предыдущий коммент не отобразился.
Парсер глючно работает с шейпами.
Не мог бы ты поделиться исходниками? у меня специфичная задача: надо определять прямоугольники со скругленными углами и вычислять радиус скругления углов.
твой код очень помог бы для того чтобы не писать с нуля.
спасибо
[Translate]
adnim 27 Апр 2012 - 16:28 #
Чтоб нормально экспортить шэйпы – их надо преобразовать в смарт объект в фотошопе.
Нет – исходники уже не раздаю – начал давать было, да неблагодарный народ: не то что спасибо, а еще претензии получаю )
в сети есть исходники на чистом C (psd parser вроде называется) – там в принципе тоже к пикселам добраться можно.
[Translate]
Вадим 10 Май 2012 - 18:17 #
Наткнулся на статью (с кодом) об упаковке текстур в атлас. Автор пишет, что код не гениальный, но может чем-нибудь поможет. ))
Как вообще продвигается работа?
[Translate]
Вадим 10 Май 2012 - 18:17 #
А ссылку-то я и забыл ))
http://blog.wonderville.ru/texture-atlas/
[Translate]
adnim 10 Май 2012 - 22:07 #
>>Как вообще продвигается работа?
Пока не очень. Особо не занимался, так как основной работой загружен по уши.
Да плюс ко всему утратил исходники самой последней версии – придется повторять некоторые вещи заново.
Смотрел на TexturePacker.
В принципе, весь функционал повторить можно без проблем, только не буду делать поддержку различных форматов описания атласа (Cocos2D, LibGDX и тп). Достаточно или в XML, или также как в вышеупомянутой тулзе – любой формат можно запрограммировать через шаблоны.
А вот сжатие в PVRCT видимо делать придется – нужная вещь на планшетах и смартфонах.
[Translate]
Вадим 11 Май 2012 - 07:59 #
Атлас+XML думаю для большинства случаев достаточно. Хотя кому-то наверняка со временем может захотеться еще больше. Но это уже можно наращивать когда «клиент пойдет». Уверен, что девелоперы не пожалеют немного денег, оценить твой труд и сэкономить себе время.
[Translate]