读取PSD文件格式
Posted
技术标签:
【中文标题】读取PSD文件格式【英文标题】:Reading PSD file format 【发布时间】:2010-09-29 17:09:13 【问题描述】:我想知道这是否可能。我有一个应用程序,当您右键单击文件时会添加上下文菜单。一切正常,但这是我想做的:
如果文件是 PSD,那么我希望程序提取图像。这可以在不安装 Photoshop 的情况下完成吗?
基本上我希望用户右键单击并单击“图像”,这将为他们保存文件的 .jpg。
编辑:将使用 c# 谢谢
【问题讨论】:
code.google.com/p/skimpt 如果您签出/浏览代码,请查看 Platters 文件夹。所以拼盘 > 类 > Photoshop。自从我从事那个项目以来已经有几年了,所以你将不得不经历它 我找到了:` if (System.IO.Path.GetExtension(filename) == ".psd") Photoshop.PsdFile psd = new Photoshop.PsdFile(); psd.Load(文件名); //解码图像 Image myPsdImage = Photoshop.ImageDecoder.DecodeImage(psd); //创建新图像 skImage ski = new skImage(myPsdImage); Common.ShowToastForm(ski); 还有:github.com/NtreevSoft/psd-parser 【参考方案1】:对于现在正在阅读本文的人:已接受答案的链接似乎不再起作用(至少对我而言)。会在那里添加评论,但还不允许评论 - 因此我要添加一个新答案。
您可以在其中找到 Paint.Net 的 psdplugin 代码的工作链接:https://github.com/PsdPlugin/PsdPlugin
【讨论】:
【参考方案2】:您可以使用GroupDocs.Viewer for .NET API 在您的应用程序中使用几行代码将您的 PSD 文件呈现为图像(JPG、PNG、BMP)。
C#
ViewerConfig config = new ViewerConfig();
config.StoragePath = "D:\\storage\\";
// Create handler
ViewerImageHandler imageHandler = new ViewerImageHandler(config);
// Guid implies that unique document name
string guid = "sample.psd";
// Get document pages as images
List<PageImage> pages = imageHandler.GetPages(guid);
foreach (PageImage page in pages)
// Access each image using page.Stream
更多详情和示例代码,请访问here。 披露:我在 GroupDocs 担任开发人员布道师。
【讨论】:
链接很好,但请考虑发布这些链接中的相关代码以帮助回答问题。【参考方案3】:我在 Aspose 的 Imaging 组件上取得了巨大成功,它可以在没有 Photoshop 的情况下加载和保存 PSD 文件:https://products.aspose.com/imaging/net
【讨论】:
【参考方案4】:我从 psd 工作中提取。在这里查看我的答案
How to extract layers from a Photoshop file? C#
可以帮助别人。
【讨论】:
【参考方案5】:这是我自己的 psd 解析器和导出器: http://papirosnik.info/psdsplit/。 它允许正确解析通道的 RGB 颜色 8、16 和 32 位的 psd,处理用户掩码,将选定的图层导出为 jpeg、png、jng、bmp、tiff;创建导出层和组的 xml 布局,并从给定层创建纹理图集和动画集。 它完全用 C# 编写。如果您希望其来源通过应用程序中关于对话框上的支持链接通知我。
【讨论】:
【参考方案6】:ImageMagick.NET - http://imagemagick.codeplex.com/ - 是 0xA3 给出的链接的更高版本,语法略有不同。 (注意,这是未经测试的):
using ImageMagickNET;
public void Test()
MagickNet.InitializeMagick();
ImageMagickNET.Image img = new ImageMagickNET.Image("file.psd");
img.Resize(new Geometry(100, 100, 0, 0, false, false);
img.Write("newFile.png");
【讨论】:
【参考方案7】:我编写了一个 PSD 解析器,它从所有版本的 PSD 和 PSB 中提取光栅格式层。 http://www.telegraphics.com.au/svn/psdparse/trunk
【讨论】:
【参考方案8】:这家伙做得更容易:
http://www.codeproject.com/KB/graphics/simplepsd.aspx
带有 C# 库和示例项目。
我已经尝试过使用 PS2 文件并且工作正常。
【讨论】:
【参考方案9】:FastStone 非常有效地做到了这一点。 他们没有可用的库,但我想您可以联系他们,看看他们是否可以提供帮助。
查看他们的网站:http://www.faststone.org/download.htm
【讨论】:
【参考方案10】:ImageMagick 库(提供bindings for C#)也支持 PSD 格式。它们可能比进入 Paint.NET 代码更容易上手,而且还附带一个完全免费(类似 BSD)的许可证。
一个简单的示例(在 http://midimick.com/magicknet/magickDoc.html) using MagickNet 找到,看起来像这样:
using System;
static void Main(string[] args)
MagickNet.Magick.Init();
MagicNet.Image img = new MagicNet.Image("file.psd");
img.Resize(System.Drawing.Size(100,100));
img.Write("newFile.png");
MagickNet.Magick.Term();
注意:MagickNet 已移至http://www.codeproject.com/KB/dotnet/ImageMagick_in_VBNET.aspx
【讨论】:
它的MagickNet.Image img = new MagickNet.Image("file.psd");
和img.Resize(new System.Drawing.Size(100,100));
【参考方案11】:
嗯,有一个用于 Paint.NET 的 PSD 插件,我认为它是开源的,您可能想看看初学者:
http://frankblumenberg.de/doku/doku.php?id=paintnet:psdplugin#download
【讨论】:
以上是关于读取PSD文件格式的主要内容,如果未能解决你的问题,请参考以下文章