Как создать многослойный 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?

6 ответов


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

следующие команды создали 2-слойный 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)

Это должно быть преобразовано в скрипт-Fu script (.scm-файл) и может быть выполнен из командной строки с чем-то вроде этого:

gimp -i -b '(your-script-name "test.psd" 200 200)' -b '(gimp-quit 0)'

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

вот командная строка для окна. Учитывая список изображений (im1.xxx, im2.xxx etc, 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 если нет.) The [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") без каких-либо проблем.


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

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

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

  • ImageMagick 6.5.4-6
  • Photoshop CS2

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

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

надеюсь, я помогаю ты!


Я согласен с Джоном Галлоуэем, консоль 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" внутри вашего каталога gimp "script" ("c:\Program файлы\GIMP 2\share\gimp\2.0\скрипты\" для 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 на изображении

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

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

создаст 2 слоистых PSD.