从动态图片网址获取图片扩展名

时间:2019-02-28 06:13:59

标签: php

我坚持这一点,希望有人有一个主意。

我正在尝试确定远程动态图像路径的文件扩展名。

https://d2sh4fq2xsdeg9.cloudfront.net/contentAsset/image/93e9fb86-8f30-4fea-bdb9-90d63eb67e44/image/byInode/1/filter/Resize,Jpeg/jpeg_q/70/resize_w/1000

或者说https://placekitten.com/g/1000/1000

我尝试使用parse_urlfinfo_file以及SplFileInfo,但是在我测试它们时都没有。也许其中一个我不知道(?)。

我曾考虑过使用file_get_contents-> file_put_contents并将其保存在本地,但这在不知道文件扩展名的情况下是行不通的,这是所有这些操作的根本原因。

我无法将其转换为图像data: (base64),因为这需要知道mime类型,而据我所知,这是不可能的,而又一次不知道文件扩展名和/或将其保存在本地。

而且,不能仅仅假设它总是xyz文件类型。

而且,执行某种类型的preg_match似乎更糟,因为不同的开发人员/程序对这种动态图像大小调整技术使用不同的方法。

我想我总是可以strpos($haystack, $needle)检查一下针的组合(gif,png,jpeg等),但是,这个想法很可靠,嗯。

所以,我以为我会在这里发帖,看看是否有人对如何从动态图像uri获得扩展名有个好主意。

3 个答案:

答案 0 :(得分:3)

好吧,您可以发出一个cURL请求并检查响应头的content_type

<?php 

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,"https://d2sh4fq2xsdeg9.cloudfront.net/contentAsset/image/93e9fb86-8f30-4fea-bdb9-90d63eb67e44/image/byInode/1/filter/Resize,Jpeg/jpeg_q/70/resize_w/1000");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$result = curl_exec($ch);
echo curl_getinfo($ch)['content_type'];
curl_close($ch);

输出:

image/jpeg

#Update:

如果您只想检查图像扩展名而又不希望返回图像文件,那么您可以按照评论中的 @SalmanA 的说明制作HEAD request

您需要在上述curl请求中添加以下行:

curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"HEAD");

答案 1 :(得分:2)

首先使用finfo获取图片的mime类型。

if (colorOut.r <= 1.0 && colorOut.r > 0.7)
{
    colorOut.r=*color_1.r;
}

然后使用下面的文件扩展名

$url = "https://d2sh4fq2xsdeg9.cloudfront.net/contentAsset/image/93e9fb86-8f30-4fea-bdb9-90d63eb67e44/image/byInode/1/filter/Resize,Jpeg/jpeg_q/70/resize_w/1000";
$finfo = new finfo(FILEINFO_MIME_TYPE);
$type = $finfo->buffer(file_get_contents($url));
print_r($type);

答案 2 :(得分:0)

您可以尝试:

$url = 'https://placekitten.com/g/1000/1000';
$type = get_headers($url, 1)["Content-Type"];
echo $type;