2016-06-05 12 views
0

У меня есть проблема RgB:как можно преобразовать CMYK изображения в режиме в JavaScript

браузеры не поддерживают показ изображений в режиме CMYK и клиент увидеть некоторые действительно острые и различные цвета в его загруженном изображении, а цвета в порядке ,

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

на основе моего результата поиска о преобразовании изображения в режиме CMYK в RGB с использованием JavaScript, требуемого изображения для импорта на холст и делает каждый номер цвета в каждом пикселе конвертирует CMYK в цветной номер RGB с использованием такой библиотеки ColorConverter и наконец, у меня есть полотно с режимом RGB

Это то, о чем я думаю, теперь мой вопрос в том, правильно ли это решение? и если есть лучший способ выполнить эту работу? пожалуйста, дайте мне свои идеи.

+0

Это самый лучший способ сделать это, если вам нужно это сделать на стороне клиента, хотя я бы спросил, почему бы не сделать преобразование только один раз на сервере? – Blindman67

ответ

2

Браузеры не поддерживают показ изображений в режиме CMYK

Отображение CMYK изображения правильно было бы невозможно, поскольку это относительно устройства вывода и преобразования для моделирования просмотра необходимо будет локально откалиброван и точный профиль ICC (или, по крайней мере, качественный примерный профиль, если точность не требуется).

Вы мог просто преобразовать каждый пиксель CMYK в RGB, однако, поскольку RGB имеет wider gamut чем CMYK вы могли бы в конечном итоге с очень ярким глядя результатом.

На мой взгляд, лучший подход заключается в реализации настройки преобразования на стороне сервера при загрузке с использованием ImageMagick или аналогичного программного обеспечения, которое может принимать во внимание профили ICC. Это позволит сохранить исходный файл CMYK для загрузки/печати и конвертированную и приблизительную версию RGB для предварительного просмотра (вы можете f.ex. позволить клиенту загружать свой выходной ICC для точного предварительного просмотра).

В любом случае, формула для преобразования данных CMYK непосредственно в RGB является:

var C, M, Y, K; // initialize with normalized values 

Затем

var r = 255 * (1 - C) * (1 - K); 
var g = 255 * (1 - M) * (1 - K); 
var b = 255 * (1 - Y) * (1 - K); 

Альфа-канал установлен в полностью непрозрачным.

+0

K3N У вас есть какие-либо советы по тому, как конвертировать CMYK в RGB с использованием профиля, скажем, ISO Coated v2 300%? Я просто хочу преобразовать один цвет за раз (а не изображение), поэтому я могу позволить себе несколько дорогостоящую операцию. Любая помощь будет принята с благодарностью! – sambecker

+1

@sambecker нет кроме того, используя ICC/LUT. Хотя, вы могли бы попытаться предварительно вычислить необработанный 3D LUT (ICC тоже технически является LUT, но), используя этот конкретный профиль (опция заключается в использовании профилей аппроксимирующей кривой, небольшого размера, но большего количества вычислений). Файл, скорее всего, станет довольно большим в зависимости от того, где вы хотите интерполировать, и из-за большого количества возможных комбинаций всегда будет небольшая накладная. Нет простого способа:/Я думаю, что в API для управления цветом в браузере есть работа, но если мы когда-нибудь увидим, что, вероятно, это будет время от времени. – K3N

+0

Можете ли вы указать мне в правильном направлении для ICC/LUT? Я могу обработать преобразование на бэкэнд, если это полезно.Мне бы хотелось узнать, что делают эти ребята: http://www.codecrete.net/CMYK. Кажется, они делают расчет на сервере, с профилем, а затем отправляют ответ AJAX в браузер. – sambecker