查看: 6036|回复: 0
打印 上一主题 下一主题

PHP图片处理类CImage

[复制链接]
跳转到指定楼层
1#
发表于 2007-10-4 22:36:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
台州网址导航
  1. <?php
  2. /*
  3. *************************************
  4. 类名 CImage 月影PHP图片处理类
  5. 功能 根据源图片 利用GD库对图片进行处理

  6. **************************************
  7. 此类包含以下功能
  8. A.生成缩略图
  9. B.给图片添加文字水印(包括中文)
  10. C.将指定的图片旋转90度/180度/270度,并保存至文件
  11. D.将图片水平/垂直翻转,并保存至文件
  12. E.在线裁剪图片任意部分矩形(正在编写之中)
  13.     具体目标效果暂时可以参考 http://yananzb.com/cut/cut.htm
  14.     期待您的响应

  15. 成员函数说明
  16. ---------------------------------------------------------------------------------------------
  17. public void CImage::__construct(string $src_image_file)
  18.     功能:类CImage的构造函数
  19.     参数 
  20.     $src_image_file    字符串,源图片文件名 注意,目前只支持gif,png,jpeg,jpg格式,这是GD库的限制,并非本程序的局限
  21. ---------------------------------------------------------------------------------------------
  22. public bool CImage: thumb($image_dist,$x)   
  23.     功能:根据源图片生成缩略图,并保存至文件
  24.     $image_dist        字符串         目标缩略图片路径及文件名 如 /images/th.jpg
  25.     $x                        整型                目标缩略图片的尺寸限制 即当原始图片的宽大于高时,那么新的缩略图的宽为$x,反之高为$x
  26. ---------------------------------------------------------------------------------------------
  27. public bool image_press($image_dist,$str,$font="simkai.ttf")

  28. 函数功能:
  29.     图片生成水印并保存新图片至目标文件
  30.     参数说明:
  31.     $image_dist 字符串        目标图片名
  32.     $str                字符串        要写入到图片水印的字符串
  33.     $font                字符串        合法的系统字体名或WEB目录中正确的字体文件名
  34. ---------------------------------------------------------------------------------------------
  35. public bool rotate($image_dist,$angle)
  36.     函数功能:
  37.         将源图片旋转一定角度并将新图片保存至文件
  38.     参数说明:
  39.         $image_dist            字符串        目标图片文件名
  40.         $angle                    整数            要旋转的角度 只能是90或180或270度
  41. ---------------------------------------------------------------------------------------------
  42. public bool rotate_h($image_dist)
  43.     函数功能:
  44.         将源图片水平翻转,并将新图片保存至文件
  45.     参数说明:
  46.         $image_dist        字符串        目标图片文件名
  47. ---------------------------------------------------------------------------------------------
  48. public bool rotate_v($image_dist)
  49. 函数功能:
  50.         将源图片垂直翻转,并将新图片保存至文件
  51.     参数说明:
  52.         $image_dist        字符串        目标图片文件名
  53. ---------------------------------------------------------------------------------------------
  54. 使用范例:
  55. $p=new CImage("s.jpg");        //创建一个图片处理对象
  56. $p->thumb("thumb.jpg",300);    //生成缩略图 限制尺寸为300,保存为thumb.jpg
  57. $p->rotate("rt.jpg",90);        //旋转90度,并保存为rt.jpg,类似地,你可以将90换成180,270进行旋转
  58. $p->rotate_h("h.jpg");        //水平翻转
  59. $p->rotate_v("v.jpg");        //垂直翻转

  60. 说明定义完毕
  61. 此类还在进一步完善之中,欢迎朋友们一起交流,提出宝贵意见
  62. */
  63. class CImage
  64. {
  65.     private $src_image;
  66.     private $width;
  67.     private $height;
  68.     private $image_type;
  69.     private $img;
  70.     private $src_x;
  71.     private $src_y;
  72.    
  73.     function __construct($image_file)
  74.     {
  75.         $info=GetImageSize($image_file);
  76.         $this->src_image=$image_file;
  77.         $this->width=$info[0];
  78.         $this->height=$info[1];
  79.         
  80.         switch($info[2])
  81.         {
  82.             case 1:
  83.                 $this->image_type="gif";
  84.                 break;
  85.             case 2:
  86.                 $this->image_type="jpeg";
  87.                 break;
  88.             case 3:
  89.                 $this->image_type="png";
  90.                 break;
  91.             default:
  92.                 return false;
  93.                 //echo("Unsurport Image type.");
  94.                 break;
  95.         }    //swith end
  96.         //echo "ok";
  97.         $new_function='ImageCreateFrom'.ucfirst($this->image_type);
  98.         $this->img=$new_function($this->src_image);
  99.         $this->src_x=ImageSX($this->img);
  100.         $this->src_y=ImageSY($this->img);
  101.     }
  102.     function thumb($image_dist,$x)        //$x为新图的限制边的尺寸
  103.     {        
  104.         $src_x=ImageSX($this->img);
  105.         $src_y=ImageSY($this->img);
  106.         $scale=min($x/$src_x,$x/$src_y);
  107.    
  108.         if($scale<1)
  109.         {
  110.             $new_x=floor($scale*$src_x);
  111.             $new_y=floor($scale*$src_y);
  112.             $img_tmp=ImageCreateTrueColor($new_x,$new_y);    //set the size of Canvas for the new Image
  113.             ImageCopyResampled($img_tmp,$this->img,0,0,0,0,$new_x,$new_y,$src_x,$src_y);    //Resampled
  114.             ImageDestroy($this->img);
  115.             $new_function="Image".ucfirst($this->image_type);

  116.             return $new_function($img_tmp,$image_dist);
  117.         }
  118.     }    //  thumb end
  119.    
  120.     public function image_press($image_dist,$str,$font="simkai.ttf")    //给图片生成文字水印
  121.     {        
  122.         $str=iconv("GB2312","utf-8",$str);            
  123.         $blue=ImageColorAllocate($this->img,90,255,255);
  124.         $white=ImageColorAllocate($this->img,255,0,0);
  125.         ImageTTFText($this->img,20,0,$this->src_x/2/2,$this->src_y-80,$white,$font,$str);
  126.         $new_function="Image".ucfirst($this->image_type);
  127.         return $new_function($this->img,$image_dist);        
  128.     }

  129.     public function rotate($image_dist,$angle)
  130.     {
  131.         $img_tmp=null;
  132.         $new_function="Image".ucfirst($this->image_type);
  133.         if(($angle!=90)&&($angle!=180)&&($angle!=270))
  134.         {
  135.             echo("Un-valid angle on calling CImage::rotate(\$image_dist,\$angle) .The valid angle must be 90 or 180 or 270.");
  136.             return false;
  137.         }

  138.         if(($angle==90)||($angle==270))
  139.         {
  140.             $img_tmp=ImageCreateTrueColor($this->src_y,$this->src_x);
  141.         }
  142.         else
  143.         {
  144.             $img_tmp=ImageCreateTrueColor($this->src_x,$this->src_y);
  145.         }
  146.         
  147.         switch($angle)
  148.         {
  149.             case 90:
  150.                 for($i=0;$i<$this->src_x;$i++)
  151.                 {
  152.                     for($j=0;$j<$this->src_y;$j++)
  153.                     {
  154.                         ImageSetPixel($img_tmp,$this->src_y-$j-1,$i,ImageColorAt($this->img,$i,$j));   
  155.                     }
  156.                 }   
  157.                 return $new_function($img_tmp,$image_dist);
  158.                 break;

  159.             case 180:
  160.                 for($i=0;$i<$this->src_x;$i++)
  161.                 {
  162.                     for($j=0;$j<$this->src_y;$j++)
  163.                     {
  164.                         ImageSetPixel($img_tmp,$this->src_x-$i-1,$this->src_y-$j-1,ImageColorAt($this->img,$i,$j));   
  165.                     }
  166.                 }
  167.                 return $new_function($img_tmp,$image_dist);
  168.                 break;

  169.             case 270:
  170.                 for($i=0;$i<$this->src_x;$i++)
  171.                 {
  172.                     for($j=0;$j<$this->src_y;$j++)
  173.                     {
  174.                         ImageSetPixel($img_tmp,$j,$this->src_x-$i-1,ImageColorAt($this->img,$i,$j));   
  175.                     }
  176.                 }
  177.                 return $new_function($img_tmp,$image_dist);
  178.                 break;
  179.         }    //end switch
  180.         
  181.     }        //end rotate
  182.    
  183.     public function rotate_h($image_dist)
  184.     {
  185.         $new_function="Image".ucfirst($this->image_type);
  186.         $img_tmp=ImageCreateTrueColor($this->src_x,$this->src_y);
  187.         ImageCopyResampled($img_tmp,$this->img,0,0,$this->src_x-1,0,$this->src_x,$this->src_y,-$this->src_x,$this->src_y);    //水平翻转
  188.         return    $new_function($img_tmp,$image_dist);   
  189.     }
  190.    
  191.     function rotate_v($image_dist)
  192.     {
  193.     $new_function="Image".ucfirst($this->image_type);
  194.     $img_tmp=ImageCreateTrueColor($this->src_x,$this->src_y);
  195.     ImageCopyResampled($img_tmp,$this->img,0,0,0,$this->src_y-1,$this->src_x,$this->src_y,$this->src_x,-$this->src_y);
  196.     return $new_function($img_tmp,$image_dist);
  197.     }   
  198. }    //end CImage



  199. ?>
复制代码
下载地址:http://www.phpchina.com/bbs/attachment.php?aid=7341
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

网站推广
关于我们
  • 台州朗动科技(Tzweb.com)拥有多年开发网站平台系统门户手机客户端等业务的成功经验。主要从事:政企网站,系统平台,微信公众号,各类小程序,手机APP客户端,浙里办微应用,浙政钉微应用、主机域名、虚拟空间、后期维护等服务,满足不同企业公司的需求,是台州地区领先的网络技术服务商!

Hi,扫描关注我

Copyright © 2005-2026 站长论坛 All rights reserved

Powered by 站长论坛 with TZWEB Update Techonolgy Support

快速回复 返回顶部 返回列表