【问题标题】:Should I trust Imagick::getImageFormat()?我应该相信 Imagick::getImageFormat() 吗?
【发布时间】:2013-01-21 00:27:42
【问题描述】:

我需要知道我是否可以信任此代码来获取图像格式:

$image = new Imagick($path);
$format = $image->getImageFormat();

还是应该像往常一样检查扩展名、mime 类型等?

【问题讨论】:

    标签: php image imagemagick imagick


    【解决方案1】:

    您可以信任它,而不仅仅是使用简单的 php 字符串函数检查文件的扩展名(例如pic.jpg)。

    你可以做一个实验。例如,重命名.jpg 图像文件,使其变为.png。使用 Windows“重命名”的简单工具。所以现在看起来图像是.png 图像。 但是在cmd 中尝试Imagick-verbose 命令,如下所示:

    C:\>identify -verbose pic.png
    Image: pic.png
      Format: JPEG (Joint Photographic Experts Group JFIF format)
      Class: DirectClass
      Geometry: 482x362+0+0
      Resolution: 72x72
      ... many more here ...
    

    您会看到实际上图像是.jpg。程序中某处的$image->getImageFormat(); 也是如此。

    Imagick 是一个强大的工具。不幸的是,PHP 中关于其 API 的信息比 GD 少得多。

    【讨论】:

    • 是的,这就是问题所在,php 文档中几乎没有关于 Imagick 的信息。在那里的某个地方,我读到一条评论说“getImageFormat”只显示您自己设置的格式。但是我没有设置任何格式并且效果很好,所以我不知道......我也知道扩展名是不够的,我曾经检查过所有内容,并在轻微威胁时丢弃,例如:它没有不管它是否看起来是一个 gif。如果它的扩展名是 .sh 或 .php,我会丢弃它,因为可能会有代码被屏蔽为 gif。
    • 那是getFormat返回你设置的内容,根据文档,getImageFormat更准确。
    【解决方案2】:

    如果您对 Imagick 类不满意,您可以随时尝试 GD 函数。例如

    list (width, height, $type) = getimagesize($path);
    

    $type 变量将是 IMAGETYPE_GIFIMAGETYPE_JPEGIMAGETYPE_PNG 等之一

    http://php.net/manual/en/function.getimagesize.phphttp://php.net/manual/en/image.constants.php

    【讨论】:

    • 是的,这很好,但我不想多次打开图像。如果我能用 Imagick 来做就更好了,因为无论如何我都会用它来做其他事情。
    猜你喜欢
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2015-11-03
    • 1970-01-01
    相关资源
    最近更新 更多