change color range image

Viewed 74

I am using PHP-Imagick to convert a PDF into images, which works fine.

A simplified example:

$im = new imagick();
$im->setResolution(250,250);
$page = $pdfPath."[0]";
$im->readImage($page);
if($im->getImageColorspace() == Imagick::COLORSPACE_CMYK) 
{
    $im->transformImageColorspace(Imagick::COLORSPACE_SRGB);
    $im->autoLevelImage();          
}
$im->setImageFormat('jpg');
$im->setImageCompression(imagick::COMPRESSION_JPEG);
$im->setImageCompressionQuality(90);
$im->writeImage("page1.jpg");

However the coloring seems to differ from the original PDF, for example (see image)

  • left side is original PDF.
  • right side the rendered image, which has different colors than the original.

enter image description here

It seems that the original color of dark-pink turns into purle. Also red colors seem to saturate.

I have tried the following, but none worked:

  1. reduce saturation (e.g. $im->modulateImage(100, 80, 100); ) But this causes red to become orange and yellow colors to turn greenish.(see example below)

enter image description here

  1. playing around with image filter (e.g. imagefilter($im, IMG_FILTER_COLORIZE,100, 0, 0); ), but this also changes all colors.

  2. Thinking it had to do with differences between CMYK and RGB, I have added $im->transformImageColorspace() doesn't do anything to fix this.

  3. playing with various hue filters, but these change all colors of the image also.

Question: it seems I need to reduce the redness of the image? (I think it's the excessive red color causing the difference) without affecting the other colors, so that for example yellow remains yellow. Is there a way to do this in PHP?

1 Answers

The solution is to add the following line before reading the image:

The code should be:

$im->setColorspace(Imagick::COLORSPACE_SRGB);
$im->readImage($page);
Related