多个图像在上载时调整大小并重命名

时间:2013-12-18 07:13:04

标签: php

我正在尝试调整图片大小。它适用于单张图像。但是对于多个图像,我必须使用循环来逐个获取图像。

我收到错误==> 致命错误:无法重新声明createthumb()

以下是我的索引代码

HTML

<input id="files" name="files[]" multiple="multiple" accept="image/*" type="file">

PHP

$count = count($_FILES['files']['name']);

    $i = 0;
    while($i<$count)
    {
        move_uploaded_file($_FILES["files"]["tmp_name"][$i],"uploaded_files/" . $_FILES["files"]["name"][$i]);

        //===========>Image Resize<=============
        function createthumb($name,$filename,$new_w,$new_h)
        {
            $system=explode(".",$name);

            if (preg_match("/jpg|JPG|jpeg|JPEG/",$system[1])){$src_img=imagecreatefromjpeg($name);}

            elseif (preg_match("/png|PNG/",$system[1])){$src_img=imagecreatefrompng($name);}

            elseif (preg_match("/gif|GIF/",$system[1])){$src_img=imagecreatefromgif($name);}


            $old_x=imageSX($src_img);
            $old_y=imageSY($src_img);

            $thumb_w=500;
            $thumb_h=300;

            $dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);
            imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y); 

            if (preg_match("/png/",$system[1]))
            {
                imagepng($dst_img,$filename); 
            } 
                elseif (preg_match("/gif/",$system[1]))
            {
                imagegif($dst_img,$filename); 
            }
            else{
            imagejpeg($dst_img,$filename); 
            }

            imagedestroy($dst_img); 
            imagedestroy($src_img); 
        }
        $source_photo = 'uploaded_files/'. $_FILES["files"]["name"][$i];
        $dest_photo = 'uploaded_files/'.$id.'_'.$i.'jpg';
         //$d has some defined velue
        $d = createthumb($source_photo, $dest_photo, 400, 400);



        //===========>Image Resize<============
        $i++;
    }

如果任何人修理它会很棒。

3 个答案:

答案 0 :(得分:1)

你在function declaration循环中正在while 这样做......

$count = count($_FILES['files']['name']);

$i = 0;
while($i<$count)
{
    move_uploaded_file($_FILES["files"]["tmp_name"][$i],"uploaded_files/" . $_FILES["files"]["name"][$i]);

    //===========>Image Resize<=============

    $source_photo = 'uploaded_files/'. $_FILES["files"]["name"][$i];
    $dest_photo = 'uploaded_files/'.$id.'_'.$i.'jpg';
     //$d has some defined velue
    $d = createthumb($source_photo, $dest_photo, 400, 400);

    //===========>Image Resize<============
    $i++;
}

function createthumb($name,$filename,$new_w,$new_h)
{
    // function defination        
}

答案 1 :(得分:0)

错误消息“无法重新声明createthumb()”,因为函数createthumb声明位于while循环内。你能把它移到循环外面吗?

答案 2 :(得分:0)

尝试将create_thumb()函数声明移动到脚本的顶部/底部 - 就像你在while循环中一样,我想它正试图在第二次迭代时重新声明该函数,这是失败的。

修改

这一行还有一个错误:

$dest_photo = 'uploaded_files/'.$id.'_'.$i.'jpg';

$ id尚未在任何地方定义,并且应该有一个额外的“。”在'jpg'前面正确设置扩展名。尝试类似:

$dest_photo = 'uploaded_files/thumb.jpg';

应该有效。如果上传的文件是GIF / PNG /等,您只需要做一些额外的逻辑来更改扩展名。