我坚持这一点,希望有人有一个主意。
我正在尝试确定远程动态图像路径的文件扩展名。
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_url
和finfo_file
以及SplFileInfo
,但是在我测试它们时都没有。也许其中一个我不知道(?)。
我曾考虑过使用file_get_contents
-> file_put_contents
并将其保存在本地,但这在不知道文件扩展名的情况下是行不通的,这是所有这些操作的根本原因。
我无法将其转换为图像data:
(base64),因为这需要知道mime类型,而据我所知,这是不可能的,而又一次不知道文件扩展名和/或将其保存在本地。
而且,不能仅仅假设它总是xyz文件类型。
而且,执行某种类型的preg_match似乎更糟,因为不同的开发人员/程序对这种动态图像大小调整技术使用不同的方法。
我想我总是可以strpos($haystack, $needle)
检查一下针的组合(gif,png,jpeg等),但是,这个想法很可靠,嗯。>
所以,我以为我会在这里发帖,看看是否有人对如何从动态图像uri获得扩展名有个好主意。
答案 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;