Как создать многослойный PSD-файл из командной строки?

Мне нужно создать многослойный PSD-файл с помощью ImageMagick или любого другого инструмента командной строки, доступного на платформе Linux. Поскольку мне нужно сделать это на сервере Linux, я не могу использовать сценарии Photoshop.

Приведенная ниже команда ImageMagick создает PSD-файл с одним слоем, в котором два изображения (здесь: плазменные фракталы) расположены одно под другим. (Я использую ImageMagick 6.5.3-10 2009-07-31 Q16, последнюю доступную в MacPorts.)

convert -size 100x100 plasma:fractal plasma:fractal -append out.psd

Как создать PSD-файл, в котором каждое изображение находится на своем слое, а один слой находится непосредственно над другим?

Или есть ли какой-либо другой инструмент командной строки, который позволил бы мне это сделать?

Обновление: есть ли другие параметры, кроме командной строки GIMP?


person Alexander Gladysh    schedule 22.07.2009    source источник


Ответы (6)


Если ImageMagick не работает, я бы посмотрел на командную строку Gimp.

Следующие команды создали для меня двухслойный PSD-файл в интерактивной консоли:

> (gimp-image-new 200 200 0)
(1)
> (gimp-layer-new 1 200 200 0 "layer-1" 100 0)
(2)
> (gimp-layer-new 1 200 200 0 "layer-2" 100 0)
(3)
> (file-psd-save 0 1 0 "test.psd" "test.psd" 0 0)
> (gimp-image-add-layer 1 2 -1)
> (gimp-image-add-layer 1 3 -1)
> (file-psd-save 0 1 1 "test.psd" "test.psd" 0 0)

Его нужно преобразовать в сценарий script-fu (файл .scm) и выполнить из командной строки примерно так:

gimp -i -b '(your-script-name "test.psd" 200 200)' -b '(gimp-quit 0)'
person Jon Galloway    schedule 25.07.2009
comment
Дело не в том, что ImageMagick не работает, а в том, что я не знаю, как заставить его работать правильно... Использовать Gimp - интересная идея, спасибо. Тем не менее, меня немного беспокоит необходимость установки его на сервер без системы X Window и Gnome... Не будет ли он слишком тяжелым? - person Alexander Gladysh; 25.07.2009
comment
Gimp определенно тяжелее, чем ImageMagick, и, судя по тому, что я читал, он не будет работать так быстро. Но из того, что я читал об ImageMagick, я не уверен, что он может создавать многослойные PSD, просто редактировать или сглаживать их. - person Jon Galloway; 25.07.2009

Я использую командные строки ниже. Я не сталкивался с какими-либо проблемами при открытии сгенерированного PSD в Photoshop, однако каждый слой отображается как фоновый слой, и вы должны сначала преобразовать его в настоящий слой, чтобы изменить порядок слоев.

Вот командная строка для окна. Учитывая список изображений (im1.xxx, im2.xxx и т. д., im1 является нижним слоем) список меток для слоев ("label1", "label2"...):

convert ^ ( ^ -page +0+0 ^ -label "label1" ^ im1.xxx[0] ^ -background none ^ -mosaic ^ -set colorspace RGB ^ ) ^ ( ^ -page +0+0 ^ -label "label2" ^ "im2.xxx"[0] ^ -background none ^ -mosaic ^ -set colorspace RGB ^ ) ^ ( ^ -clone 0--1 ^ -background none ^ -mosaic ^ ) ^ -alpha Off ^ -reverse ^ "out.psd"

То есть для каждого слоя у вас есть что-то вроде

( ^ -page +0+0 ^ -label "optional_label" ^ im1.xxx[0] ^ -background none ^ -mosaic ^ -set colorspace RGB ^ )

Метка/имя слоя является необязательным (удалите -label, если нет). [0] в im1.xxx[0] извлекает первое изображение в файле изображения, если в Exif существует миниатюра.

В Unix/OSX вы должны защищать скобки обратной косой чертой, а символы продолжения строки также меняются на \:

\( \ -page +0+0 \ -label "optional_label" \ im1.xxx[0] \ -background none \ -mosaic \ -set colorspace RGB \ \)

Если имена изображений содержат специальные символы, вы можете без проблем защитить их с помощью " (например, "c:\my im1.png").

person Raffi    schedule 22.11.2012

Вы можете использовать -adjoin для объединения последовательности изображений.

