Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 禁用gif调整大小或在不丢失动画的情况下调整大小_Php_Upload_Gd_Gif_Animated Gif - Fatal编程技术网

Php 禁用gif调整大小或在不丢失动画的情况下调整大小

Php 禁用gif调整大小或在不丢失动画的情况下调整大小,php,upload,gd,gif,animated-gif,Php,Upload,Gd,Gif,Animated Gif,我在互联网上找到了这段代码,一切正常,但我不想调整gif图像的大小,因为当我调整gif动画文件的大小时,会破坏动画。或者,如果在不丢失动画的情况下很容易调整gif动画图像的大小 这是upload.php文件 if(isset($_POST)) { ############ Edit settings ############## $BigImageMaxSize = 500; //Image Maximum height or width $ThumbPre

我在互联网上找到了这段代码,一切正常,但我不想调整gif图像的大小,因为当我调整gif动画文件的大小时,会破坏动画。或者,如果在不丢失动画的情况下很容易调整gif动画图像的大小

这是upload.php文件

if(isset($_POST))
{
    ############ Edit settings ##############
    $BigImageMaxSize        = 500; //Image Maximum height or width
    $ThumbPrefix            = "thumb_"; //Normal thumb Prefix
    $DestinationDirectory   = 'uploads/'; //specify upload directory ends with / (slash)
    $Quality                = 90; //jpeg quality
    ##########################################

    //check if this is an ajax request
    if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])){
        die();
    }

    // check $_FILES['ImageFile'] not empty
    if(!isset($_FILES['ImageFile']) || !is_uploaded_file($_FILES['ImageFile']['tmp_name']))
    {
            die('Something wrong with uploaded file, something missing!'); // output error when above checks fail.
    }

    // Random number will be added after image name
    $RandomNumber   = rand(0, 9999999999); 

    $ImageName      = str_replace(' ','-',strtolower($_FILES['ImageFile']['name'])); //get image name
    $ImageSize      = $_FILES['ImageFile']['size']; // get original image size
    $TempSrc        = $_FILES['ImageFile']['tmp_name']; // Temp name of image file stored in PHP tmp folder
    $ImageType      = $_FILES['ImageFile']['type']; //get file type, returns "image/png", image/jpeg, text/plain etc.

    //Let's check allowed $ImageType, we use PHP SWITCH statement here
    switch(strtolower($ImageType))
    {
        case 'image/png':
            //Create a new image from file 
            $CreatedImage =  imagecreatefrompng($_FILES['ImageFile']['tmp_name']);
            break;
        case 'image/gif':
            $CreatedImage =  imagecreatefromgif($_FILES['ImageFile']['tmp_name']);
            break;          
        case 'image/jpeg':
        case 'image/pjpeg':
            $CreatedImage = imagecreatefromjpeg($_FILES['ImageFile']['tmp_name']);
            break;
        default:
            die('Unsupported File!'); //output error and exit
    }   
    //PHP getimagesize() function returns height/width from image file stored in PHP tmp folder.
    //Get first two values from image, width and height. 
    //list assign svalues to $CurWidth,$CurHeight
    list($CurWidth,$CurHeight)=getimagesize($TempSrc);

    //Get file extension from Image name, this will be added after random name
    $ImageExt = substr($ImageName, strrpos($ImageName, '.'));
    $ImageExt = str_replace('.','',$ImageExt);

    //remove extension from filename
    $ImageName      = preg_replace("/\\.[^.\\s]{3,4}$/", "", $ImageName); 

    //Construct a new name with random number and extension.
    $NewImageName = $RandomNumber.'.'.$ImageExt;

    //set the Destination Image
    $DestRandImageName          = $DestinationDirectory.$NewImageName; // Image with destination directory

    //Resize image to Specified Size by calling resizeImage function.
    if(resizeImage($CurWidth,$CurHeight,$BigImageMaxSize,$DestRandImageName,$CreatedImage,$Quality,$ImageType))
    {
        //Create a square Thumbnail right after, this time we are using cropImage() function
        /*
        We have succesfully resized and created thumbnail image
        We can now output image to user's browser or store information in the database
        */
        echo '<table width="100%" border="0" cellpadding="4" cellspacing="0">';
        echo '<tr>';
        echo '</tr><tr>';
        echo '<td align="center"><img src="uploads/'.$NewImageName.'" alt="Resized Image"></td>';
        echo '</tr>';
        echo '</table>';

        /*
        // Insert info into database table!
        mysql_query("INSERT INTO myImageTable (ImageName, ThumbName, ImgPath)
        VALUES ($DestRandImageName, $thumb_DestRandImageName, 'uploads/')");
        */

    }else{
        die('Resize Error'); //output error
    }
}


