我想知道这是否可能。我有一个应用程序,可以在右键单击文件时添加上下文菜单。一切都运作正常,但是我想做的是:
如果文件是PSD格式,则希望程序能够提取图像。是否可以在没有安装Photoshop的情况下完成此操作?
基本上,我希望用户右键单击并单击“图像”,然后为他们保存文件的.jpg格式。
编辑:将使用c#。 谢谢
我想知道这是否可能。我有一个应用程序,可以在右键单击文件时添加上下文菜单。一切都运作正常,但是我想做的是:
如果文件是PSD格式,则希望程序能够提取图像。是否可以在没有安装Photoshop的情况下完成此操作?
基本上,我希望用户右键单击并单击“图像”,然后为他们保存文件的.jpg格式。
编辑:将使用c#。 谢谢
ImageMagick库(提供了适用于C#的绑定)也支持PSD格式。与深入探究Paint.NET代码相比,这可能更容易入手,并且还具有相当自由(类似BSD)的许可证。
使用MagickNet的简单示例(在http://midimick.com/magicknet/magickDoc.html中找到)如下:
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));
。 - Rami Alshareef嗯,我认为有一个针对Paint.NET的PSD插件是开源的,你可能会想先看一下:
http://frankblumenberg.de/doku/doku.php?id=paintnet:psdplugin#download
我已经编写了一个PSD解析器,可以从所有版本的PSD和PSB中提取光栅格式图层。 http://www.telegraphics.com.au/svn/psdparse/trunk
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
}
欲了解更多详情和示例代码,请访问此处。
声明:我是GroupDocs的开发者大使。现在正在阅读此内容的人:接受答案的链接似乎不再有效(至少对我来说是这样)。想在那里添加评论,但还不允许评论 - 因此我正在添加新答案。
您可以找到Paint.Net的psdplugin代码的工作链接:https://github.com/PsdPlugin/PsdPlugin
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");
}
我在使用Aspose的Imaging组件方面取得了巨大的成功,该组件可以在没有Photoshop的情况下加载和保存PSD文件:https://products.aspose.com/imaging/net
if (System.IO.Path.GetExtension(filename) == ".psd") { Photoshop.PsdFile psd = new Photoshop.PsdFile(); psd.Load(filename); //解码图像 Image myPsdImage = Photoshop.ImageDecoder.DecodeImage(psd); //创建新图像 skImage ski = new skImage(myPsdImage); Common.ShowToastForm(ski); }
- masfenix