Обнаружение клиентского изображения JPG CMYK с помощью jquery или js

0

Есть ли способ использовать jQuery или Javascript для определения цветового пространства изображения JPG, которое загружается через ввод файла? Чтобы быть более точным, мне нужен способ отбросить ответ, когда пользователь попытается загрузить JPY с цветами CMYK. Я бы хотел поймать это на стороне клиента, если это вообще возможно. Я бы предпочел сделать это с помощью jQuery/js, но я определенно открыт для библиотек, которые могут иметь эту функциональность. Заранее благодарю за любую помощь.

  • 1
    Используя jquery, вы можете загрузить необработанное изображение через что-то вроде $ .ajax ({url: image_url, dataType: "text", success: check_if_cmyk}); Первый параметр, переданный в функцию check_if_cmyk, будет строкой с необработанным изображением. Затем вам нужно определить, является ли изображение (a) в формате JPEG и (b) в CMYK. Простой тест может быть просто проверкой количества каналов цветности у вас.
  • 0
    Спасибо @garlon4 garlon4, я посмотрю на это.
Теги:

2 ответа

1
Лучший ответ

Я немного оглянулся, и, похоже, JavaScript может быть достаточно мощным, чтобы сделать это, хотя возможно, очень медленно.

Вот вопрос stackoverflow, который касается использования JavaScript для обнаружения лиц: Любая библиотека для распознавания лиц в JavaScript?

Я знаю, что конкретно не отвечает на этот вопрос, но он демонстрирует, что JavaScript может быть использован за то, что вы хотите.

Вот вопрос, связанный с использованием JS вместе с объектом canvas для получения среднего цвета изображения: Получить средний цвет изображения через Javascript

Там есть ответы, которые могут быть полезны для вас. Один из ответов там связан с библиотекой, называемой Color Thief, которая может делать то, что вы хотите: https://github.com/lokesh/color-thief

Если никто уже не построил то, что вы хотите, мой взнос здесь состоит в том, что это будет трудоемкая задача, которая может или не может дать результаты достаточно быстро, чтобы быть полезными.

1

У меня был комментарий, что вы можете сделать вызов jQuery ajax для получения необработанных данных. Я не думаю, что это действительно так, поскольку нет способа получить необработанные данные. Тем не менее, многие браузеры поддерживают ответ типа "arraybuffer" типа HTTP-запроса HTTP, и вы можете использовать его. Вот фрагмент кода:

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), просто он имеет четыре компонента, но основная идея есть.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню