изображение — PHP Imagick (ImageMagick) RGB & gt; CMYK с плоским черным

Я использую PHP Imagick для преобразования изображений PNG, сгенерированных в PhantomJS, в формат TIF CMYK,
для печати мне нужен плоский черный (cmyk — 0,0,0,100) — преобразование генерирует черные цвета (cmyk — 58,49,44,89).

Я конвертирую изображения, используя цветовой профиль (раздел моего кода ниже) -> код основан на Преобразование изображения из RGB в CMYK с Imagick

Можно ли заставить Imagick выпадать черным? знаете ли вы какие-либо другие инструменты, которые могут помочь?

Спасибо,

if ($has_icc_profile === false) {
$icc_rgb = file_get_contents( '/srgb_profiles' . '/sRGB.icc');
$image->profileImage('icc', $icc_rgb);
unset($icc_rgb);
}
// then we add an CMYK profile
$icc_cmyk = file_get_contents( '/cmyk_profiles'.'/JapanColor2002Newspaper.icc');
$image->profileImage('icc', $icc_cmyk);

ОБНОВИТЬ :

после проверки в Интернете, я думаю, что я ищу UCR en.wikipedia.org/wiki/Under_color_removal метод для ImageMagick — я обнаружил, что преобразование старых версий поддерживается при удалении цвета

-undercolor <undercolor factor>x<black-generation factor>
control undercolor removal and black generation on CMYK images.
This option enables you to perform undercolor removal and black generation on CMYK images--      images   to be printed on a four-color printing system. You can con- trol how much cyan, magenta, and yellow to remove from your image and how much black to add to it. The standard undercolor removal is 1.0x1.0. You'll frequently get better results, though, if the percentage of black you add to your image is slightly higher than the percentage of C, M, and Y you remove from it. For example you might try 0.5x0.7. (http://www.chemie.fu-berlin.de/chemnet/use/suppl/imagemagick/www/convert.html) -

очевидно, эта опция больше не поддерживается, мне интересно, знает ли кто-нибудь, является ли UCR решением, которое я ищу, и знает ли кто-нибудь, поддерживается ли он или я должен использовать другой метод для получения того же результата.

0

Решение

Если вы используете ImageMagick’s convert в командной строке, подобной этой, чтобы сгенерировать шкалу градаций серого, шириной 1 пиксель и высотой 256 пикселей, перейти от белого к черному и преобразовать ее в цветовое пространство CMYK, а затем отобразить в виде текста, вы получите то, что вам нужно:

convert -size 1x256 'gradient:rgb(255,255,255)-rgb(0,0,0)' -colorspace cmyk txt:
# ImageMagick pixel enumeration: 1,256,65535,cmyk
0,0: (0%,0%,0%,0%)  #0000000000000000  cmyk(0,0,0,0)
0,1: (0%,0%,0%,0.392157%)  #0000000000000101  cmyk(0,0,0,1)
0,2: (0%,0%,0%,0.784314%)  #0000000000000202  cmyk(0,0,0,2)
0,3: (0%,0%,0%,1.17647%)  #0000000000000303  cmyk(0,0,0,3)
0,4: (0%,0%,0%,1.56863%)  #0000000000000404  cmyk(0,0,0,4)
0,5: (0%,0%,0%,1.96078%)  #0000000000000505  cmyk(0,0,0,5)
0,6: (0%,0%,0%,2.35294%)  #0000000000000606  cmyk(0,0,0,6)
0,7: (0%,0%,0%,2.7451%)  #0000000000000707  cmyk(0,0,0,7)
0,8: (0%,0%,0%,3.13725%)  #0000000000000808  cmyk(0,0,0,8)
0,9: (0%,0%,0%,3.52941%)  #0000000000000909  cmyk(0,0,0,9)
0,10: (0%,0%,0%,3.92157%)  #0000000000000A0A  cmyk(0,0,0,10)
...
...
0,249: (0%,0%,0%,97.6471%)  #000000000000F9F9  cmyk(0,0,0,249)
0,250: (0%,0%,0%,98.0392%)  #000000000000FAFA  cmyk(0,0,0,250)
0,251: (0%,0%,0%,98.4314%)  #000000000000FBFB  cmyk(0,0,0,251)
0,252: (0%,0%,0%,98.8235%)  #000000000000FCFC  cmyk(0,0,0,252)
0,253: (0%,0%,0%,99.2157%)  #000000000000FDFD  cmyk(0,0,0,253)
0,254: (0%,0%,0%,99.6078%)  #000000000000FEFE  cmyk(0,0,0,254)
0,255: (0%,0%,0%,100%)  #000000000000FFFF  cmyk(0,0,0,255)

Вы должны делать что-то другое — может быть, это поможет вам решить это. Я предполагаю, что это ваши профили ICC, но вы можете поэкспериментировать с приведенной выше командой.

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

convert -size 1x1 xc:#000000 -colorspace cmyk txt:
# ImageMagick pixel enumeration: 1,1,65535,cmyk
0,0: (0%,0%,0%,100%)  #000000000000FFFF  cmyk(0,0,0,255)

или, может быть, проще так:

convert -size 1x1 xc:#000000 -depth 8 -colorspace cmyk txt:
# ImageMagick pixel enumeration: 1,1,255,cmyk
0,0: (0,0,0,255)  #000000FF  cmyk(0,0,0,255)

Обратите внимание на следующее, хотя:

  1. Вы должны поставить профили между введите изображение и выведите имена изображений в командной строке.

  2. Если у вашего изображения нет встроенного профиля, первый заданный вами профиль применяется к входному изображению, а второй к выходному изображению. Если у вашего входного изображения есть профиль, первый заданный вами профиль применяется к выходному изображению.

0

Другие решения

Других решений пока нет …