PHP实现图片上传并压缩

5年以前  |  阅读数:860 次  |  编程语言:PHP 

本文实例讲解了PHP图片上传并压缩的实现方法,分享给大家供大家参考,具体内容如下

使用到三个文件

  • connect.php:连接数据库
  • test_upload.php:执行SQL语句
  • upload_img.php:上传图片并压缩

三个文件代码如下:
连接数据库:**connect.php
**


    <?php
    $db_host = '';
    $db_user = '';
    $db_psw = '';
    $db_name = '';
    $db_port = '';
    $sqlconn=new mysqli($db_host,$db_user,$db_psw,$db_name);
    $q="set names utf8;";
    $result=$sqlconn->query($q);
    if (mysqli_connect_errno()) {
     printf("Connect failed: %s\n", mysqli_connect_error());
     exit();
    }
    ?>

执行SQL语句:test_upload.php


    <?php
    require ("connect.php");
    require ("upload_img.php");
    $real_img=$uploadfile; 
    $small_img=$uploadfile_resize;
    $insert_sql = "insert into img (real_img,small_img) values (?,?)";
    $result = $sqlconn -> prepare($insert_sql);
    $result -> bind_param("ss", $real_img,$small_img);
    $result -> execute();
    ?>

上传图片并压缩:upload_img.php


    <?php 
    //设置文件保存目录
    $uploaddir = "upfiles/"; 
    //设置允许上传文件的类型
    $type=array("jpg","gif","bmp","jpeg","png"); 

    //获取文件后缀名函数 
    function fileext($filename) 
    { 
     return substr(strrchr($filename, '.'), 1); 
    } 

    //生成随机文件名函数 
    function random($length) 
    { 
     $hash = 'CR-'; 
     $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'; 
     $max = strlen($chars) - 1; 
     mt_srand((double)microtime() * 1000000); 
     for($i = 0; $i < $length; $i++) 
     { 
      $hash .= $chars[mt_rand(0, $max)]; 
     } 
     return $hash; 
    } 

    $a=strtolower(fileext($_FILES['filename']['name'])); 

    //判断文件类型 
    if(!in_array(strtolower(fileext($_FILES['filename']['name'])),$type)) 
    { 
     $text=implode(",",$type); 
     $ret_code=3;//文件类型错误
     $page_result=$text;
     $retArray = array('ret_code' => $ret_code,'page_result'=>$page_result);
     $retJson = json_encode($retArray);
     echo $retJson;
     return;
    } 

    //生成目标文件的文件名 
    else
    { 
     $filename=explode(".",$_FILES['filename']['name']); 
     do 
     { 
      $filename[0]=random(10); //设置随机数长度 
      $name=implode(".",$filename); 
      //$name1=$name.".Mcncc"; 
      $uploadfile=$uploaddir.$name; 
     } 

     while(file_exists($uploadfile)); 

     if (move_uploaded_file($_FILES['filename']['tmp_name'],$uploadfile)) 
     { 
      if(is_uploaded_file($_FILES['filename']['tmp_name'])) 
      {
       $ret_code=1;//上传失败
      } 
     else 
     {//上传成功
      $ret_code=0;
     } 
     } 
    $retArray = array('ret_code' => $ret_code);
    $retJson = json_encode($retArray);
    echo $retJson;
    }

    //压缩图片

    $uploaddir_resize="upfiles_resize/";
    $uploadfile_resize=$uploaddir_resize.$name;

    //$pic_width_max=120;
    //$pic_height_max=90;
    //以上与下面段注释可以联合使用,可以使图片根据计算出来的比例压缩

    $file_type=$_FILES["filename"]['type'];

    function ResizeImage($uploadfile,$maxwidth,$maxheight,$name)
    {
     //取得当前图片大小
     $width = imagesx($uploadfile);
     $height = imagesy($uploadfile);
     $i=0.5;
     //生成缩略图的大小
     if(($width > $maxwidth) || ($height > $maxheight))
     {
      /*
      $widthratio = $maxwidth/$width;
      $heightratio = $maxheight/$height;

      if($widthratio < $heightratio)
      {
       $ratio = $widthratio;
      }
      else
      {
        $ratio = $heightratio;
      }

      $newwidth = $width * $ratio;
      $newheight = $height * $ratio;
      */
      $newwidth = $width * $i;
      $newheight = $height * $i;
      if(function_exists("imagecopyresampled"))
      {
       $uploaddir_resize = imagecreatetruecolor($newwidth, $newheight);
       imagecopyresampled($uploaddir_resize, $uploadfile, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
      }
      else
      {
       $uploaddir_resize = imagecreate($newwidth, $newheight);
       imagecopyresized($uploaddir_resize, $uploadfile, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
      }

      ImageJpeg ($uploaddir_resize,$name);
      ImageDestroy ($uploaddir_resize);
     }
     else
     {
      ImageJpeg ($uploadfile,$name);
     }
    }



    if($_FILES["filename"]['size'])
    {
     if($file_type == "image/pjpeg"||$file_type == "image/jpg"|$file_type == "image/jpeg")
     {
      //$im = imagecreatefromjpeg($_FILES[$upload_input_name]['tmp_name']);
      $im = imagecreatefromjpeg($uploadfile);
     }
     elseif($file_type == "image/x-png")
     {
      //$im = imagecreatefrompng($_FILES[$upload_input_name]['tmp_name']);
      $im = imagecreatefromjpeg($uploadfile);
     }
     elseif($file_type == "image/gif")
     {
      //$im = imagecreatefromgif($_FILES[$upload_input_name]['tmp_name']);
      $im = imagecreatefromjpeg($uploadfile);
     }
     else//默认jpg
     {
      $im = imagecreatefromjpeg($uploadfile);
     }
     if($im)
     {
      ResizeImage($im,$pic_width_max,$pic_height_max,$uploadfile_resize);

      ImageDestroy ($im);
     }
    } 
    ?>

请按照现实情况更改connect.php,test_upload.php中对应的信息。

以上就是PHP实现图片上传并压缩的方法,希望对大家的学习php程序设计有所帮助

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例