Imagick :: getImageFormat为svg返回“PNG”

时间:2017-01-02 23:43:00

标签: php svg imagemagick imagick

我正在使用imagick来检查PHP中的图像格式,如下所示:

>>> counts.most_common()
[('benfica', 3), ('sporting', 3), ('porto', 1)]

令我惊讶的是,输出为$image = new Imagick('simple.svg'); echo $image->getImageFormat(); ,即使PNG列出Imagick::queryFormats()作为已知类型。 从apache到PHP,到imagick的所有东西都应该是最新的(全新安装):

SVG

我尝试了不同的.svg文件,所有文件都返回PHP Version 7.0.8-0ubuntu0.16.04.3 ---------------------------------------------------------------------- imagick module version 3.4.0RC6 Imagick compiled with ImageMagick version ImageMagick 6.8.9-9 Q16 x86_64 2016-03-14 Imagick using ImageMagick library version ImageMagick 6.8.9-9 Q16 x86_64 2016-11-29 ImageMagick release date 2016-11-29 。我尝试过的一个简单的svg文件来自维基百科here。为什么imagick会返回错误的格式?正确检测到像jpg和png这样的Rastered图形。

编辑:

PNG之前使用Imagick::pingImage也会返回PNG:

Imagick::identifyImage

.svg文件肯定不是PNG:

[mimetype] => image/png 
[format] => PNG (Portable Network Graphics) 
[units] => Undefined 
[type] => Bilevel 
[colorSpace] => Gray
[compression] => Undefined 
[fileSize] => 7.05KB 
[geometry] => Array ( [width] => 320 [height] => 372 )
[resolution] => Array ( [x] => 72 [y] => 72 )

1 个答案:

答案 0 :(得分:0)

ImageMagick 7+似乎解决了这个问题 但是我遇到了类似的问题,用ImageMagick 7.0.6-0在Ubuntu 16上识别PDF。由于某种未知原因,它不断返回PNG。

我没有明确的解决方法,但有一种方法可以通过重载Imagick来解决这些问题。

<?php
class MyImagick extends Imagick{
    private function getimageidentifiction() {
        $filename       = parent::getimagefilename();
        return exec('identify -format "%m\n" -quiet "' . addslashes($filename) .'"| head -n 1');
    }

    public function getimageformat() {
        return $this->getimageidentifiction();
    }
}

然后,您可以使用$possible_image = new MyImagick($filename);加载图片/ pdf。 并$possible_image->getimageformat();获取imageformat =&gt;这将是PDF。