6

我想与 Photoshop 文件交互并使用其动作和智能对象创建图像。

是否有任何 php 或 C# API 可以做到这一点?

4

5 回答 5

8

首先,我想让你反思一下这种事情的合法性。Adobe 会让您实际上只是将他们的应用程序代理到网络吗?我看到他们有很多许可证,所以也许其中一个实际上授予您这样做的权限(但是,仍然可能有一些警告,所以我建议您阅读一下)。由于不是这个问题,我不再谈论这个,我只是想提一下,因为它应该是相关的。

现在,对于实际问题 - 如果您查看 Microsoft Office Interop,Microsoft 声明它在服务器端环境中不受支持。转到此 Microsoft 页面并阅读更多信息部分中使用 Office 服务器端自动化的问题。

如果您决定在服务器端运行常规客户端应用程序,则会出现几个问题,如上述页面所述,但最重要的问题之一如下:

与桌面的交互性: Office 应用程序假定它们在交互式桌面下运行。在某些情况下,可能需要使应用程序可见,某些自动化功能才能正常工作。如果发生意外错误,或者如果需要未指定的参数来完成某个功能,Office 旨在通过一个模式对话框提示用户,询问用户想要做什么。无法关闭非交互式桌面上的模式对话框。因此,该线程无限期地停止响应(挂起)。尽管某些编码实践可以帮助降低出现此问题的可能性,但这些实践并不能完全防止该问题。仅这一事实就使得从服务器端环境运行 Office 应用程序存在风险且不受支持。

虽然这是 Microsoft 为其产品编写的,但它们或多或少适用于任何常规客户端应用程序。即使你仍然决定采用这种方法,正如 Neville K 已经建议的那样,这将是一项非常耗费资源的任务。

考虑到上述情况,我可能会问一个不同的问题,即“使用什么库或服务器端应用程序来做你需要对图像做的任何事情”。

于 2012-12-02T21:32:33.213 回答
4

基于此链接,您可以使用 Photoshop SDK 执行此操作 “使用 Photoshop SDK,您可以使您的应用程序通过 TCP 连接驱动和/或与 Photoshop CS6(版本 13.0.0 或更高版本)通信。现在可以创建一本包含 Photoshop 教程的电子书,允许用户从电子书中驱动 Photoshop CS6 中的操作”

于 2012-11-19T09:44:18.037 回答
3

这听起来很难,但有些公司似乎让它发挥了作用Xee也可以阅读 PSD(并且在源代码中有关于这种格式的史诗般的评论)。

但是引用HN的某人的话:

PSD从未打算成为一种数据交换格式:它是单个程序的序列化格式,它比几乎任何其他软件都具有更多实际人们所依赖的独立不相关的功能,并且保持了惊人的向后兼容性和几乎不间断的向前兼容性。在其超过二十年的存在期间的兼容性。这个产品的“文件格式”需要在这种情况下受到批评,以及类似的大型程序,如 Office。因此,我很难理解为什么有人会认为 PSD 文件将成为某种组织良好的文件格式,他们应该能够轻松地从自己的应用程序中解析出来,这只是天真的一厢情愿:甚至 Adob​​e 的其他产品在打开这些文件时也有限制;要真正操作这些文件,您确实需要与 Photoshop 的特定编辑模型高度兼容(因此这两类文件格式之间存在概念差异)。

我建议查看 Xee 以获取服务器端实用程序。

祝你好运。

于 2012-12-07T15:24:02.237 回答
2

如果您真的愿意,您可以使用脚本界面从任何 Web 语言启动“Shell”任务。

但是,我非常担心这种方法 - Photoshop 的内存要求只能支持几个用户,并且您需要一个相当复杂的轮询机制来检查“shell”任务的结果。Photoshop 根本不是为了以这种方式为网站提供动力的。

考虑改用图形库——我过去使用过 ImageMagick,效果很好。

于 2012-11-19T10:44:21.710 回答
2

注意警告,你真的不能用 Photoshop 一次处理超过 1 或 2 张图像而不会使你的服务器崩溃,所以仅仅把它放在你的网络服务器上是不可能的。对于大多数任务来说,重量更轻的图像库要好得多。

但是您可以从您的 Web 应用程序中对作业进行排队,然后在另一台计算机上处​​理它们,或者将其限制为一次只处理一个。

Adobe 有宏和完整的基于动作/javascript 的脚本环境,您可以从命令行或 com 启动。

Adobe 脚本指南

http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/photoshop/pdfs/photoshop_cs5_scripting_guide.pdf

对于旧版本的 Photoshop,您可以使用宏功能来录制动作。然后,从动作中创建一个液滴。使用图像文件作为唯一参数从命令行调用液滴。图像文件的路径可能需要是绝对路径。

于 2012-12-06T21:24:33.690 回答