И тут я нарвался на то, что GD icc-профиль в изображение внедрять не умеет. Умеет Image Magic или сокращенно Imagic. Пришлось поставить эту библиотеку на сервер тоже и задачу я решил, однако были сложные моменты. Во первых выяснил, что Imagic наотрез отказывается работать с переменной $image, созданной GD. В одном скрипте но вместе с одним имиджем эти библиотеки работать не могут. Пришлось сохранять промежуточный результат GD в файл на сервере и c этим файлом заставлять работать Imagic. Во вторых выяснил, что в файл png не все программы умеют внедрять профиль: операционка MacOS например при создании скриншотов сама внедряет, а вот Фотошоп и Imagic - не могут внедрить icc в png. Сохранил в результате файл с внедренным профилем icc в формате tif (сжатия жпег не хотелось), у меня спектральный калькулятор рассчитан на профессионалов, которые умеют обращаться с форматом tif.
Вот кусок кода - собственно переход от GD к Imagic через сохранение переменной $image в файл. Не забудьте открыть папку img для записи и задать к ней полный путь от корня сайта. Не забудьте положить туда нужный цветовой профиль, в моем примере это sRGB.icc:
Код: Выделить всё
imagepng($image, "/img/image$example.png");
imagedestroy($image);
// end GD
// start imagic
$handle = fopen("/img/image$example.png", "rb");
flock($handle,LOCK_EX);
$img = new Imagick();
$img->readImageFile($handle);
$img->setImageFormat('tiff');
$icc_rgb = file_get_contents('/img/sRGB.icc');
$img -> profileImage('icc', $icc_rgb);
flock($handle,LOCK_UN);
fclose($handle);
$img->writeImage("/img/sRGB_colortable_$example.tif");
$file = "http://rudtp.pp.ru/img/sRGB_colortable_" . $example . ".tif";
header("Content-Type: image/tiff");
header("Content-Disposition: attachment; filename=sRGB_colortable_" . $example . ".tif");
readfile($file);
// end imagic