使用jquery或js检测JPG CMYK图像客户端

时间:2014-04-29 20:44:41

标签: javascript jquery

有没有办法使用jQuery或Javascript来检测通过文件输入上传的JPG图像的色彩空间?为了更准确,我需要一种方法来在用户尝试上传CMYK色彩空间的JPG时回复响应。如果可能的话,我想在客户端抓住这个。我更喜欢使用jQuery / js来做这件事,但我绝对对可能具有此功能的库开放。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我看了一下,看起来JavaScript可能足够强大,但可能非常慢。

这是一个stackoverflow问题,涉及使用JavaScript进行人脸检测:Any library for face recognition in JavaScript?

我知道这并没有具体回答这个问题,但它确实证明了JavaScript可能会被用于你想要的东西。

这是一个问题,涉及使用JS和canvas对象来获取图像的平均颜色:Get average color of image via Javascript

那里有一些答案可能对您有所帮助。其中一个答案链接到一个名为Color Thief的库,它可以做你想做的事:https://github.com/lokesh/color-thief

如果没有人已经建立了你想要的东西,我在这里的意思是,这将是一项艰巨的任务,可能会或可能不会产生足够快的结果以使其有用。

答案 1 :(得分:1)

我评论说你可以做一个jquery ajax调用来获取原始数据。我不认为这是真的,因为没有办法获得原始数据。但是,许多浏览器都支持XML http请求的“arraybuffer”responseType,您可以使用它。这是一段代码:

var img_url = "/images/testimg.jpg";
var req = new XMLHttpRequest();
req.open("GET", img_url, true);
req.responseType = "arraybuffer";

req.onload = function (event) 
{
   var buf = req.response; 
   var num_channels = null;
   if (buf)
   {
      var img = new Uint8Array(buf);
      for (var i=0; i<img.length-9; i++)
      {
         if (img[i]==0xFF && (img[i+1]==0xC0 || img[i+1]==0xC1))
         {
            var num_channels = img[i+9];
            break;
         }
      }
   }
   if (num_channels==4)
      console.log("This is a four-channel image.");
};
req.send(null);

显然,你想要对结果做些什么,应该更好地检查以确保这是一个JPEG而不是随机的字节集合。此外,这仅适用于基线和扩展JPEG,而不是渐进式,算术编码,JPEG 2000或其他任何内容。

这并没有真正测试颜色空间是否是CMYK(或YCCK),只是它有四个组件,但基本的想法就在那里。