Page 1 of 1

CMYK Conversion works OK on Win32, but not Linux

Posted: 2016-02-01T03:00:16-07:00
by OneFunk
I'm trying to write some PHP that will make a decent attempt at converting a CMYK image into an sRGB image

An example original CMYK image is...


In chrome it looks far too bright.. It should look more like this...


My code appears to work OK on my local WAMP development installation. However, when I run it on my linux server, the resulting image looks just like the original image. i.e. no conversion.

Running the convert command, manually on the command line, converts the image fine... So i think the profiles, and imagemagick are installed ok.

Code: Select all

$ convert cmyk2.jpg -profile sRGB.icc s.jpg

The code I have looks like this.... I'm not sure what's not working, and how to go about fixing this. Can you help?

Code: Select all

$dir = __DIR__;
$out = "rgb_output.jpg";

$img = new \Imagick($dir."/cmyk2.jpg");
if ($img->getImageColorspace() == Imagick::COLORSPACE_CMYK) {
    $profiles = $img->getImageProfiles('*', false);
    echo "<br>"; var_export($profiles);

    $has_icc_profile = (array_search('icc', $profiles) !== false);
    if ($has_icc_profile === false) {
        echo "<br> $has_icc_profile === false";
        $icc_cmyk = file_get_contents($dir . '/profiles/USWebUncoated.icc');
        $img->profileImage('icc', $icc_cmyk);
    $icc_rgb = file_get_contents($dir . '/profiles/sRGB.icm');
    echo "<br>".strlen($icc_rgb);
    $img->profileImage('icc', $icc_rgb);

    $profiles = $img->getImageProfiles('*', false);
    echo "<br>"; var_export($profiles);

    //$img->stripImage(); // this will drop down the size of the image dramatically (removes all profiles)

    if ($img->writeImage("$dir/$out")) {
        $profiles = $img->getImageProfiles('*', false);
        echo "<br>"; var_export($profiles);
        echo "<br>written ok <a target=_blank href='".$out."?rnd=".rand(11111,99999)."'>view the pic</a>";
    } else {
        echo "cant write";
else {
    echo "Not a CMYK image";