// This function will proportionally resize image 
function resizeImage($CurWidth,$CurHeight,$MaxSize,$DestFolder,$SrcImage,$Quality,$ImageType)
{
    //Check Image size is not 0
    if($CurWidth <= 0 || $CurHeight <= 0) 
    {
        return false;
    }

    //Construct a proportional size of new image
    $ImageScale         = min($MaxSize/$CurWidth, $MaxSize/$CurHeight); 
    $NewWidth           = ceil($ImageScale*$CurWidth);
    $NewHeight          = ceil($ImageScale*$CurHeight);
    $NewCanves          = imagecreatetruecolor($NewWidth, $NewHeight);

    //Merci Yves pour la transparence
    imagealphablending($NewCanves, false);
    imagesavealpha($NewCanves,true);
    $transparent = imagecolorallocatealpha($NewCanves, 255, 255, 255, 127);
    imagefilledrectangle($NewCanves, 0, 0, $NewWidth, $NewHeight, $transparent);
    // Resize Image
    if(imagecopyresampled($NewCanves, $SrcImage,0, 0, 0, 0, $NewWidth, $NewHeight, $CurWidth, $CurHeight))
    {
        switch(strtolower($ImageType))
        {
            case 'image/png':
                imagepng($NewCanves,$DestFolder);
                break;
            case 'image/gif':
                imagegif($NewCanves,$DestFolder);
                break;          
            case 'image/jpeg':
            case 'image/pjpeg':
                imagejpeg($NewCanves,$DestFolder,$Quality);
                break;
            default:
                return false;
        }
    //Destroy image, frees memory   
    if(is_resource($NewCanves)) {imagedestroy($NewCanves);} 
    return true;
    }

}

