cmyk к rgb используя php - PullRequest
       99

cmyk к rgb используя php

5 голосов
/ 30 декабря 2011

Я использую следующий скрипт для сохранения изображений в папке, но есть одно изображение, которое показывает это сообщение «изображение не может быть отображено, поскольку оно содержит ошибки».

Я думаю, что проблема в том, что на изображении называются cmyk и rgb, но при поиске в Интернете способа конвертации cmyk в rgb с помощью php я не могу найти пример того, как это сделать.

Вот один из примеров: http://offshootinc.com/blog/2008/10/24/using-the-imagick-class-to-convert-a-cmyk-jpeg-to-rgb/, но я не понимаю, как использовать это в моем случае.

Ссылка на изображение выглядит примерно так: www.example.com/attachment?id=2290

Сценарий выглядит следующим образом:

<?php 
$image = 'http://www.dealrush.ie/attachment?id=2290';
$name = 'somename';
$alt = 'somealt';
$saveimage = file_get_contents($image);
file_put_contents("/usr/local/pem/vhosts/155030/webspace/httpdocs/img/$name.jpg", $saveimage);?>

Позже на некоторых страницах я буду использовать что-то вроде этого, чтобы показать изображение. image<?php echo $ name?> .jpg" alt = "<?php echo $alt?>" height = "127px" width = "190px" />

Буду признателен за любую помощь в преобразовании этих изображений Спасибо Daniel

Ответы [ 2 ]

4 голосов
/ 30 декабря 2011

Я сомневаюсь, что цветовое пространство (CMYK или RGB) - ваша проблема.Хотя все должны использовать изображения RGB в сети, браузеры по-прежнему будут отображать изображение CMYK без жалоб.

Чтобы преобразовать изображение из CMYK в RGB, вам необходимо установить программу обработки изображений, например ImageMagick., GraphicsMagick или ExactImage.Любой из них может делать то, что вы хотите, но должен быть установлен администратором сервера.Если вам повезет, ImageMagick может быть уже установлен, и в этом случае вы можете сделать это:

$image= '/path/to/your/file.jpg';
$i = new Imagick($image);
$i->setImageColorspace(Imagick::COLORSPACE_SRGB);
$i->writeImage($image);
$i->destroy();

Обратите внимание, что ImageMagick является самым мощным, ExactImage является самым быстрым, а GraphicsMagick является народом ImageMagick,который быстрее, но немного менее мощный и имеет некоторые ошибки.Из PHP можно использовать только ImageMagick, остальные должны выполняться с функцией exec, хотя это не обязательно плохо, поскольку они, вероятно, обрабатывают свою собственную память и очищают ее намного лучше, чем PHP.

2 голосов
/ 30 декабря 2011

CMYK - это метод печати изображений с использованием субтрактивного смешивания света, а не добавки.Как вы, вероятно, знаете, цвета RGB состоят из красного, зеленого и синего, и пиксели на мониторе компьютера или телевизоре излучают эти цвета.В печати обычно используется белая бумага.Он отражает (близко к) 100% красного, зеленого и синего света.Когда вы кладете чернила на бумагу, они поглощают один или несколько из этих цветов.Таким образом, красные чернила фактически поглощают зеленый и синий свет, который обычно отражается от бумаги.В печати они используют дополнения красного, зеленого и синего цветов.Это голубой, пурпурный и желтый.CMY = голубой, пурпурный, желтый.К обозначает черный.(Они не использовали B, потому что синий цвет в RGB уже B.) Оказывается, трудно получить хороший глубокий черный, используя голубые, пурпурные и желтые чернила (плюс дорого - вы должны использовать все 3!),поэтому они добавляют немного чистого черного (который почти не отражает), чтобы он выглядел лучше.

Так что для вас это означает, что вам нужно конвертировать из CMYK в RGB.К сожалению, нет единого способа сделать это.Если вы посмотрите на что-то похожее на Photoshop, вам потребуется сначала установить типы чернил и бумаги, которые вы хотите эмулировать, прежде чем конвертировать.

Если у вас был чистый CMY без черного компонента, вы можете использовать r = 1,0 - c, g = 1,0 - m, b = 1,0 - y и получим достаточно хорошее приближение изображения.Первый ответ в на этот вопрос - это разумный ответ.

Вы также можете определить конкретное преобразование, которое хотите использовать в Photoshop или каком-либо другом приложении, и составить таблицу из этого.Я делал это раньше, создавая изображение, скажем, 1024x1024.Каждый квадрат 32x32 имеет градиент с голубым в направлении x, идущим от 0 до 1, и пурпурным в направлении y, идущим от 0 до 1. Затем слева направо каждый квадрат имеет увеличивающееся количество желтого и идет сверху вниз,в них растет количество черного.Я загружаю изображение в Photoshop, преобразую его в RGB и сохраняю снова в формате без потерь (например, TIFF) без листов, полос или слоев (для простоты использования).Затем я загружаю его в свое приложение и использую его в качестве справочной таблицы для того же преобразования в RGB.В первый раз это немного громоздко, но как только вы создали таблицу преобразования, ее довольно легко использовать.Я просто использую билинейную интерполяцию для генерации значения RGB.

...