我希望与Photoshop文件进行交互,并使用其动作和智能对象创建图像。
是否有任何php或C#API可以做到这一点?
答案 0 :(得分:8)
首先,我希望你能反思一下这种事情的合法性。 Adobe会让你几乎只是将他们的应用程序代理到网络上吗?我看到他们有很多许可证,所以也许其中一个人实际上允许你这样做(但是,仍然可能有警告,所以我建议你阅读一下)。由于这不是问题,我不再讨论这个问题了,我只是想提一下它,因为它应该是相关的。
现在,对于实际问题 - 如果您查看Microsoft Office Interop,Microsoft表示它在服务器端环境中不受支持。转到this Microsoft page,在更多信息部分阅读使用服务器端自动化Office的问题。
如果您决定运行常规客户端应用程序服务器端,如上所述,有几个问题,但最重要的问题之一是:
与桌面交互: Office应用程序假定它们在交互式桌面下运行。在某些情况下,可能需要使应用程序可见,以使某些自动化功能正常工作。如果发生意外错误,或者如果需要一个未指定的参数来完成某个功能,则Office旨在通过模式对话框提示用户,该对话框会询问用户用户想要执行的操作。无法解除非交互式桌面上的模式对话框。因此,该线程无限期地停止响应(挂起)。虽然某些编码实践可以帮助降低此问题的可能性,但这些实践无法完全阻止该问题。 这一事实本身使得从服务器端环境运行Office应用程序变得风险且不受支持。
虽然这是Microsoft为其产品编写的,但这些或多或少适用于任何常规客户端应用程序。即使你仍然决定采用这种方法,正如Neville K已经建议的那样,这将是一项非常耗费资源的任务。
考虑到上述情况,我可能会问一个不同的问题,就像“使用什么库或服务器端应用程序来做你需要处理的图像”。
答案 1 :(得分:4)
基于this link,您可以使用Photoshop SDK执行此操作: “使用Photoshop SDK,您可以通过TCP连接启用应用程序来驱动和/或与Photoshop CS6(版本13.0.0或更高版本)进行通信。现在可以创建一个Photoshop教程的eBook,允许用户在Photoshop中的Photoshop CS6“
答案 2 :(得分:3)
这听起来很难但有些companies seems to make it work。 Xee也可以阅读PSD(并且有关于此格式in the source code的史诗评论)。
但引用某人at HN:
PSD 从未打算成为数据交换格式:它就是 具有更多个体的单个程序的序列化格式 与其他任何人相比,实际人们所依赖的无关功能 一块软件,并保持了惊人数量的倒退 兼容性和几乎不间断的向前兼容性 二十多年的存在。该产品的“文件格式”需要 在这种背景下被批评,以及类似的大型节目 办公室。因此,我很难理解为什么有人 会认为PSD文件因此组织得很好 他们应该很容易从自己解析的文件格式 应用只是天真的一厢情愿:甚至其他产品 来自Adobe在打开这些文件时有局限性;真的 操纵这些你真正需要与之高度兼容的文件 Photoshop的特殊编辑模型(因此是概念性的 这两类文件格式之间的差异。)
我建议您查看Xee的服务器端实用程序。
祝你好运。答案 3 :(得分:2)
如果您愿意,可以使用脚本界面从任何Web语言启动“Shell”任务。
但是,我真的很担心这种方法 - 对Photoshop的内存要求是这样的,你只能支持几个用户,而你需要一个相当复杂的轮询机制来检查“shell”的结果“任务。 Photoshop本来就不是以这种方式为网站提供动力。
考虑使用图形库 - 过去我使用ImageMagick效果很好。
答案 4 :(得分:2)
注意警告,你一次不能使用photoshop处理超过1或2张图像而不会破坏你的服务器,所以将它放在你的网络服务器上是不可能的。对于大多数任务来说,重量较轻的图像库要好得多。
但是您可以从Web应用程序中排队作业,然后在另一台计算机上处理它们,或者一次只将其限制为一个。
Adobe拥有宏和基于完整操作/ javascript的脚本环境,您可以从命令行或com开始。
Adobe Scripting Guide
对于旧版本的photoshop,您可以使用宏功能录制动作。然后,从动作中创建一个Droplet。从命令行调用Droplet,并将图像文件作为唯一参数。图像文件的路径可能需要绝对路径。