imagecreatefromjpeg没有给我一个资源?

时间:2013-12-28 15:58:08

标签: php

我正在尝试编写用于文件大小调整的脚本。在脚本中,我使用getimagesize()从图像中获取mime信息,然后使用switch语句测试它的值,在不同情况下为变量分配不同的值。

然而,在运行脚本后,我收到了错误

PHP Warning:  imagecopyresampled() expects parameter 2 to be resource, string given in ..........

为什么我正在做的是从createimagefromjpeg传递变量时我是否收到此错误?

我的代码摘录:

list($width,$height,$type)=getimagesize($_FILES["BusinessCreateFileUpload"]["tmp_name"]);
        //checks the mime type and gets the extension
        //Declares the $uploadedfile,$src and $ext variables.
        $uploadedfile='';
        $src='';
        $ext='';
        switch($type)
        {
            case"image/jpeg":
                $uploadedfile=$_FILES["BusinessCreateFileUpload"]["tmp_name"];
                $src=imagecreatefromjpeg($uploadedfile);
                $ext=".jpg";
                break;
            case"image/png":
                $uploadedfile=$_FILES["BusinessCreateFileUpload"]["tmp_name"];
                $src=imagecreatefrompng($uploadedfile);
                $ext=".png";
                break;
            default:
                echo"An error has occurred.Please follow the <a href='http://localhost/Kenced/Business/edititem.php'>link to try again</a>";
        }
        //Creates thumbnail
        $newwidth=100;
        $newheight=100;
        $thumbimg=imagecreatetruecolor($newwidth, $newheight);
        imagecopyresampled($thumbimg,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
        //Creates displayimage
        $newwidth1=250;
        $newheight1=250;
        $displayimg=imagecreatetruecolor($newwidth1, $newheight1);
        imagecopyresampled($displayimg,$src,0,0,0,0,$newwidth1,$newheight1,$width,$height);

我正在编辑我在互联网上找到的脚本的一些部分,因为我仍然是编程的新手,所以我可能无意中搞砸了一些东西,虽然我似乎无法弄清楚我到底去了哪里错。

2 个答案:

答案 0 :(得分:2)

您的代码将默认值$src设置为空字符串。然后,以下行访问此$src的空字符串,这就是它给出错误的原因:

imagecopyresampled($thumbimg,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
imagecopyresampled($displayimg,$src,0,0,0,0,$newwidth1,$newheight1,$width,$height);

根据您的代码,当switch $type的情况假定为默认值时会发生这种情况,因此您的代码也必须输出以下行:

  

发生错误。请按照link to try again

进行操作

关于OP的评论(答案似乎很长,所以包括在这里):

  • 首先,让您的脚本在switch语句的die中使用echo而不是default case。因此,如果$type的值不符合要求,那么脚本将发出错误并停止。

  • 其次,函数getimagesize将mimetype作为INT值返回,这是您的变量$type将被设置为的值。相反,您将$type变量与错误的字符串进行比较,并始终使用default案例。因此,请更改switch语句并将值与INT值进行比较。

  • 此外,请确保您的case语句和echo语句在关键字后面有空格,即在caseecho


考虑到上述情况,您可以使用以下命令替换switch语句:

$src = 0;
switch($type)
    {
        case 2:
            $uploadedfile=$_FILES["BusinessCreateFileUpload"]["tmp_name"];
            $src=imagecreatefromjpeg($uploadedfile);
            $ext=".jpg";
            break;
        case 3:
            $uploadedfile=$_FILES["BusinessCreateFileUpload"]["tmp_name"];
            $src=imagecreatefrompng($uploadedfile);
            $ext=".png";
            break;
        default:
            die "An error has occurred.Please follow the <a href='http://localhost/Kenced/Business/edititem.php'>link to try again</a>";
    }

答案 1 :(得分:0)

getimagesize函数在第3个参数中使用int值返回类型,而不是字符串mimetype。

检查php.net中的文档。

  

1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(英特尔)   字节顺序),8 = TIFF(motorola字节顺序),9 = JPC,10 = JP2,11 =   JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM

var_dump $type变量。