从Photoshop文件中提取图层的方法是什么?C#

6

有没有C#库可以读取Photoshop文件(PSD)中的图层,并将它们提取为透明图像(PNG)?

Photoshop有一个批处理命令,可以将所有图层提取为单独的文件,但没有选择透明PNG。我的目标是创建一个小型实用程序,可以按照您的喜好创建图层组合(例如,想象一下创建一副卡牌)。

6个回答

4

这里有一篇关于PSD解析的不错文章,可能会对您有所帮助。此外,这个线程讨论了使用C#解析PSD文件格式。


SO的讨论只涉及读取Photoshop文件(链接也是如此)。不幸的是,CodeProject文章中的演示应用程序无法处理新的CS3格式。 :( - pek

4
我在任何地方都找不到太多相关信息,但这就是我的解决方法。
using Photoshop;

Photoshop.PsdFile psd = new Photoshop.PsdFile();
psd.Load(pingTextsPsd);

for (int j = 0; j < psd.Layers.Count; j++)
            {
                System.Drawing.Image myPsdImage = ImageDecoder.DecodeImage(psd.Layers[j]);

                myPsdImage.Save(pingsOutputPath + psd.Layers[j].Name + ".png");

            }

我不得不下载了Frank Blumenberg先生制作的cs文件(基于Jonas Beckeman的Endogine引擎),因为仅仅获取paintdotnet dll本身是不够的。

我相信是在这里我得到了这些cs文件。

http://code.google.com/p/skimpt/source/browse/trunk/Skimpt3/Skimpt3/classes/photoshop/?r=72

这应该能让你获取图层...
:-)
这似乎在处理CS6文件时也可以正常工作。
更新:vs2013网站在这里:http://goo.gl/H6nWSN

3
你可以使用Photoshop COM 来实现这一点。

2
特别是请参阅此文章(http://www.pcpix.com/Photoshop/),了解如何从.NET访问COM接口。 - Matthew Flaschen

1

我找到了一个Java代码示例,可以实现这个功能。

"Supports uncompressed or RLE-compressed RGB files only"

也仅支持旧版的PSD:

"Does not support additional features in PS versions higher than 3.0"

此外,ImageMagick 可以处理 PSD 文件,并且支持多种编程语言的接口:

"Choose from these interfaces: G2F (Ada), MagickCore (C), MagickWand (C), ChMagick (Ch), ImageMagickObject (COM+), Magick++ (C++), JMagick (Java), L-Magick (Lisp), NMagick (Neko/Haxe), MagickNet (.NET), PascalMagick (Pascal), PerlMagick (Perl), MagickWand for PHP (PHP), IMagick (PHP), PythonMagick (Python), RMagick (Ruby), or TclMagick (Tcl/TK)"

1

ImagicMagick(在其他SO文章中提到)确实允许分别提取图层。请参见:http://www.rubblewebs.co.uk/imagemagick/psd.php

您可以使用命令行工具自行尝试:

convert boots.psd[0] -thumbnail 340x340 boots_png.png

0

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