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

Detecting JPG CMYK image clientside with jquery or js

本文关键字:CMYK 图像 客户端 JPG 检测 jquery js 使用      更新时间:2023-09-26

有没有办法使用jQuery或Javascript来检测通过文件输入上传的JPG图像的颜色空间?更准确地说,当用户试图上传CMYK彩色间隔JPG时,我需要一种方法来恢复响应。如果可能的话,我想在客户端了解这一点。我更喜欢使用jQuery/js来完成这项工作,但我肯定对可能具有此功能的库持开放态度。提前感谢您的帮助。

我环顾四周,JavaScript似乎足够强大,可以做到这一点,尽管可能非常缓慢。

这里有一个关于使用JavaScript进行人脸检测的stackoverflow问题:有JavaScript中的人脸识别库吗?

我知道这并不能具体回答这个问题,但它确实证明了JavaScript可以用于您想要的用途。

这里有一个关于使用JS和canvas对象来获取图像的平均颜色的问题:通过Javascript 获取图像的均值

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

如果没有人已经构建出你想要的东西,我在这里的结论是,这将是一项艰巨的任务,可能会也可能不会以足够快的速度产生有用的结果。

我有一条评论,您可以执行jquery ajax调用来获取原始数据。我不认为这是真的,因为没有办法获得原始数据。但是,许多浏览器支持XMLhttp请求的"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,而不是一个随机的字节集合。此外,这只适用于Baseline和Extended JPEG,而不适用于渐进式、算术编码、JPEG 2000或其他任何东西。

这并不能真正测试颜色空间是否是CMYK(或YCCK(,只是它有四个组成部分,但基本思想是存在的。