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