convert -size 100x100             \
        -alpha set plasma:fractal \
        -alpha set plasma:fractal \
        -adjoin                   \
        out.psd
  • Альфа-каналы необходимы для кодера PSD.
  • Порядок изображений - нижний слой к верхнему слою.
  • Существует множество проблем совместимости с Photoshop и GIMP в зависимости от настроек.

С использованием:

  • ImageMagick 6.5.4-6
  • Фотошоп CS2
person Jared314    schedule 30.07.2009
comment
Действительно есть некоторые проблемы с совместимостью. И в Photoshop CS4, и в OS X встроенный превьюер явно отказывается открывать результирующее изображение. :-( - person Alexander Gladysh; 30.07.2009
comment
Обновил команду для работы с Photoshop CS2, но не могу протестировать CS4 - person Jared314; 30.07.2009
comment
По-прежнему не работает ни с CS4, ни с CS3, ни с просмотрщиком OS X. Photoshop говорит: возникла проблема при чтении данных слоя. Вместо этого читать составные данные? а затем Не удалось выполнить ваш запрос, поскольку файл несовместим с этой версией Photoshop. - person Alexander Gladysh; 31.07.2009
comment
ImageMagick обновлен до 6.5.3-10 2009-07-31 Q16 (последняя доступная в MacPorts), но она по-прежнему не работает. - person Alexander Gladysh; 31.07.2009

Вот несколько полезных ссылок для вас:

Вторая ссылка предназначена для использования с PHP, но она выполняет ImageMagick, используйте только команды, а не весь синтаксис PHP, только строку exec код.

Надеюсь, я помогаю вам!

person Nathan Campos    schedule 22.07.2009
comment
Извините, но не могли бы вы указать мне, где в этих ссылках описано, как создать файл PSD со слоями? - person Alexander Gladysh; 23.07.2009

Я согласен с Джоном Галлоуэем, консоль Gimp — лучший выбор. Вот мой сценарий:

(define (pngtopsd width height png-paths psd-path)
(define (add-layers image png-paths) 
    (if (null? png-paths) 0 
        (let* 
            ((png (car png-paths))
            (new-layer (car (gimp-file-load-layer 0 image (car png)))))

            (gimp-image-insert-layer image new-layer 0 -1)
            (gimp-item-transform-2d new-layer 0 0 1 1 (cadr png) (caddr png) (cadddr png))
            (add-layers image (cdr png-paths))
        )
    ))

(let* 
    ((png (car png-paths))
    (image (car (gimp-file-load 1 (car png) (car png))))
    (drawable (car (gimp-image-get-active-layer image))))

    (gimp-image-resize image width height 0 0)
    (gimp-item-transform-2d drawable 0 0 1 1 (cadr png) (caddr png) (cadddr png))       
    (add-layers image (cdr png-paths))
    (file-psd-save 0 image drawable psd-path psd-path 1 0)
    (gimp-image-delete image)
))

Вам просто нужно поместить этот скрипт в файл с именем "pngtopsd.scm" внутри каталога "script" вашего gimp ("c:\Program Files\GIMP 2\share\gimp\2.0\scripts \" для Windows), и вы можете создать многослойный PSD из списка изображений PNG с преобразованием (перемещением или поворотом) каждого слоя. Пример использования:

gimp-console-2.8.exe -i -b              ^
  "(pngtopsd (list                      ^
   (list \"c:/../1.png\" 0 500 500)     ^
   (list \"c:/.../2.png\" 0.7 200 1000) ^
   (list \"c:/.../3.jpg\" -0.5 1000 0)) ^
   \"c:/.../result.psd\")"

Там (list \"c:/.../2.png\" 0.7 200 1000) означает:

  • 0,7 - угол поворота изображения (в радианах)
  • 200 1000 — сдвиг по осям x и y на изображении.
person Konstantin Vdovkin    schedule 11.06.2014
comment
Отлично! Я немного упростил его, поэтому он занимает только список изображений. Ширина и высота по умолчанию соответствуют размеру первого изображения в списке, и предполагается, что все слои уже выровнены, поэтому вы должны вызвать его как (layers-to-psd '("background.jpg" "A.png" "B.png") "output.psd"). Вот суть: gist.github.com/endavid/fceea065e586052de944ffc57014692c - person endavid; 18.12.2019

Вы можете создать многослойный PSD-файл с помощью ImageMagick, но обратите внимание, что первое изображение фактически используется в качестве изображения предварительного просмотра (т. е. составного из всех слоев).

convert -size 100x100 plasma:fractal plasma:fractal plasma:fractal out.psd

Создадим 2-х слойный PSD.

person Petah    schedule 18.01.2017