使用ImageMagick从PSD文件中提取图层,保留布局。

38

我正在使用ImageMagick从PSD中提取图层,以下命令可以成功获取所有图层:

convert image.psd image-%d.png
但生成的PNG图像的尺寸因层中实际内容而异。 我想要提取所有图层,但使它们都具有相同的尺寸,以便稍后可以轻松地将它们放在彼此之上,并使所有内容与原始PSD文件中一样对齐。
如果需要可视化,这就是我使用上述命令获得的结果:
+----+ |A | +-+ +-+ | | = |A| + |B| | B| +-+ +-+ +----+
我想要的是:
+----+ +----+ +----+ |A | |A | | | | | = | | + | | | B| | | | B| +----+ +----+ +----+
生成的图像具有透明背景,以便我可以这样做:
+----+ +----+ |A | |A |+ | | = | || | B| | B|| +----+ +----+| +----+
我不一定非要用ImageMagick,如果有其他(最好是命令行)工具可以实现这一点,那也可以。

你是否已经想出了解决问题的方法?有进展吗? - Amelio Vazquez-Reina
很遗憾,我最终还是手动将图层复制并粘贴到相同大小的新图像中,使用了Paint.NET及其PSD插件。 - Thom
3个回答

23

我使用以下命令行来实现描述的功能:

convert.exe <filename>.psd -set dispose Background -coalesce <outfilename>.png

1
如果PSD图层具有透明度,则此方法无效,是否有替代方法? - user780756

9

从PSD文件中提取第2层,请键入以下内容:

convert             \
  <filename>.psd[0] \
  <filename>.psd[2] \
  \(                    \
     -clone 0           \
     -alpha transparent \
  \)                    \
 -swap 0           \
 +delete           \
 -coalesce         \
 -compose src-over \
 -composite        \
 <extracted-filename>.png

这会创建一个与PSD文件大小相同的透明画布,然后将其与第二层合并,保持其原始布局 (-coalesce)。


1
太好了!有没有一种简单的方法可以同时对所有图层进行操作? - Thom
3
为了提取所有图层并保持透明度,您可以尝试以下操作: for i in $(identify -format "%[scene] " <filename>.psd); do convert <filename>.psd[$i] <extracted-filename>-$i.png; done 在我的 imagemagick 版本中(ImageMagick 6.8.9-9 Q16 i686 2015-01-06),所有 png 文件都会保持透明度,无需添加任何 convert 选项。 - aesede
我尝试过这个,但除了第0层以外,我得到的都是空白层!(尺寸正确但完全透明)。 - Camilo Martin

2
最终,这是对我起作用的方法:
convert -dispose Background "input.psd" -layers coalesce "output.png"

荣誉归于ImageMagick论坛的“snibgo”

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