Pimcore\Image\Adapter\Imagick::setColorspaceToRGB PHP Method

setColorspaceToRGB() public method

public setColorspaceToRGB ( )
    public function setColorspaceToRGB()
    {
        $imageColorspace = $this->resource->getImageColorspace();
        if ($imageColorspace == \Imagick::COLORSPACE_CMYK) {
            if (self::getCMYKColorProfile() && self::getRGBColorProfile()) {
                $profiles = $this->resource->getImageProfiles('*', false);
                // we're only interested if ICC profile(s) exist
                $has_icc_profile = array_search('icc', $profiles) !== false;
                // if it doesn't have a CMYK ICC profile, we add one
                if ($has_icc_profile === false) {
                    $this->resource->profileImage('icc', self::getCMYKColorProfile());
                }
                // then we add an RGB profile
                $this->resource->profileImage('icc', self::getRGBColorProfile());
                $this->resource->setImageColorspace(\Imagick::COLORSPACE_SRGB);
                // we have to use SRGB here, no clue why but it works
            } else {
                $this->resource->setImageColorspace(\Imagick::COLORSPACE_SRGB);
            }
        } elseif ($imageColorspace == \Imagick::COLORSPACE_GRAY) {
            $this->resource->setImageColorspace(\Imagick::COLORSPACE_SRGB);
        } elseif (!in_array($imageColorspace, [\Imagick::COLORSPACE_RGB, \Imagick::COLORSPACE_SRGB])) {
            $this->resource->setImageColorspace(\Imagick::COLORSPACE_SRGB);
        } else {
            // this is to handle embedded icc profiles in the RGB/sRGB colorspace
            $profiles = $this->resource->getImageProfiles('*', false);
            $has_icc_profile = array_search('icc', $profiles) !== false;
            if ($has_icc_profile) {
                try {
                    // if getImageColorspace() says SRGB but the embedded icc profile is CMYK profileImage() will throw an exception
                    $this->resource->profileImage('icc', self::getRGBColorProfile());
                } catch (\Exception $e) {
                    Logger::warn($e);
                }
            }
        }
        // this is a HACK to force grayscale images to be real RGB - truecolor, this is important if you want to use
        // thumbnails in PDF's because they do not support "real" grayscale JPEGs or PNGs
        // problem is described here: http://imagemagick.org/Usage/basics/#type
        // and here: http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=6888#p31891
        $currentLocale = setlocale(LC_ALL, "0");
        // this locale hack thing is also a hack for imagick
        setlocale(LC_ALL, "en");
        // Set locale to "en" for ImagickDraw::point() to ensure the involved tostring() methods keep the decimal point
        $draw = new \ImagickDraw();
        $draw->setFillColor("#ff0000");
        $draw->setfillopacity(0.01);
        $draw->point(floor($this->getWidth() / 2), floor($this->getHeight() / 2));
        // place it in the middle of the image
        $this->resource->drawImage($draw);
        setlocale(LC_ALL, $currentLocale);
        // see setlocale() above, for details ;-)
        return $this;
    }