如何通过命令行创建分层的PSD文件?

21

我需要使用ImageMagick或其他可用于Linux平台的命令行工具创建一个分层PSD文件。因为我需要在Linux服务器上执行此操作,所以无法使用Photoshop脚本。

以下是ImageMagick命令,它可以创建具有单个图层的PSD文件,在该文件中,两个图像(这里是等离子体分形)相互叠加。(我使用的是MacPorts中最新可用的ImageMagick 6.5.3-10 2009-07-31 Q16版本。)

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

我该如何创建一个PSD文件,在其中每个图像都在自己的层中,而一层直接位于另一层上方?

或者,是否有其他命令行工具可以让我完成这个操作?

更新: 除了GIMP命令行之外还有其他选择吗?

6个回答

16
如果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)

那需要将其转换为一个Script-Fu脚本(.scm文件),可以通过类似以下命令行来执行:
gimp -i -b '(your-script-name "test.psd" 200 200)' -b '(gimp-quit 0)'

不是ImageMagick不能工作,而是我不知道如何使其正常工作...使用Gimp是个有趣的想法,谢谢。然而,我有点担心需要在没有X Window系统和Gnome的服务器上安装它...会不会太重了? - Alexander Gladysh
Gimp肯定比ImageMagick更重,而且从我所读的内容来看,它的性能也不会那么快。但是从我对ImageMagick的了解来看,我不确定它是否可以创建分层的PSD文件,只能编辑或压平它们。 - Jon Galloway

9
我使用以下命令行。在Photoshop中打开生成的PSD文件时,我没有遇到任何问题,但每个图层都显示为背景图层,您必须先将其转换为真实图层才能编辑图层顺序。
以下是Windows的命令行。给出图像列表(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`)。`im1.xxx[0]`中的`[0]`从图像文件中检索第一张图片,以防Exif中存在缩略图。
在Unix / OSX上,您必须通过反斜杠保护括号,并且行继续字符也会更改为`\`:
``` \( \ -page +0+0 \ -label "optional_label" \ im1.xxx[0] \ -background none \ -mosaic \ -set colorspace RGB \ \) ```
如果图像名称包含特殊字符,则可以使用引号`"`来保护它们(例如`"c:\my im1.png"`),而不会出现任何问题。

5
您可以使用-adjoin选项来组合图像序列。
convert -size 100x100             \
        -alpha set plasma:fractal \
        -alpha set plasma:fractal \
        -adjoin                   \
        out.psd
  • PSD编码器需要alpha通道。
  • 图像的顺序是从底层到顶层。
  • 根据设置,Photoshop和GIMP存在许多兼容性问题。

使用:

  • ImageMagick 6.5.4-6
  • Photoshop CS2

确实存在一些兼容性问题。无论是Photoshop CS4还是OS X内置的预览器都明确拒绝打开生成的图像。 :-( - Alexander Gladysh
已更新命令以适用于Photoshop CS2,但我无法测试CS4。 - Jared314
仍然无法与CS4、CS3或OS X查看器配合使用。 Photoshop显示:“读取图层数据时出现问题。读取合成数据?”,然后提示“由于该文件与此版本的Photoshop不兼容,因此无法完成您的请求。” - Alexander Gladysh
已更新 ImageMagick 至 6.5.3-10 2009-07-31 Q16(在 MacPorts 中可用的最新版本),但仍然无法正常工作。 - Alexander Gladysh

4

1
抱歉,您能告诉我在这些链接中哪里描述了如何创建带有图层的PSD文件吗? - Alexander Gladysh

2

我同意Jon Galloway的观点,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 Files\GIMP 2\share\gimp\2.0\scripts\"是Windows系统中的目录),然后您就可以从PNG图片列表中创建分层PSD,并对每个图层进行转换(平移或旋转)。

使用示例:

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轴的偏移量

太好了!我已经简化了它,现在只需要一个图像列表。宽度和高度默认为列表中第一张图片的大小,并且所有图层都假定已经对齐,因此您可以这样调用它:(layers-to-psd '("background.jpg" "A.png" "B.png") "output.psd")。这是要点:https://gist.github.com/endavid/fceea065e586052de944ffc57014692c - endavid

0
你可以使用ImageMagick创建一个分层PSD文件,但请注意第一张图片实际上是预览图像(即所有层的合成图像)。
convert -size 100x100 plasma:fractal plasma:fractal plasma:fractal out.psd

将创建一个2层的PSD。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接