2017-01-02 9 views
1

のための「PNG」を返します。私の驚きにImagick :: getImageFormatが、私はこのようにPHPで画像の形式を確認するためにimagickを使用していSVG

$image = new Imagick('simple.svg'); 
echo $image->getImageFormat(); 

、出力もImagick::queryFormats()リストかかわらず、PNGです公知のタイプのものとして、SVGが挙げられる。 imagickにApacheから、PHPに すべて、最新の状態にする必要があります(新規インストール):

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 

私はすべてのPNGを返し、異なるの.svgファイルを試してみました。私が試した単純なsvgファイルの1つは、Wikipedia hereです。 imagickが偽の形式を返す理由は何ですか? jpgやpngのような荒っぽいグラフィックが正しく検出されます。

EDIT:だけでなくPNG Imagick::pingImageImagick::identifyImage前にリターンを使用し

[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) 

.SVGファイルは間違いなくPNGではありません。

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<svg xmlns="http://www.w3.org/2000/svg" version="1.0" width="480" height="543.03003" viewBox="0 0 257.002 297.5" xml:space="preserve"> 
<g transform="matrix(0.8526811,0,0,0.8526811,18.930632,21.913299)"> 
<polygon points="8.003,218.496 0,222.998 0,74.497 8.003,78.999 8.003,218.496 "/> 
<polygon points="128.501,287.998 128.501,297.5 0,222.998 8.003,218.496 128.501,287.998 " /> 
<polygon points="249.004,218.496 257.002,222.998 128.501,297.5 128.501,287.998 249.004,218.496 " /> 
<polygon points="249.004,78.999 257.002,74.497 257.002,222.998 249.004,218.496 249.004,78.999 " /> 
<polygon points="128.501,9.497 128.501,0 257.002,74.497 249.004,78.999 128.501,9.497 " /> 
<polygon points="8.003,78.999 0,74.497 128.501,0 128.501,9.497 8.003,78.999 " /> 
</g> 
</svg> 
+1

Imagemagickはラスターイメージで動作します。私はsvgが読み込まれると変換されるのだろうか? Imagick :: pingImageでイメージにpingを実行すると、何が返されるのだろうか? – Bonzo

+0

私はpingと 'identifyImage'を試みました、結果は私の元の投稿にあります。 – user7367183

+0

現在のImageMagick-7.0.4-1を使用すると、 'magick identify * .svg'が返されます。 file.svg SVG 480x543 480x543 + 0 + 0 16ビットsRGB 813B 0.000u 0:00.079 –

答えて

0

問題はImageMagickの7に解決しそうです+ しかし私は、ImageMagick 7.0.6-0でUbuntu 16でPDFを識別する同様の問題に遭遇しました。それは何らかの未知の理由でPNGを返し続けました。

明確な修正はありませんが、Imagickをオーバーロードすることでこのような問題を回避する方法があります。

class MyImagick extends Imagick{ 
     private function getimageidentifiction() { 
      $filename  = parent::getimagefilename(); 
      return exec('identify ' . addslashes($filename));        
     } 

     public function getimageformat() { 
      list($filename, $format, $resolution, $otherstuff) = explode(' ', $this->getimageidentifiction()); 
      return $format; 
     } 
    } 

その後、画像/ PDFファイルをロードするために$possible_image = new MyImagick($filename);を使用することができます。 そして$possible_image->getimageformat();を取得してimageformat =>をPDFにします。

関連する問題