Я использую 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 решением, которое я ищу, и знает ли кто-нибудь, поддерживается ли он или я должен использовать другой метод для получения того же результата.
Если вы используете 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)
Обратите внимание на следующее, хотя:
Вы должны поставить профили между введите изображение и выведите имена изображений в командной строке.
Если у вашего изображения нет встроенного профиля, первый заданный вами профиль применяется к входному изображению, а второй к выходному изображению. Если у вашего входного изображения есть профиль, первый заданный вами профиль применяется к выходному изображению.
Других решений пока нет …