//This function corps image to create exact square images, no matter what its original size!
function cropImage($CurWidth,$CurHeight,$iSize,$DestFolder,$SrcImage,$Quality,$ImageType)
{    
    //Check Image size is not 0
    if($CurWidth <= 0 || $CurHeight <= 0) 
    {
        return false;
    }

    //abeautifulsite.net has excellent article about "Cropping an Image to Make Square bit.ly/1gTwXW9
    if($CurWidth>$CurHeight)
    {
        $y_offset = 0;
        $x_offset = ($CurWidth - $CurHeight) / 2;
        $square_size    = $CurWidth - ($x_offset * 2);
    }else{
        $x_offset = 0;
        $y_offset = ($CurHeight - $CurWidth) / 2;
        $square_size = $CurHeight - ($y_offset * 2);
    }

    $NewCanves  = imagecreatetruecolor($iSize, $iSize); 
    if(imagecopyresampled($NewCanves, $SrcImage,0, 0, $x_offset, $y_offset, $iSize, $iSize, $square_size, $square_size))
    {
        switch(strtolower($ImageType))
        {
            case 'image/png':
                imagepng($NewCanves,$DestFolder);
                break;
            case 'image/gif':
                imagegif($NewCanves,$DestFolder);
                break;          
            case 'image/jpeg':
            case 'image/pjpeg':
                imagejpeg($NewCanves,$DestFolder,$Quality);
                break;
            default:
                return false;
        }
    //Destroy image, frees memory   
    if(is_resource($NewCanves)) {imagedestroy($NewCanves);} 
    return true;

    }

}
if(isset($\u POST))
{
############编辑设置##############
$BigImageMaxSize=500;//图像最大高度或宽度
$ThumbPrefix=“thumb\uz”;//普通thumb前缀
$DestinationDirectory='uploads/';//指定上载目录以/(斜杠)结尾
$Quality=90;//jpeg质量
##########################################
//检查这是否是一个ajax请求
如果(!isset($\u服务器['HTTP\u X\u请求的\u带有'])){
模具();
}
//检查$\u文件['ImageFile']是否不为空
如果(!isset($_FILES['ImageFile'])| |!是否上载了文件($_FILES['ImageFile']['tmp_name']))
{
die('上传的文件有问题,丢失了!');//当上述检查失败时,输出错误。
}
//随机数将添加在图像名称之后
$RandomNumber=rand(099999999);
$ImageName=str_replace(“”,“-”,strtolower($_FILES['ImageFile']['name']);//获取图像名称
$ImageSize=$\u文件['ImageFile']['size'];//获取原始图像大小
$TempSrc=$\u FILES['ImageFile']['tmp\u name'];//存储在PHP tmp文件夹中的图像文件的临时名称
$ImageType=$_FILES['ImageFile']['type'];//获取文件类型,返回“image/png”、image/jpeg、text/plain等。
//让我们检查允许的$ImageType,我们在这里使用PHP开关语句
开关(strtolower($ImageType))
{
案例“image/png”:
//从文件创建新图像
$CreatedImage=imagecreatefrompng($_文件['ImageFile']['tmp_名称]]);
打破
案例“image/gif”:
$CreatedImage=imagecreatefromgif($_文件['ImageFile']['tmp_名称]]);
打破
案例“图像/jpeg”:
案例“image/pjpeg”:
$CreatedImage=imagecreatefromjpeg($_文件['ImageFile']['tmp_名称]]);
打破
违约:
die('Unsupported File!');//输出错误并退出
}   
//函数的作用是:返回存储在PHP tmp文件夹中的图像文件的高度/宽度。
//从图像中获取前两个值:宽度和高度。
//列表将S值分配给$CurWidth、$CurHeight
列表($CurWidth,$CurHeight)=getimagesize($TempSrc);
//从图像名称获取文件扩展名,该扩展名将添加到随机名称之后
$ImageExt=substr($ImageName,strrpos($ImageName,'.');
$ImageExt=str_replace('.',''.$ImageExt);
//从文件名中删除扩展名
$ImageName=preg\u replace(“/\\..^\\s]{3,4}$/”,“”,$ImageName);
//用随机数和扩展名构造一个新名称。
$NewImageName=$RandomNumber....$ImageExt;
//设置目标映像
$DestRandImageName=$DestinationDirectory.$NewImageName;//具有目标目录的图像
//通过调用resizeImage函数将图像调整为指定大小。
如果(调整图像大小($CurWidth、$CurHeight、$BigImageMaxSize、$DestRandImageName、$CreatedImage、$Quality、$ImageType))
{
//之后立即创建一个方形缩略图,这次我们使用cropImage()函数
/*
我们已经成功地调整了大小并创建了缩略图
我们现在可以将图像输出到用户的浏览器或将信息存储在数据库中
*/
回声';
回声';
回声';
回声';
回声';
回声';
/*
//将信息插入数据库表!
mysql_查询(“插入myImageTable(ImageName、ThumbName、ImgPath)
值($DestRandImageName,$thumb_DestRandImageName,'uploads/');
*/
}否则{
模具('Resize Error');//输出错误
}
}
//此函数将按比例调整图像大小
函数resizeImage($CurWidth、$CurHeight、$MaxSize、$DestFolder、$SrcImage、$Quality、$ImageType)
{
//检查图像大小是否为0

如果($CurWidth解决方案1:

您可以使用ImageMagick调整gif文件的大小,而不会丢失动画:

convert animation.gif -coalesce coalesce.gif
convert -size 128x128 coalesce.gif -resize 96x96 small.gif
要在PHP脚本中执行此操作,请使用函数

解决方案2:

如果不想调整gif动画的大小,也可以将第一个开关更改为:

switch(strtolower($ImageType))
{
    case 'image/png':
        //Create a new image from file 
        $CreatedImage =  imagecreatefrompng($_FILES['ImageFile']['tmp_name']);
        break;         
    case 'image/jpeg':
    case 'image/pjpeg':
        $CreatedImage = imagecreatefromjpeg($_FILES['ImageFile']['tmp_name']);
        break;
    case 'image/gif':
        $tmp_name = $_FILES['ImageFile']["tmp_name"];
        $name = $_FILES['ImageFile']["name"];
        move_uploaded_file($tmp_name, "$DestinationDirectory/$name");
        break;
    default:
        die('Unsupported File!'); //output error and exit
}
如果您尝试转换gif图像,这将使您的脚本只需将上载的文件移动到目标文件夹

如果执行此操作,则应在开关后添加类似的内容,以防止未设置
$CreatedImage
时执行其余代码:

if(isset($CreatedImage)){
   // The rest of the code from inside if(isset($_POST)){ ... } 
}

谢谢您的快速回答Casper,但使用解决方案2无法上载gif文件。我想在不丢失动画的情况下上载。非常感谢您,但仍然无法正常工作:(如何将解决方案1用于我的代码?