zoukankan      html  css  js  c++  java
  • PHP图片裁剪类

      1 <?php 
      2 
      3 class ImageTool {
      4     
      5     //以宽为标准,如果小于宽,则不剪裁
      6     public static function thumb_img_by_width($src_path, $dest_path,$width,$height){
      7 
      8         $info_arr = getimagesize($src_path);
      9         $src_width = $info_arr[0];
     10         $src_height = $info_arr[1];
     11         
     12         switch( $info_arr['mime'] ) {
     13             case 'image/gif':
     14                 $src_img = imagecreatefromgif( $src_path );
     15                 break;
     16             case 'image/jpeg':
     17                 $src_img = imagecreatefromjpeg( $src_path );
     18                 break;
     19             case 'image/png':
     20                 $src_img = imagecreatefrompng( $src_path ); 
     21                 break;
     22         }
     23         
     24         if($src_width > $width){
     25             //裁剪
     26             // 改变后的图象的比例
     27             $resize_ratio = ($width) / ($height); 
     28             // 实际图象的比例
     29             $ratio = ($src_width) / ($src_height);
     30             
     31             if ($ratio >= $resize_ratio) {
     32                 // 高度优先
     33                 //截取图片中间那一段
     34                 $img_center_x = intval(($src_width-($src_height * $resize_ratio))/2);
     35                 //如果不需要只截取中间那一段,而是从图片x=0的地方截取,则$img_center_x=0
     36                 $newimg = @imagecreatetruecolor($width, $height);
     37                 $color = imagecolorallocate($newimg,255,255,255); 
     38                 imagecolortransparent($newimg,$color); 
     39                 imagefill($newimg,0,0,$color); 
     40                 @imagecopyresampled($newimg, $src_img, 0, 0, $img_center_x, 0, $width, $height, (($src_height) * $resize_ratio), $src_height);
     41                 // ImageJpeg($newimg);
     42             }else{
     43                 // 宽度优先
     44                 //截取图片中间那一段
     45                 $img_center_y = intval(($src_height-($src_width / $resize_ratio))/2);
     46                 //如果不需要只截取中间那一段,而是从图片y=0的地方截取,则$img_center_y=0
     47                 $newimg = @imagecreatetruecolor($width, $height);
     48                 $color = imagecolorallocate($newimg,255,255,255); 
     49                 imagecolortransparent($newimg,$color); 
     50                 imagefill($newimg,0,0,$color); 
     51                 @imagecopyresampled($newimg, $src_img, 0, 0, 0, $img_center_y, $width, $height, $src_width, (($src_width) / $resize_ratio));
     52             }
     53         }else{
     54             //不裁剪
     55             $newimg = @imagecreatetruecolor($src_width, $src_height);
     56             $color = imagecolorallocate($newimg,255,255,255); 
     57             imagecolortransparent($newimg,$color); 
     58             imagefill($newimg,0,0,$color); 
     59             @imagecopyresampled($newimg, $src_img, 0, 0, 0, 0, $src_width, $src_height, $src_width, $src_height);
     60         }
     61         
     62         //统一保存为png格式
     63         imagepng($newimg, $dest_path);
     64         
     65         //gc
     66         imagedestroy($src_img);
     67         imagedestroy($newimg);
     68     }
     69     
     70     public static function thumb_img($src_path, $dest_path,$width,$height){
     71 
     72         $info_arr = getimagesize($src_path);
     73         $src_width = $info_arr[0];
     74         $src_height = $info_arr[1];
     75         
     76         switch( $info_arr['mime'] ) {
     77             case 'image/gif':
     78                 $src_img = imagecreatefromgif( $src_path );
     79                 break;
     80             case 'image/jpeg':
     81                 $src_img = imagecreatefromjpeg( $src_path );
     82                 break;
     83             case 'image/png':
     84                 $src_img = imagecreatefrompng( $src_path ); 
     85                 break;
     86         }
     87         
     88          // 改变后的图象的比例
     89         $resize_ratio = ($width) / ($height); 
     90         // 实际图象的比例
     91         $ratio = ($src_width) / ($src_height);
     92         
     93         if ($ratio >= $resize_ratio) {
     94             // 高度优先
     95             //截取图片中间那一段
     96             $img_center_x = intval(($src_width-($src_height * $resize_ratio))/2);
     97             //如果不需要只截取中间那一段,而是从图片x=0的地方截取,则$img_center_x=0
     98             $newimg = @imagecreatetruecolor($width, $height);
     99             $color = imagecolorallocate($newimg,255,255,255); 
    100             imagecolortransparent($newimg,$color); 
    101             imagefill($newimg,0,0,$color); 
    102             @imagecopyresampled($newimg, $src_img, 0, 0, $img_center_x, 0, $width, $height, (($src_height) * $resize_ratio), $src_height);
    103             // ImageJpeg($newimg);
    104         }else{
    105             // 宽度优先
    106             //截取图片中间那一段
    107             $img_center_y = intval(($src_height-($src_width / $resize_ratio))/2);
    108             //如果不需要只截取中间那一段,而是从图片y=0的地方截取,则$img_center_y=0
    109             $newimg = @imagecreatetruecolor($width, $height);
    110             $color = imagecolorallocate($newimg,255,255,255); 
    111             imagecolortransparent($newimg,$color); 
    112             imagefill($newimg,0,0,$color); 
    113             @imagecopyresampled($newimg, $src_img, 0, 0, 0, $img_center_y, $width, $height, $src_width, (($src_width) / $resize_ratio));
    114         }
    115         
    116         //统一保存为png格式
    117         imagepng($newimg, $dest_path);
    118         
    119         //gc
    120         imagedestroy($src_img);
    121         imagedestroy($newimg);
    122     }
    123     
    124     /*
    125     * 按比例缩放图片,然后居中裁剪
    126     * $src_path 源文件路劲
    127     * $dest_path 裁剪图片存放位置
    128     * $width 裁剪图片宽带
    129     * $height 裁剪图片高度
    130     */
    131     public static function clip_img($src_path, $dest_path, $width, $height) {
    132         if( file_exists($src_path) ) {
    133             $info_arr = getimagesize($src_path);
    134             $src_width = $info_arr[0];
    135             $src_height = $info_arr[1];
    136             $src_ratio = $src_height / $src_width;
    137             $dest_ratio = $height / $width;
    138             
    139             if( $src_ratio < $dest_ratio ) {
    140                 $ratio_width = $width;
    141                 $ratio_height = ( $height * $src_height ) / $src_width;
    142             }else if( $src_ratio > $dest_ratio ) {
    143                 $ratio_height = $height;
    144                 $ratio_width = ( $width * $src_width ) / $src_height;
    145             }else {
    146                 $ratio_height = $height;
    147                 $ratio_width = $width;
    148             }
    149             
    150             switch( $info_arr['mime'] ) {
    151                 case 'image/gif':
    152                     $src_img = imagecreatefromgif( $src_path );
    153                     break;
    154                 case 'image/jpeg':
    155                     $src_img = imagecreatefromjpeg( $src_path );
    156                     break;
    157                 case 'image/png':
    158                     $src_img = imagecreatefrompng( $src_path );
    159                     break;
    160                 case 'image/bmp':
    161                     //待处理
    162                     break;
    163             }
    164             
    165             //等比例缩放图片
    166             $thumb_img = imagecreatetruecolor( intval($ratio_width), intval($ratio_height) ) ;
    167             $color = imagecolorallocate($thumb_img,255,255,255); 
    168             imagecolortransparent($thumb_img,$color); 
    169             imagefill($thumb_img,0,0,$color); 
    170             imagecopyresampled( $thumb_img, $src_img, 0, 0, 0, 0, $ratio_width, $ratio_height, $src_width, $src_height);
    171             
    172             //剪裁
    173             $clip_img = imagecreatetruecolor( intval($width), intval($height) );
    174             imagecopy( $clip_img, $thumb_img, 0, 0, ( $ratio_width - $width ) / 2, ( $ratio_height - $height ) / 2, $width, $height );
    175             
    176             //统一保存为png格式
    177             imagepng($clip_img, $dest_path);
    178             
    179             //gc
    180             imagedestroy($src_img);
    181             imagedestroy($thumb_img);
    182             imagedestroy($clip_img);
    183         }    
    184     }
    185     
    186     /*
    187     * 按比例缩放图片
    188     * type = 1 按宽为标准缩放 2 按高为标准缩放 
    189     */
    190     public static function scale_img($src_path,$dest_path,$type,$len){
    191         if( file_exists($src_path) ){
    192             $info_arr = getimagesize($src_path);
    193             $src_width = $info_arr[0];
    194             $src_height = $info_arr[1];
    195             if($type == 1){
    196                 $des_width = $len;
    197                 $des_height = ( $src_height * $des_width ) / $src_width;
    198             }else{
    199                 $des_height = $len;
    200                 $des_width = ( $src_width * $des_height ) / $src_height;
    201             }
    202             
    203             switch( $info_arr['mime'] ) {
    204                 case 'image/gif':
    205                     $src_img = imagecreatefromgif( $src_path );
    206                     break;
    207                 case 'image/jpeg':
    208                     $src_img = imagecreatefromjpeg( $src_path );
    209                     break;
    210                 case 'image/png':
    211                     $src_img = imagecreatefrompng( $src_path );
    212                     break;
    213                 case 'image/bmp':
    214                     //待处理
    215                     break;
    216             }
    217             
    218             $thumb_img = imagecreatetruecolor( intval($des_width), intval($des_height) );
    219             $color = imagecolorallocate($thumb_img,255,255,255); 
    220             imagecolortransparent($thumb_img,$color); 
    221             imagefill($thumb_img,0,0,$color); 
    222             imagecopyresampled( $thumb_img, $src_img, 0, 0, 0, 0, $des_width, $des_height, $src_width, $src_height);
    223         
    224             
    225             //统一保存为png格式
    226             imagepng($thumb_img, $dest_path);
    227             
    228             //gc
    229             imagedestroy($src_img);
    230             imagedestroy($thumb_img);
    231         }
    232     }
    233 
    234 }
  • 相关阅读:
    思科交换机密码的破解
    windows server 2008 R2 NPS(网络连接策略服务)设置radius,实现telent登陆交换机路由器权限分配
    Windows Server 2008 R2服务器系统安全设置参考指南
    svn 从文件上次修改以来没有任何文件修改或加入。
    fragment The specified child already has a parent. You must call removeView()
    Android初级教程_获取Android控件的宽和高
    Caused by: java.lang.IllegalStateException: commit already called
    Android 仿携程活动列表边框布局
    Android 解决在初次打开Activity加载布局文件时,ScrollView滚动条不在顶部的问题
    中国首个开源 HTML5 跨屏前端框架 分享
  • 原文地址:https://www.cnblogs.com/pandang/p/4849715.html
Copyright © 2011-2022 走看看