PHP/GD - 查找图像资源类型

发布于 2024-08-16 11:15:10 字数 216 浏览 4 评论 0原文

仅拥有有效的 GD 图像资源是否可以找出原始图像的类型?

例如:

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

我能否获取仅包含 $image 变量的原始图像类型(PNG) ?

Having only a valid GD image resource is it possible to find out the type of the original image?

For instance:

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

Can I get the original image type (PNG) having only the $image variable available?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

想你只要分分秒秒 2024-08-23 11:15:10

我不确定是否可以从 $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);

从您的问题描述来看,我认为您想使用远程文件,因此您可以执行类似的操作 code

$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);
}

I am not sure if it can be done from the $image variable, but to get the MimeType, you can usually use any of the four:

// 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);

From your question description I take you want to use a remote file, so you could do something like this to make this work:

$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);

Note: if the MimeType function you will use supports remote files, use it directly, instead of creating a copy of the file first

If you need the MimeType just to determine which imagecreatefrom function to use, why not load the file as a string first and then let GD decide, e.g.

// returns GD image resource of false
$imageString = file_get_contents('http://www.example.com/image.png');
if($imageString !== FALSE) {
    $image = imagecreatefromstring($imageString);
}
情绪失控 2024-08-23 11:15:10

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

I don't think so, no. $image is in GD's internal image format after it has been processed by the ImageCreate() function.

如痴如狂 2024-08-23 11:15:10

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

You could just try loading the resource with the png loader, and if it's not a png image, it will fail, returning FALSE. Then just repeat with each of the valid formats you want to have, and if all fail, then display an error.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文