【问题标题】:PHP/GD - Finding Image Resource TypePHP/GD - 查找图像资源类型
【发布时间】:2010-12-30 06:10:22
【问题描述】:

只有一个有效的GD图片资源,是否可以找出原始图片的类型?

例如:

$image = ImageCreateFromPNG('http://sstatic.net/so/img/logo.png');

我能否获得只有 $image 变量可用的原始图像类型 (PNG)?

【问题讨论】:

  • 问题是,只有图像资源标识符可用于您的代码,对于该对象来说原始文件是什么并不重要。为什么你需要知道?

标签: php image image-processing resources gd


【解决方案1】:

我不确定是否可以从 $image 变量中完成,但要获取 MimeType,通常可以使用以下四种中的任何一种:

// with GD
$img = getimagesize($path);
return $img['mime'];

// with FileInfo
$fi = new finfo(FILEINFO_MIME);
return $fi->file($path);

// with Exif (returns image constant value)
return exif_imagetype($path)

// deprecated
return mime_content_type($path);

根据您的问题描述,我认为您想使用远程文件,因此您可以执行以下操作来完成这项工作:

$tmpfname = tempnam("/tmp", "IMG_"); // use any path writable for you
$imageCopy = file_get_contents('http://www.example.com/image.png');
file_put_contents($tmpfname, $imageCopy);
$mimetype = // call any of the above functions on $tmpfname;
unlink($tmpfname);

注意:如果您将使用的 MimeType 函数支持远程文件,请直接使用它,而不是先创建文件的副本

如果您只需要 MimeType 来确定使用哪个 imagecreatefrom 函数,为什么不先将文件加载为字符串,然后让 GD 决定,例如

// returns GD image resource of false
$imageString = file_get_contents('http://www.example.com/image.png');
if($imageString !== FALSE) {
    $image = imagecreatefromstring($imageString);
}

【讨论】:

  • 不,这不是我想要的,因为我无权访问该路径。 =\
  • 但是您确实可以访问 一些 路径,对吗?
  • 不,他没有,只对打开的图像资源本身。
  • @Pekka 图像资源必须来自某个地方。在他的示例中,他使用的是 URL。所以即使他无权访问远程服务器上的文件,他也可以先将文件复制到他的服务器,然后从那里确定 MimeType
  • @Gordon:这个例子只是一个例子,在我的使用场景中,一个类构造函数将接收一个图像资源,我希望同一个构造函数来确定该资源是否是 PNG 图像。此构造函数无法知道原始图像的路径。
【解决方案2】:

我不这么认为,不。 $image 是经过ImageCreate() 函数处理后的GD 内部图像格式。

【讨论】:

  • 谢谢佩卡。不幸的是,我也不这么认为,但我会再等一会儿,看看是否有人能想出办法来做到这一点。
  • 背景是什么?也许您的问题有不同的解决方法?
  • 这是正确的 - 图像是 GD 的内部格式,因此可以输出为任何可用的格式。检测格式的唯一方法是使用原始图像文件。
  • @Pekka:查看我对 Gordon 答案的评论。
  • @adam:我也很确定,我会等到这个问题有 50 次左右的浏览量,以确保没有涉及黑魔法的工作方法。 =)
【解决方案3】:

您可以尝试使用 png 加载器加载资源,如果它不是 png 图像,它将失败,返回 FALSE。然后只需使用您想要的每种有效格式重复,如果全部失败,则显示错误。

【讨论】:

    猜你喜欢
    • 2011-01-13
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多