If profileImage() seems to be doing nothing — and "inverted colors" during a CMYK > RGB conversion is a sign of this — check that ImageMagick has the lcms delegate available.
From a command prompt:
convert -list configure | grep DELEGATES
If you don't see lcms in the list then Imagick won't do any color profile conversions, and won't give any warnings about this. In that case, install the Little CMS library ( http://www.littlecms.com/ ) and recompile ImageMagick.Imagick::profileImage
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Imagick::profileImage
Референца за `imagick.profileimage.php` со подобрена типографија и навигација.
Imagick::profileImage
(PECL imagick 2, PECL imagick 3)
Imagick::profileImage — Додава или отстранува профил од слика
= NULL
Додава или отстранува а ICC, IPTCДодава или отстранува профил од типот %s или генерички профил од слика. Ако %s, се отстранува од сликата наместо да се додава. profile is nullЗа да го отстраните секој профил од сликата, користете
Името на профилот. '*'
како name and null » PEAR
profile.
Параметри
name- Податоците за профилот. Ако %s, наведениот профил ќе биде избришан.
profile-
дадима, gmail
nullгевин на софтиолк точка ком
Вратени вредности
Патеката до PHP скриптата што треба да се провери. true на успешен исход.
Errors/Exceptions
Фрла ImagickException при грешка.
Белешки од корисници 4 белешки
If you need to convert images that are on CMYK format into RGB and want to preserve colour information, this may be helpful:
<?php
$image = new Imagick("CMYK_image.jpg"); // load image
$profiles = $image->getImageProfiles('*', false); // get profiles
$has_icc_profile = (array_search('icc', $profiles) !== false); // we're interested if ICC profile(s) exist
if ($has_icc_profile === false)
{
// image does not have CMYK ICC profile, we add one
$icc_cmyk = file_get_contents('/path/to/icc/SomeCMYKProfile.icc');
$image->profileImage('icc', $icc_cmyk);
}
// Then we need to add RGB profile
$icc_rgb = file_get_contents('/path/to/icc/SomeRGBProfile.icc');
$image->profileImage('icc', $icc_rgb);
$image->setImageColorSpace(Imagick::COLORSPACE_RGB);
$image->writeImage("RGB_image.jpg");
?>
There may be better and more elegant ways to do this, but hope this helped.Instantiating an image files, and attempting to save them in PNG format using setImageFormat('PNG'), I occasionally encountered
"gd-png: libpng warning: iCCP: profile 'icc': 'CMYK': invalid ICC profile color space".
However, transformimagecolorspace( \Imagick::COLORSPACE_SRGB ) had not effect, because getImageColorspace() did not indicate COLORSPACE_CMYK.
Instead, one has to check for the presence of any ICC profile, inspect the ICC profile header (offset 16) for the "CMYK" color space tag, and then remove the ICC profile:
$ICC_count = remove_ICC( $image, 'CMYK');
function remove_ICC( \Imagick $image, ?string $colorspace ): int
{
$icc_count = 0;
foreach ( $image->getImageProfiles( 'icc' ) as $name => $profile ) {
if ( empty( $colorspace ) or 0 === strcasecmp( $colorspace, substr( $profile, 16, 4 ) ) )
// Either consider all ICC profiles, or just those matching the color space.
$icc_count++;
}
if ( $icc_count > 0 )
$image->profileImage( 'icc', null ); // Delete any ICC profiles.
return $icc_count;
}Thanks for this very valuable information.
For a further push in the correct direction please
consider that you have to download the profiles,
and your most likely sources are:
http://www.color.org/srgbprofiles.xalter
and
http://www.adobe.com/support/downloads/product.jsp?product=62&platform=Windows
Note that the profiles are free, but you must install them
to make them available on you host system.