【问题标题】:Imagick::getImageFormat returns "PNG" for svgimagick::getImageFormat 为 svg 返回“PNG”
【发布时间】:2017-05-17 00:30:11
【问题描述】:

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

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

令我惊讶的是,输出是PNG,尽管Imagick::queryFormats()SVG 列为已知类型。 从 apache,到 PHP,再到 imagick,一切都应该是最新的(全新安装):

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 文件,均返回 PNG。我尝试过的一个简单的 svg 文件来自 Wikipedia here。任何想法为什么imagick返回错误格式?正确检测 jpg 和 png 等光栅图形。

编辑:

Imagick::identifyImage 之前使用Imagick::pingImage 也会返回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 )

.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>

【问题讨论】:

  • Imagemagick 适用于光栅图像;我想知道阅读时是否转换了svg?您可以使用 Imagick::pingImage ping 图像我想知道它会返回什么。
  • 我试过ping和identifyImage,结果在我原来的帖子里。
  • 使用当前 ImageMagick-7.0.4-1,magick identify *.svg 返回 file.svg SVG 480x543 480x543+0+0 16-bit sRGB 813B 0.000u 0:00.079
  • @user7367183 请随时在github.com/mkoppanen/imagick/issues 上打开一个错误 - 我会看看它......今年。

标签: php svg imagemagick imagick


【解决方案1】:

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-&gt;getimageformat(); 获取图像格式 => 将是 PDF。

【讨论】:

  • 不仅 Imagick7 受到影响,我在 ImageMagick 6.8.9-9 上也遇到了同样的问题
猜你喜欢
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
  • 2022-01-24
  • 2016-05-13
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多