我正在尝试向我的网站添加一个功能,用户可以将其个人资料图片设置为来自外部网址的图片,而不是将其保存到自己的电脑上,然后将其上传到我的服务器。
这是我到目前为止所提出的:
$filename = $inputs['image_url'];
if(getimagesize($filename)){
// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = 100;
$new_height = 100;
// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
//a check needs to be done here $image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
$filename = "profile_pictures/". md5( uniqid(rand(),true) ).".jpg";
imagejpeg($image_p,$filename,100);
}else{
echo 'This is not an image';
}
代码可以很好地下载.jpg图像,但我也想支持其他文件类型。
我需要以某种方式检查图像的文件类型,以便我可以使用不同的文件类型保存其他图像......
if($extension=="jpg" || $extension=="jpeg"){
$image = imagecreatefromjpeg($filename);
}else if($extension=="png"){
image = imagecreatefrompng($filename);
}else{
$image = imagecreatefromgif($filename);
}
是否有人知道允许我这样做的功能?
提前感谢您的回复。
答案 0 :(得分:2)
最直接的,对于GD兼容性检查,您可以从字符串创建它:
$image = imagecreatefromstring(file_get_contents($filename));
如果加载失败,您就知道无法处理该图像。
但同样请getimagesize
,它也会检查文件类型,而不仅仅是宽度和高度:
list($width, $height, $type) = getimagesize($filename);
第三个元素$type
则是这些IMAGETYPE_XXX
个常量中的任何一个:
Value Constant
1 IMAGETYPE_GIF
2 IMAGETYPE_JPEG
3 IMAGETYPE_PNG
4 IMAGETYPE_SWF
5 IMAGETYPE_PSD
6 IMAGETYPE_BMP
7 IMAGETYPE_TIFF_II (intel byte order)
8 IMAGETYPE_TIFF_MM (motorola byte order)
9 IMAGETYPE_JPC
10 IMAGETYPE_JP2
11 IMAGETYPE_JPX
12 IMAGETYPE_JB2
13 IMAGETYPE_SWC
14 IMAGETYPE_IFF
15 IMAGETYPE_WBMP
16 IMAGETYPE_XBM
17 IMAGETYPE_ICO
来自exif_imagetype
。如果将两者结合使用,可以先检查是否可以为您加载类型,然后检查是否可以加载它。
答案 1 :(得分:1)
Splfileinfo::getextension.php
可能正是您所需要的。
编辑:我误读了,你只想查看一个字符串的扩展名。在PHP中没有内置函数,你只需使用正则表达式:
$ext = substr(strrchr($fileName,'.'),1);
答案 2 :(得分:1)
你可以试试这个
$fileExtention = pathinfo ( $filename, PATHINFO_EXTENSION );
或者
$fileExtention = image_type_to_extension(exif_imagetype($filename));
最后我会建议你使用像http://phpthumb.sourceforge.net/这样的东西,而不是你需要操作图像的东西