2

我正在尝试向我的网站添加一个功能,用户可以将他们的个人资料图片设置为来自外部 url 的图片,而不是将其保存到他们的电脑,然后将其上传到我的服务器。

到目前为止,这是我想出的:

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

有谁知道可以让我这样做的功能?

提前感谢您的任何回复。

4

3 回答 3

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. 如果将两者结合起来,您可以先检查类型是否可以为您加载,然后检查是否可以加载。

于 2012-04-12T20:04:11.473 回答
1

Splfileinfo::getextension.php可能正是您所需要的。

编辑:我看错了,您只想检查字符串的扩展名。PHP 中没有内置函数,您可以简单地使用 regexp :

$ext = substr(strrchr($fileName,'.'),1);
于 2012-04-12T19:59:52.510 回答
1

你可以试试这个

$fileExtention = pathinfo ( $filename, PATHINFO_EXTENSION );

或者

$fileExtention = image_type_to_extension(exif_imagetype($filename));

最后,我建议您使用 http://phpthumb.sourceforge.net/ 之类的东西,这比您操作图像所需的要多

于 2012-04-12T20:16:09.653 回答