Javascript 为什么在Photoshop面板中读取大型PNG文件失败?

Javascript 为什么在Photoshop面板中读取大型PNG文件失败?,javascript,photoshop,Javascript,Photoshop,在我创建的自定义Photoshop面板扩展中,我试图从本地文件系统上大于64kb的PNG文件中读取数据。使用CEP readfile、nodejs readfile或createReadStream会导致缓冲区长度为零或没有数据,就好像文件是空的一样。这不会通过上述任何方法触发任何错误 我试图以readfile方法提供的几种格式读取该文件。直接读取缓冲区并计算长度,读取Base64、UTF8等。这没有什么区别。如果PNG文件大于64kb,则it软件无法读取该文件,而是表示它认为该文件没有数据 我

在我创建的自定义Photoshop面板扩展中,我试图从本地文件系统上大于64kb的PNG文件中读取数据。使用CEP readfile、nodejs readfile或createReadStream会导致缓冲区长度为零或没有数据,就好像文件是空的一样。这不会通过上述任何方法触发任何错误

我试图以readfile方法提供的几种格式读取该文件。直接读取缓冲区并计算长度,读取Base64、UTF8等。这没有什么区别。如果PNG文件大于64kb,则it软件无法读取该文件,而是表示它认为该文件没有数据

我发现了一些额外的细节:

  • 这不会从上述任何方法中引发实际错误
  • PNG文件大小必须大于64kb才能触发问题
  • JPG可以是任何大小,并且没有相同的问题。我测试了1mb大小的JPG文件,没有问题
  • 更改流读取的文件格式不会产生任何影响
  • 在同一文件夹位置读取JPG后立即读取大PNG会导致此问题不会发生
  • 这只发生在Photoshop生成的PNG上。我用一个单独的方法复制了一个PNG,重新运行程序,错误就不再发生了
代码示例:

var node_fs = require( 'fs' );  
var data = node_fs.createReadStream( pathToTheLocalFile, 'base64' );  

data.on( 'readable', () => {  
     var info = data.read();  
     b64 += info;
} );  

// This event never fires, which seems unusual.
data.on( 'error', () => {  
     for ( var p in arguments ) {  
          console.log( arguments[p] );  
     }  
} );  

// Once the read is done, this fires, and has no data.
data.on( 'end', () => {  
     // do stuff with the b64
};
如果文件不可读,我会收到一条错误消息。那不会发生。理想情况下,我将能够读取文件的内容,并根据需要处理这些数据


最后一个不寻常的注意事项:如果您尝试重新创建此文件并打开localhost panel developer tools,则读取的文件将正常工作。它仅在DevTools关闭时发生。这是另一个奇怪的现象。

你想通过阅读PNG文件来实现什么:我做了一个扩展,可以通过拖放方式预览任何图层,效果很好!我只是从div加载了图像,而不是将其存储为代码:D@DesignPhoenix我将图像从Photoshop发送到远程端点。图像本身由内置PS生成器插件生成。我已经解决了创建、加载和移动图像到我需要它们去的地方的问题。不幸的是,这个错误与从文件系统读取64kb+PNG有关。不过这似乎是一个奇怪的问题。起初,我们可以认为64KB是有限的,但如果是这样的话,jpg和开发人员工具一样工作正常。这可能是csInterface.js中的某种CEP/CEF问题吗?因为无论我是使用CEP还是node.js读取文件,都会出现这种问题,因此似乎不太可能是特定于csInterface.js的。绝对是个奇怪的问题!我强烈建议您在github目录中发布问题,以吸引开发者:)