Как создать многослойный PSD-файл из командной строки?
-
19-09-2019 - |
Вопрос
Мне нужно Создать многоуровневый PSD-файл с помощью ImageMagick или любого другого инструмента командной строки, доступного на платформе Linux.Поскольку мне нужно сделать это на сервере Linux, я не могу использовать Photoshop scripting.
Приведенная ниже команда ImageMagick создает PSD-файл с одним слоем, где два изображения (здесь:плазменные фракталы) расположены один под другим.(Я использую ImageMagick 6.5.3-10 2009-07-31 Q16, последнюю версию, доступную в MacPorts.)
convert -size 100x100 plasma:fractal plasma:fractal -append out.psd
Как мне создать PSD-файл, в котором каждое изображение находится в отдельном слое, а один слой находится непосредственно над другим?
Или, есть ли какой-либо другой инструмент командной строки, который позволил бы мне сделать это?
Обновить: Есть какие-нибудь другие параметры, кроме командной строки GIMP?
Решение
Если 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)'
Другие советы
Я использую приведенные ниже командные строки.Я не столкнулся с какой-либо проблемой при открытии сгенерированного PSD-файла в Photoshop, однако каждый слой отображается как фоновый слой, и вы должны сначала преобразовать его в настоящий слой, чтобы отредактировать порядок слоев.
Вот командная строка для Window.Учитывая список изображений (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"
) без каких-либо проблем.
Вы можете использовать -adjoyin для объединения последовательности изображений.
convert -size 100x100 \
-alpha set plasma:fractal \
-alpha set plasma:fractal \
-adjoin \
out.psd
- Альфа-каналы необходимы для PSD-кодера.
- Порядок расположения изображений - от нижнего слоя к верхнему слою.
- Существует множество проблем с совместимостью с Photoshop и GIMP в зависимости от настроек.
Используя:
- ImageMagick 6.5.4-6
- Photoshop CS2
Вот несколько полезных ссылок для вас:
- ImageMagick и PSD изображения со слоями
- Несколько полезных заметок в формате PSD
- Слои PSD - Форумы ImageMagick
Вторая ссылка предназначена для использования с PHP, но он выполняет ImageMagick, используя только команды, а не все PHP синтаксис, только строка из исполнительный код.
Надеюсь, я тебе помогаю!
Я согласен с Джоном Гэллоуэем, консоль 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\ общий доступ\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-файл.