admin管理员组文章数量:1566992
一、Adobe® Photoshop® Connection SDK下载
https://console.adobe.io/servicesandapis
此SDK包含两种,一种pluginsdk主要用于滤镜等内置插件。另一种connectionsdk用户网络连接交互。这里主要讲connection sdk技术
二、Adobe® Photoshop® Connection SDK 案例
官方文档现有案例是JAVA和MAC。网上有一份C#的案例MBC提供的Adobe PhotoShop Connection SDK的C#实现
三、c++用法
其原理是加密发送TCP协议进行的PS交互。现在介绍C++用法
1.新建项目,现有加密文件拷贝至项目
#include <Winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <iostream>
#include <vector>
using namespace std;
#pragma warning(disable:4996)
#include"PSCryptor.h"
int main()
{
int err;
WORD versionRequired;
WSADATA wsaData;
versionRequired = MAKEWORD(1, 1);
err = WSAStartup(versionRequired, &wsaData);//协议库的版本信息
if (!err)
{
printf("客户端嵌套字已经打开!\n");
}
else
{
printf("客户端的嵌套字打开失败!\n");
return 0;//结束
}
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN clientsock_in;
clientsock_in.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
clientsock_in.sin_family = AF_INET;
clientsock_in.sin_port = htons(49494);
connect(clientSocket, (SOCKADDR*)&clientsock_in, sizeof(SOCKADDR));//开始连接
printf("\nReady for input, type in JavaScript or type ? for commands:\n");
/** flag for verbose output 详细输出标志 */
bool mShowMessages = true;
/** values for transaction type 事务类型的值*/
int ILLEGAL_TYPE = 0;
int ERRORSTRING_TYPE = 1;
int JAVASCRIPT_TYPE = 2;
int IMAGE_TYPE = 3;
int PROFILE_TYPE = 4;
int DATA_TYPE = 5;
/** current protocol version 当前的协议版本*/
int PROTOCOL_VERSION = 1;
/** length of the header not including the actual length byte
or the communication status 报头的长度,不包括实际长度字节
或者通信状态 */
int PROTOCOL_LENGTH = 4 + 4 + 4;
int COMM_LENGTH = 4;
int NO_COMM_ERROR = 0;
/** bump this value every time a message gets sent,每次发送消息时都会触发这个值,
* the reply message will match the ID 应答消息将与ID匹配
*/
int mTransactionID = 0;
/** messages are encrypted, helper class to encrypt and decrypt messages消息被加密,helper类对消息进行加密和解密 */
//PSCryptor mEncryptDecrypt = NULL;
PSCryptor mEncryptDecrypt = PSCryptor("123456");
std::cout << "Start processJavaScript" << endl;
/* WRITE */
BYTE strBytes[] = "documents.add();";
int size = sizeof(strBytes) / sizeof(strBytes[0]);
int _nEncryptSize = PROTOCOL_LENGTH + size;
// BYTE* allBytes = new BYTE[PROTOCOL_LENGTH + size + 1];
// memset(allBytes, 0, _nEncryptSize * sizeof(BYTE));
//BYTE allBytes[29] = { NULL };
vector<BYTE>_vecallBytes;
int byteIndexer = 0;
_vecallBytes.push_back((BYTE)(PROTOCOL_VERSION >> 24));
_vecallBytes.push_back((BYTE)(PROTOCOL_VERSION >> 16));
_vecallBytes.push_back((BYTE)(PROTOCOL_VERSION >> 8));
_vecallBytes.push_back((BYTE)(PROTOCOL_VERSION));
int messageID = mTransactionID++;
_vecallBytes.push_back((BYTE)(messageID >> 24));
_vecallBytes.push_back((BYTE)(messageID >> 16));
_vecallBytes.push_back((BYTE)(messageID >> 8));
_vecallBytes.push_back((BYTE)(messageID));
_vecallBytes.push_back((BYTE)(JAVASCRIPT_TYPE >> 24));
_vecallBytes.push_back((BYTE)(JAVASCRIPT_TYPE >> 16));
_vecallBytes.push_back((BYTE)(JAVASCRIPT_TYPE >> 8));
_vecallBytes.push_back((BYTE)(JAVASCRIPT_TYPE));
for (int i = 0; i < size; i++) {
_vecallBytes.push_back(strBytes[i]);
}
BYTE strBytesOut[1024] = { NULL };
bool _encrypt = true;
size_t dataOutMoved = 0;//接收实际返回大小
printf("bytes to encrtpt:%d", _vecallBytes.size());
for (int i = 0; i < _vecallBytes.size(); i++)
{
if (i % 8 == 0)
printf("\n");
wprintf(L" %02x ", _vecallBytes[i]);
}
if (_vecallBytes.size() == 0)
return 0;
PSCryptorStatus encryptedBytes = mEncryptDecrypt.EncryptDecrypt(_encrypt, &_vecallBytes[0], _vecallBytes.size(), strBytesOut, 1024, &dataOutMoved);
printf("\nbytes encrypted:%d", dataOutMoved);
for (int i = 0; i < dataOutMoved; i++)
{
if (i % 8 == 0)
printf("\n");
wprintf(L" %02x ", strBytesOut[i]);
}
vector<BYTE>_vecBytesSend;
int messageIndex = 0;
int messageLength = COMM_LENGTH + dataOutMoved;
_vecBytesSend.push_back((BYTE)(messageLength >> 24));
_vecBytesSend.push_back((BYTE)(messageLength >> 16));
_vecBytesSend.push_back((BYTE)(messageLength >> 8));
_vecBytesSend.push_back((BYTE)(messageLength));
_vecBytesSend.push_back((BYTE)(NO_COMM_ERROR >> 24));
_vecBytesSend.push_back((BYTE)(NO_COMM_ERROR >> 16));
_vecBytesSend.push_back((BYTE)(NO_COMM_ERROR >> 8));
_vecBytesSend.push_back((BYTE)(NO_COMM_ERROR));
for (int i = 0; i < dataOutMoved; i++) {
_vecBytesSend.push_back(strBytesOut[i]);
}
int _nstrBytesSend = _vecBytesSend.size();
printf("\n带不加密头8字节:%d", _nstrBytesSend);
for (int i = 0; i < _nstrBytesSend; i++)
{
if (i % 8 == 0)
printf("\n");
wprintf(L" %02x ", _vecBytesSend[i]);
}
if (_vecBytesSend.size() == 0)
return 0;
printf("\nSend JavaScript to Server\n");
send(clientSocket, reinterpret_cast<char *>(&_vecBytesSend[0]), _vecBytesSend.size(), 0);
printf("\nReceive from Server\n");
BYTE receiveBuff[1024] = { NULL };
recv(clientSocket, reinterpret_cast<char *> (receiveBuff), 1024, 0);
printf("\n接收:%d", 1024);
for (int i = 0; i < 1024; i++)
{
if (i % 8 == 0)
printf("\n");
wprintf(L" %02x ", receiveBuff[i]);
}
/* READ */
// 待解析。。。。。。。。。。。。
closesocket(clientSocket);
WSACleanup();
return 0;
}
2,运行效果
打开PS,首选项增效工具启用远程连接 ,并将密码设置“123456”,项目运行后PS新建了文档
案例下载:
Adobe® Photoshop® Connection SDK C++ 案例
本文标签: 案例photoshopAdobeSDKConnection
版权声明:本文标题:Adobe® Photoshop® Connection SDK C++ 案例 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1725647407a1034520.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论