zoukankan      html  css  js  c++  java
  • 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
    ", 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中对应的信息。

    转自:http://www.jb51.net/article/76763.htm

  • 相关阅读:
    TinyXML 2.4.2发布
    OpenAL 1.1 Release
    Microsoft ship Visual Studio 2005 and .NET 2.0
    Boost中文站
    第一次Blog
    POJ3020 Antenna Placement 二分图匹配+拆点构图
    SGU438 The Glorious Karlutka River =) 最大流(动态流问题)
    HDU2732 Leapin' Lizards 最大流
    SGU176 Flow construction 有上下界的最小流
    POJ1459 Power Network 网络流
  • 原文地址:https://www.cnblogs.com/chengzhi59/p/7272195.html
Copyright © 2011-2022 走看看