您的位置:澳门402永利com > 计算机 网络 > PHP完成图片压缩的两则实例

PHP完成图片压缩的两则实例

发布时间:2019-09-23 20:45编辑:计算机 网络浏览(152)

    本文介绍了PHP达成图片压缩的三种办法,读者能够依照现实运用参照他事他说加以考察或加以改良,以适应自身行使须要!废话相当少说,主要代码部分如下:

    django-url调度器-高级篇,django-url调度

      大家在中间篇中学会了怎么样开展反向深入分析,不过有那样三个标题,在为 url 命名的时候,名字无法重复,否则会促成精彩纷呈的主题素材。在 url 还少的时候保险不重名还是相比轻便的,不过 url 多起来现在就比较难了。为了消除那样的难题,能够在 url 中加二个前缀。譬如,小编有四个 url 的名字称为 'comment' ,此时,笔者可认为其加二个前缀,那几个前缀平常是 app 名,举例:'myapp-comment'。

      那也是django所推荐的命名方式,不过如此向来是治标不治本。此时,大家就要学习 django 中 url 命名空间了。

    实例1:

    UPRADOL 命名空间

      简介:

      UEnclaveL 命名空间允许你反查到独一的命名 UCR-VL,就算在不相同的应用中应用同一的 U逍客L 名称。(也便是能够在分歧的app中选取同一的名号,为有命名困难症的工程师带来了福音)

      根据经验,第三方接纳应该平昔使用带命名空间的ULANDL 。类似地,它还允许你在二个用到有两个实例安插的意况下反查UKugaL。换句话讲,因为一个应用的七个实例分享同样的命名U途锐L,命名空间将提供一种有别于这么些命名 U景逸SUVL 的艺术。

      在叁个站点上,精确采纳 UQX56L 命名空间的 Django 应用能够安排数次。举例,django.contrib.admin 具有三个 AdminSite 类,它同意你很轻便地配置多个管理站点的实例。在底下的事例中,我们将探究在四个不等的地点布置教程中的polls 应用,那样咱们可认为二种差别的客商(笔者和公布者)提供一样的职能。

    三个UOdysseyL 命名空间有三个部分,它们都是字符串

     行职务名空间

      它代表正在安插的接纳的称谓。三个选取的各种实例具备一样的运用命名空间。譬喻,能够预言Django 的田间管理站点的采用命名空间是'admin'。

     实例命名空间

      它表示应用的三个特定的实例。实例的命名空间在你的凡事品类中应该是唯一的。但是,二个实例的命名空间能够和利用的命名空间同样。它用来表示三个使用的暗中认可实例。举个例子,Django 管理站点实例具备四个私下认可的实例命名空间'admin'

      U翼虎L 的命名空间利用':' 操作符钦命。举个例子,管理站点应用的主页使用'admin:index'。它表示'admin' 的一个命名空间和'index' 的三个命名ULX570L。

      命名空间也得以嵌套。命名U牧马人L'sports:polls:index' 将在命名空间'polls'中查找'index',而poll 定义在顶层的命名空间'sports' 中。

     


     

    <?php 
    /** 
    * desription 压缩图片 
    * @param sting $imgsrc 图片路径 
    * @param string $imgdst 压缩后保存路径 
    */
    function image_png_size_add($imgsrc,$imgdst){ 
      list($width,$height,$type)=getimagesize($imgsrc); 
      $new_width = ($width>600?600:$width)*0.9; 
      $new_height =($height>600?600:$height)*0.9; 
      switch($type){ 
        case 1: 
          $giftype=check_gifcartoon($imgsrc); 
          if($giftype){ 
            header('Content-Type:image/gif'); 
            $image_wp=imagecreatetruecolor($new_width, $new_height); 
            $image = imagecreatefromgif($imgsrc); 
            imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 
            imagejpeg($image_wp, $imgdst,75); 
            imagedestroy($image_wp); 
          } 
          break; 
        case 2: 
          header('Content-Type:image/jpeg'); 
          $image_wp=imagecreatetruecolor($new_width, $new_height); 
          $image = imagecreatefromjpeg($imgsrc); 
          imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 
          imagejpeg($image_wp, $imgdst,75); 
          imagedestroy($image_wp); 
          break; 
        case 3: 
          header('Content-Type:image/png'); 
          $image_wp=imagecreatetruecolor($new_width, $new_height); 
          $image = imagecreatefrompng($imgsrc); 
          imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 
          imagejpeg($image_wp, $imgdst,75); 
          imagedestroy($image_wp); 
          break; 
      } 
    } 
    /** 
    * desription 判断是否gif动画 
    * @param sting $image_file图片路径 
    * @return boolean t 是 f 否 
    */
    function check_gifcartoon($image_file){ 
      $fp = fopen($image_file,'rb'); 
      $image_head = fread($fp,1024); 
      fclose($fp); 
      return preg_match("/".chr(0x21).chr(0xff).chr(0x0b).'NETSCAPE2.0'."/",$image_head)?false:true; 
    } 
    ?>
    

    反查带命名空间的UKoleosL

      大家在当中篇中精通到了 url 反查带来的变量,而在中等篇中,都以采用name 举行反查,这里来探视怎样对带命名空间的 url 实行反查。

    例子:

    from django.conf.urls import include, url
    
    urlpatterns = [
        url(r'^author-polls/', include('polls.urls', namespace='author-polls', app_name='polls')),
        url(r'^publisher-polls/', include('polls.urls', namespace='publisher-polls', app_name='polls')),
    ]
    

     

    from django.conf.urls import url
    
    from . import views
    
    urlpatterns = [
        url(r'^$', views.IndexView.as_view(), name='index'),
        url(r'^(?P<pk>d+)/$', views.DetailView.as_view(), name='detail'),
        ...
    ]
    

     

     反查的主意和中间篇的一样,在模板中:

    {% url 'polls:index' %}
    

     在依照类的视图的方式中:

    reverse('polls:index', current_app=self.request.resolver_match.namespace)
    

      其他,注意,在模板中的反查须求增多 requestcurrent_app 属性,像这样:

    def render_to_response(self, context, **response_kwargs):
        self.request.current_app = self.request.resolver_match.namespace
        return super(DetailView, self).render_to_response(context, **response_kwargs)
    

     

     那时,会有同学有疑点了, polls 这几个应用命名空间设置了两行啊,那 polls 下的 index 到底指的是哪个?

     那年,就要看 django 的寻觅顺序了:

     1.万一当前有实例,也正是说我们透过 url 访谈到了有些管理函数,那几个函数进行反向查询的时候,举例笔者访问的是:author-polls/ ,那些 url 对应的处理函数要扩充反向深入分析,此时它要分析'polls:detail'。那么将解析到 author-polls/(?P<pk>d+)/$ 中,相当于有实例的预先在该实例空间中询问。

     2.倘若未有实例,不过有暗中同意的实例空间,举个例子app_name='polls',namespace='polls' ,和应用空间同名,那样的就叫做暗许实例空间。在未有访谈实例的时候,就合作到私下认可实例空间中。

     3.若无实例,也未尝暗中同意实例空间,那么哪个人是最终注册的就选哪个人,例子中的 namespace='publisher-polls' 正是终极二个报了名的(也正是下面的)。

    注意:

      因为实例空间假使独一的,所以采用 namespace:name 的方式应该也是独一相配的,比方这里的'author-polls:index' 将永生永久剖判到 'author-polls' 实例的主页('publisher-polls' 类似)。

     

     


     

    实例2:

    UENCOREL 命名空间和被含有的U途睿欧Lconf

      被含有的U昂CoraLconf 的命名空间能够透过二种艺术钦点。

      首先,在您构造你的UENVISIONL 方式时,你能够提供 应用 和 实例的命名空间给 include() 作为参数。比方

    url(r'^polls/', include('polls.urls', namespace='author-polls', app_name='polls')),
    

     

      那将含有 polls.urls 中定义的U奥迪Q3L 到使用命名空间 'polls'中,其实例命名空间为'author-polls'

      其次,你可以include 一个蕴涵嵌套命名空间数据的指标。假若你include() 一个url() 实例的列表,那么该对象中包蕴的UCRUISERL 将增加到全局命名空间。不过,你仍是能够include() 三个3个要素的元组:

     

    (<list of url() instances>, <application namespace>, <instance namespace>)
    

     

      注意这里的行职责名空间和实例命名空间是相反的。

      实例:

    from django.conf.urls import include, url
    
    from . import views
    
    polls_patterns = [
        url(r'^$', views.IndexView.as_view(), name='index'),
        url(r'^(?P<pk>d+)/$', views.DetailView.as_view(), name='detail'),
    ]
    
    url(r'^polls/', include((polls_patterns, 'polls', 'author-polls'))),
    

     

      那样会包罗命名的U索罗德L方式步入到给定的行使和实例命名空间中。

     


     

    那边来总计多少个主要函数的用法:

    1. include(arg, namespace=None, app_name=None) 

      arg:能够承受贰个字符串,表示被含有的模块在什么地方;也得以接受贰个列表,那几个列表是被含有的 url() 的实例;还是能接受一个元祖,元祖的第叁个因素是三个被含有的列表,第三个要素是该列表的施用空间名,第几个成分是实例空间名。

      namespace : 实例命名空间

      app_name : 应用命名空间

    2. url(regex, view, kwargs=None, name=None, prefix='') 

       regex:要同盟的 url。

       view:该 url 的管理函数,可以是二个象征函数地方的字符串, 也得以是三个函数的实例。

       kwargs: 一个字典,表示传递多余的参数。

       name : 为 url 实行命名。

       prefix : if prefix: view = prefix + '.'

    • view  代表在 view 前增加前缀。

     

     

     

    我们在其中篇中学会了怎么进行反向剖判,可是有那般二个标题,在为 url 命名的时候,名字不能够重复...

    <?php
    /*
    ----------------------------------------------------------------------
    函数:调整图片尺寸或生成缩略图
    返回:True/False
    参数:
      $Image  需要调整的图片(含路径)
      $Dw=450  调整时最大宽度;缩略图时的绝对宽度
      $Dh=450  调整时最大高度;缩略图时的绝对高度
      $Type=1  1,调整尺寸; 2,生成缩略图
    $path='img/';//路径
    $phtypes=array(
      'img/gif',
      'img/jpg',
      'img/jpeg',
      'img/bmp',
      'img/pjpeg',
      'img/x-png'
    );
    Function Img($Image,$Dw=450,$Dh=450,$Type=1){
      IF(!File_Exists($Image)){
      Return False;
      }
      //如果需要生成缩略图,则将原图拷贝一下重新给$Image赋值
      IF($Type!=1){
      Copy($Image,Str_Replace(".","_x.",$Image));
      $Image=Str_Replace(".","_x.",$Image);
      }
      //取得文件的类型,根据不同的类型建立不同的对象
      $ImgInfo=GetImageSize($Image);
      Switch($ImgInfo[2]){
      Case 1:
      $Img = @ImageCreateFromGIF($Image);
      Break;
      Case 2:
      $Img = @ImageCreateFromJPEG($Image);
      Break;
      Case 3:
      $Img = @ImageCreateFromPNG($Image);
      Break;
      }
      //如果对象没有创建成功,则说明非图片文件
      IF(Empty($Img)){
      //如果是生成缩略图的时候出错,则需要删掉已经复制的文件
      IF($Type!=1){Unlink($Image);}
      Return False;
      }
      //如果是执行调整尺寸操作则
      IF($Type==1){
      $w=ImagesX($Img);
      $h=ImagesY($Img);
      $width = $w;
      $height = $h;
      IF($width>$Dw){
       $Par=$Dw/$width;
       $width=$Dw;
       $height=$height*$Par;
       IF($height>$Dh){
       $Par=$Dh/$height;
       $height=$Dh;
       $width=$width*$Par;
       }
      }ElseIF($height>$Dh){
       $Par=$Dh/$height;
       $height=$Dh;
       $width=$width*$Par;
       IF($width>$Dw){
       $Par=$Dw/$width;
       $width=$Dw;
       $height=$height*$Par;
       }
      }Else{
       $width=$width;
       $height=$height;
      }
      $nImg = ImageCreateTrueColor($width,$height);   //新建一个真彩色画布
      ImageCopyReSampled($nImg,$Img,0,0,0,0,$width,$height,$w,$h);//重采样拷贝部分图像并调整大小
      ImageJpeg ($nImg,$Image);     //以JPEG格式将图像输出到浏览器或文件
      Return True;
      //如果是执行生成缩略图操作则
      }Else{
      $w=ImagesX($Img);
      $h=ImagesY($Img);
      $width = $w;
      $height = $h;
      $nImg = ImageCreateTrueColor($Dw,$Dh);
      IF($h/$w>$Dh/$Dw){ //高比较大
       $width=$Dw;
       $height=$h*$Dw/$w;
       $IntNH=$height-$Dh;
       ImageCopyReSampled($nImg, $Img, 0, -$IntNH/1.8, 0, 0, $Dw, $height, $w, $h);
      }Else{   //宽比较大
       $height=$Dh;
       $width=$w*$Dh/$h;
       $IntNW=$width-$Dw;
       ImageCopyReSampled($nImg, $Img, -$IntNW/1.8, 0, 0, 0, $width, $Dh, $w, $h);
      }
      ImageJpeg ($nImg,$Image);
      Return True;
      }
    }
    ?>
    <html><body>
    <form method="post" enctype="multipart/form-data" name="form1">
     <table>
      <tr><td>上传图片</td></tr>
      <tr><td><input type="file" name="photo" size="20" /></td></tr>
     <tr><td><input type="submit" value="上传"/></td></tr>
     </table>
     允许上传的文件类型为:<?=implode(', ',$phtypes)?></form>
    <?php
     if($_SERVER['REQUEST_METHOD']=='POST'){
      if (!is_uploaded_file($_FILES["photo"][tmp_name])){
       echo "图片不存在";
       exit();
      }
      if(!is_dir('img')){//路径若不存在则创建
       mkdir('img');
      }
      $upfile=$_FILES["photo"]; 
      $pinfo=pathinfo($upfile["name"]);
      $name=$pinfo['basename'];//文件名
      $tmp_name=$upfile["tmp_name"];
      $file_type=$pinfo['extension'];//获得文件类型
      $showphpath=$path.$name;
    
      if(in_array($upfile["type"],$phtypes)){
       echo "文件类型不符!";
       exit();
       }
      if(move_uploaded_file($tmp_name,$path.$name)){
      echo "成功!";
     Img($showphpath,100,800,2);
      }
      echo "<img src="".$showphpath."" />";
     }
    ?>
    </body>
    </html>
    

    本文由澳门402永利com发布于计算机 网络,转载请注明出处:PHP完成图片压缩的两则实例

    关键词: