Ik wil in een PHP web applicatie (op basis van Zend Framework 2) een PDF bestand (in CMYK) omzetten naar een JPG bestand, in RGB om een preview van het bestand te genereren.
Ik heb het geprobeerd via de command line, en dit werkt perfect:
Nu wil ik dit gaan uitvoeren in mijn applicatie. Om te beginnen heb ik het zelfde commando nog eens uitgevoerd via exec, dit werkt - zoals je verwacht - ook prima.
Maar, ik wil graag de PHP Imagick package gebruiken. Ik heb de volgende test case gemaakt:
Maar, het verschilt met de command line actie!
Zien jullie wat ik vergeet of verkeerd doe?
Hieronder een afbeelding met het verschil.

Bovenste kleuren zijn correct, zowel in de PDF als in de gegenereerde JPEG dezelfde kleuren. Gegenereerd via de command line actie. De onderste kleuren zijn gegenereerd via PHP.
Systeem informatie:
OS: Ubuntu 14.04
PHP Version 5.5.9 (cli & apache2)
ImageMagick 6.9.1-2 (apache2)
ImageMagick 6.7.7-10 (cli)
Ik heb het geprobeerd via de command line, en dit werkt perfect:
code:
1
| convert data/test_data/Folder.pdf -profile data/icc/cmyk/USWebCoatedSWOP.icc -profile data/icc/rgb/AdobeRGB1998.icc output.jpg |
Nu wil ik dit gaan uitvoeren in mijn applicatie. Om te beginnen heb ik het zelfde commando nog eens uitgevoerd via exec, dit werkt - zoals je verwacht - ook prima.
PHP: filename
1
2
3
4
| $fileToConvert = 'data/test_data/Folder.pdf'; $inputIccProfile = 'data/icc/cmyk/USWebCoatedSWOP.icc'; $outputIccProfile = 'data/icc/rgb/AdobeRGB1998.icc'; $destenationFileName = 'data/output.jpg'; |
PHP: filename
1
2
| $strCommand = sprintf("convert %s -profile %s -profile %s %s", $fileToConvert, $inputIccProfile, $outputIccProfile, $destenationFileName); exec($strCommand); |
Maar, ik wil graag de PHP Imagick package gebruiken. Ik heb de volgende test case gemaakt:
PHP: filename
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| $im = new \Imagick($fileToConvert); if ($im->getImageColorspace() == \Imagick::COLORSPACE_CMYK) { $profiles = $im->getImageProfiles('*', false); $hasIccProfile = (array_search('icc', $profiles) !== false); if (!$hasIccProfile) { $iccCmyk = file_get_contents($inputIccProfile); $im->profileImage('icc', $iccCmyk); } } if ($im->getImageColorspace() != \IMagick::COLORSPACE_RGB && $im->getImageColorspace() != \IMagick::COLORSPACE_GRAY) { $iccRgb = file_get_contents($outputIccProfile); $im->profileImage('icc', $iccRgb); $im->setImageColorspace(\Imagick::COLORSPACE_RGB); } $im->writeImages($destenationFileName, false); |
Maar, het verschilt met de command line actie!
Zien jullie wat ik vergeet of verkeerd doe?
Hieronder een afbeelding met het verschil.

Bovenste kleuren zijn correct, zowel in de PDF als in de gegenereerde JPEG dezelfde kleuren. Gegenereerd via de command line actie. De onderste kleuren zijn gegenereerd via PHP.
Systeem informatie:
OS: Ubuntu 14.04
PHP Version 5.5.9 (cli & apache2)
ImageMagick 6.9.1-2 (apache2)
ImageMagick 6.7.7-10 (cli)