添加到QQ书签 | 设为首页 | 加入收藏 | 繁體中文 | 网站地图
 | 网站首页 | QQ空间大图 | QQ空间FLASH模块 | QQ闪字表情 | QQ系列 | QQ下载 | 博客系列 | 完美图片 | 游戏秘籍 | 基础教程 | 
 | 精美字体 | 精品娃娃 | 个性签名 | 动感图片 | 制作素材 | 边框线条 | 视频·搞笑图片 | 基础知识 | 网页设计 | 
推 荐 阅 读
  • 没有推荐文章
  • 阅 读 排 行
    ·网页鼠标特效:在鼠标后面…
    ·在文本框默认自动输入当前…
    ·网页图片特效:图片动态水…
    ·网页鼠标特效:黑暗火光
    ·CSS基础知识:样式表CSS中…
    ·PHP源代码:图片加入文字…
    ·PHP源代码:Email图片生成
    ·CSS解决图片下有空隙
    ·纯CSS制作的网页中的ligh…
    ·网页图片鼠标动作特效:图…
    ·在线处理示意等待的AJAX动…
    ·11个图片上传加水印PHP源…
    ·CSS实现排版段落前面空两…
    ·网页时间特效:漂亮的脚本…
    ·PHP源代码:在图片上添加…
    ·DIV和CSS排版中制作细线条…
    ·CSS样式表参考:常用的CS…
    ·CSS优化:网页技术CSS的f…
    ·网页相册图片特效:矩阵鼠…
    ·PHP创建文字图片源码
     
    PHP源代码:图形PHP函数功能和处理思路 【字体:
     您现在的位置: QQ宝页站 >> 网页设计 >> PHP >> 正文 添加到百度搜藏 添加到QQ书签
     作者:佚名    文章来源:不详    点击数:    更新时间:2008-7-4  

    <?php
    /*
    图片处理函数功能:缩放、剪切、相框、水印、锐化、旋转、翻转、透明度、反色
    处理并保存历史记录的思路:当有图片有改动时自动生成一张新图片,命名方式可以考虑在原图片的基础上加上步骤,例如:图片名称+__第几步
    */
    class picture{
     var $PICTURE_URL;//要处理的图片
     var $DEST_URL="temp__01.jpg";//生成目标图片位置
     var $PICTURE_CREATE;//要创建的图片
     var $TURE_COLOR;//新建一个真彩图象

     var $PICTURE_WIDTH;//原图片宽度
     var $PICTURE_HEIGHT;//原图片高度

     /*
     水印的类型,默认的为水印文字
     */
     var $MARK_TYPE=1;
     var $WORD;//经过UTF-8后的文字
     var $WORD_X;//文字横坐标
     var $WORD_Y;//文字纵坐标
     var $FONT_TYPE;//字体类型
     var $FONT_SIZE="12";//字体大小
     var $FONT_WORD;//文字
     var $ANGLE=0;//文字的角度,默认为0
     var $FONT_COLOR="#000000";//文字颜色
     var $FONT_PATH="font/simkai.ttf";//字体库,默认为宋体
     var $FORCE_URL;//水印图片
     var $FORCE_X=0;//水印横坐标
     var $FORCE_Y=0;//水印纵坐标
     var $FORCE_START_X=0;//切起水印的图片横坐标
     var $FORCE_START_Y=0;//切起水印的图片纵坐标

     var $PICTURE_TYPE;//图片类型
     var $PICTURE_MIME;//输出的头部

     /*
     缩放比例为1的话就按缩放高度和宽度缩放
     */
     var $ZOOM=1;//缩放类型
     var $ZOOM_MULTIPLE;//缩放比例
     var $ZOOM_WIDTH;//缩放宽度
     var $ZOOM_HEIGHT;//缩放高度

     /*
     裁切,按比例和固定长度、宽度
     */
     var $CUT_TYPE=1;//裁切类型
     var $CUT_X=0;//裁切的横坐标
     var $CUT_Y=0;//裁切的纵坐标
     var $CUT_WIDTH=100;//裁切的宽度
     var $CUT_HEIGHT=100;//裁切的高度

     /*
     锐化
     */
     var $SHARP="7.0";//锐化程度

     /*
     透明度处理
     */
     var $ALPHA='100';//透明度在0-127之间
     var $ALPHA_X="90";
     var $ALPHA_Y="50";

     /*
     任意角度旋转
     */
     var $CIRCUMROTATE="90.0";//注意,必须为浮点数

     /*
     出错信息
     */
     var $ERROR=array(
     'unalviable'=>'没有找到相关图片!'
     );

     /*
     构造函数:函数初始化
     */
     function __construct($PICTURE_URL){

      $this->get_info($PICTURE_URL);

     }
     function get_info($PICTURE_URL){
      /*
      处理原图片的信息,先检测图片是否存在,不存在则给出相应的信息
      */
      @$SIZE=getimagesize($PICTURE_URL);
      if(!$SIZE){
       exit($this->ERROR['unalviable']);
      }

      //得到原图片的信息类型、宽度、高度
      $this->PICTURE_MIME=$SIZE['mime'];
      $this->PICTURE_WIDTH=$SIZE[0];
      $this->PICTURE_HEIGHT=$SIZE[1];

      //创建图片
      switch($SIZE[2]){
       case 1:
        $this->PICTURE_CREATE=imagecreatefromgif($PICTURE_URL);
        $this->PICTURE_TYPE="imagejpeg";
        $this->PICTURE_EXT="jpg";
        break;
       case 2:
        $this->PICTURE_CREATE=imagecreatefromjpeg($PICTURE_URL);
        $this->PICTURE_TYPE="imagegif";
        $this->PICTURE_EXT="gif";
        break;
       case 3:
        $this->PICTURE_CREATE=imagecreatefrompng($PICTURE_URL);
        $this->PICTURE_TYPE="imagepng";
        $this->PICTURE_EXT="png";
        break;
      }

      /*
      文字颜色转换16进制转换成10进制
      */
      preg_match_all("/([0-f]){2,2}/i",$this->FONT_COLOR,$MATCHES);
      if(count($MATCHES)==3){
       $this->RED=hexdec($MATCHES[0][0]);
       $this->GREEN=hexdec($MATCHES[0][1]);
       $this->BLUE=hexdec($MATCHES[0][2]);
      }
     }

     #end of __construct

     /*
     将16进制的颜色转换成10进制的(R,G,B)
     */
     function hex2dec(){
      preg_match_all("/([0-f]){2,2}/i",$this->FONT_COLOR,$MATCHES);
      if(count($MATCHES)==3){
       $this->RED=hexdec($MATCHES[0][0]);
       $this->GREEN=hexdec($MATCHES[0][1]);
       $this->BLUE=hexdec($MATCHES[0][2]);
      }
     }

     //缩放类型
     function zoom_type($ZOOM_TYPE){
      $this->ZOOM=$ZOOM_TYPE;
     }

     //对图片进行缩放,如果不指定高度和宽度就进行缩放
     function zoom(){
      //缩放的大小
      if($this->ZOOM==0){
       $this->ZOOM_WIDTH=$this->PICTURE_WIDTH * $this->ZOOM_MULTIPLE;
       $this->ZOOM_HEIGHT=$this->PICTURE_HEIGHT * $this->ZOOM_MULTIPLE;
      }
      //新建一个真彩图象
      $this->TRUE_COLOR=imagecreatetruecolor($this->ZOOM_WIDTH,$this->ZOOM_HEIGHT);
      $WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,255);
      imagefilledrectangle($this->TRUE_COLOR,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$WHITE);
      imagecopyresized($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
     }

     #end of zoom
     //裁切图片,按坐标或自动
     function cut(){
      $this->TRUE_COLOR=imagecreatetruecolor($this->CUT_WIDTH,$this->CUT_WIDTH);
      imagecopy($this->TRUE_COLOR,$this->PICTURE_CREATE, 0, 0, $this->CUT_X, $this->CUT_Y,$this->CUT_WIDTH,$this->CUT_HEIGHT);
     }

     #end of cut
     /*
     在图片上放文字或图片
     水印文字
     */
     function _mark_text(){
      $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
      $this->WORD=mb_convert_encoding($this->FONT_WORD,'utf-8','gb2312');
      /*
      取得使用 TrueType 字体的文本的范围
      */
      $TEMP = imagettfbbox($this->FONT_SIZE,0,$this->FONT_PATH,$this->WORD);
      $WORD_LENGTH=strlen($this->WORD);
      $WORD_WIDTH =$TEMP[2] - $TEMP[6];
      $WORD_HEIGHT =$TEMP[3] - $TEMP[7];
      /*
      文字水印的默认位置为右下角
      */
      if($this->WORD_X==""){
       $this->WORD_X=$this->PICTURE_WIDTH-$WORD_WIDTH;
      }
      if($this->WORD_Y==""){
       $this->WORD_Y=$this->PICTURE_HEIGHT-$WORD_HEIGHT;
      }
      imagesettile($this->TRUE_COLOR,$this->PICTURE_CREATE);
      imagefilledrectangle($this->TRUE_COLOR,0,0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,IMG_COLOR_TILED);
      $TEXT2=imagecolorallocate($this->TRUE_COLOR,$this->RED,$this->GREEN,$this->Blue);
      imagettftext($this->TRUE_COLOR,$this->FONT_SIZE,$this->ANGLE,$this->WORD_X,$this->WORD_Y,$TEXT2,$this->FONT_PATH,$this->WORD);
     }

     /*
     水印图片
     */
     function _mark_picture(){

      /*
      获取水印图片的信息
      */
      @$SIZE=getimagesize($this->FORCE_URL);
      if(!$SIZE){
       exit($this->ERROR['unalviable']);
      }
      $FORCE_PICTURE_WIDTH=$SIZE[0];
      $FORCE_PICTURE_HEIGHT=$SIZE[1];
      //创建水印图片
      switch($SIZE[2]){
       case 1:
        $FORCE_PICTURE_CREATE=imagecreatefromgif($this->FORCE_URL);
        $FORCE_PICTURE_TYPE="gif";
        break;
       case 2:
        $FORCE_PICTURE_CREATE=imagecreatefromjpeg($this->FORCE_URL);
        $FORCE_PICTURE_TYPE="jpg";
        break;
       case 3:
        $FORCE_PICTURE_CREATE=imagecreatefrompng($this->FORCE_URL);
        $FORCE_PICTURE_TYPE="png";
        break;
      }
      /*
        判断水印图片的大小,并生成目标图片的大小,如果水印比图片大,则生成图片大小为水印图片的大小。否则生成的图片大小为原图片大小。
      */
      $this->NEW_PICTURE=$this->PICTURE_CREATE;
      if($FORCE_PICTURE_WIDTH>$this->PICTURE_WIDTH){
       $CREATE_WIDTH=$FORCE_PICTURE_WIDTH-$this->FORCE_START_X;
      }else{
       $CREATE_WIDTH=$this->PICTURE_WIDTH;
      }
      if($FORCE_PICTURE_HEIGHT>$this->PICTURE_HEIGHT){
       $CREATE_HEIGHT=$FORCE_PICTURE_HEIGHT-$this->FORCE_START_Y;
      }else{
       $CREATE_HEIGHT=$this->PICTURE_HEIGHT;
      }
      /*
        创建一个画布
      */
      $NEW_PICTURE_CREATE=imagecreatetruecolor($CREATE_WIDTH,$CREATE_HEIGHT);
      $WHITE=imagecolorallocate($NEW_PICTURE_CREATE,255,255,255);
      /*
        将背景图拷贝到画布中
      */
      imagecopy($NEW_PICTURE_CREATE, $this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
     
      /*
        将目标图片拷贝到背景图片上
      */
      imagecopy($NEW_PICTURE_CREATE, $FORCE_PICTURE_CREATE, $this->FORCE_X, $this->FORCE_Y, $this->FORCE_START_X, $this->FORCE_START_Y,$FORCE_PICTURE_WIDTH,$FORCE_PICTURE_HEIGHT);
      $this->TRUE_COLOR=$NEW_PICTURE_CREATE;
     }
     #end of mark

     function alpha_(){
      $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
      $rgb="#CDCDCD";
      $tran_color="#000000";
      for($j=0;$j<=$this->PICTURE_HEIGHT-1;$j++){
       for ($i=0;$i<=$this->PICTURE_WIDTH-1;$i++)
       {
        $rgb = imagecolorat($this->PICTURE_CREATE,$i,$j);
        $r = ($rgb >> 16) & 0xFF;
        $g = ($rgb >> 8) & 0xFF;
        $b = $rgb & 0xFF;
        $now_color=imagecolorallocate($this->PICTURE_CREATE,$r,$g,$b);
        if ($now_color==$tran_color)
        {
         continue;
        }
        else
        {
         $color=imagecolorallocatealpha($this->PICTURE_CREATE,$r,$g,$b,$ALPHA);
         imagesetpixel($this->PICTURE_CREATE,$ALPHA_X+$i,$ALPHA_Y+$j,$color);
        }
        $this->TRUE_COLOR=$this->PICTURE_CREATE;

       }
      }
     }

     /*
     图片旋转:
     沿y轴旋转
     */
     function turn_y(){
      $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
      for ($x = 0; $x < $this->PICTURE_WIDTH; $x++)
      {
       imagecopy($this->TRUE_COLOR, $this->PICTURE_CREATE, $this->PICTURE_WIDTH - $x - 1, 0, $x, 0, 1, $this->PICTURE_HEIGHT);
      }
     }
     /*
     沿X轴旋转
     */
     function turn_x(){
      $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
      for ($y = 0; $y < $this->PICTURE_HEIGHT; $y++)
      {
       imagecopy($this->TRUE_COLOR, $this->PICTURE_CREATE, 0, $this->PICTURE_HEIGHT - $y - 1, 0, $y, $this->PICTURE_WIDTH, 1);
      }
     }


     /*
     任意角度旋转
     */
     function turn(){
      $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
      imageCopyResized($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
      $WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,255);
      $this->TRUE_COLOR=imagerotate ($this->TRUE_COLOR, $this->CIRCUMROTATE, $WHITE);
     }
     /*
     图片锐化
     */
     function sharp(){
      $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
      $cnt=0;
      for  ($x=0;  $x<$this->PICTURE_WIDTH;  $x++){
       for  ($y=0;  $y<$this->PICTURE_HEIGHT;  $y++)
       {
        $src_clr1  =  imagecolorsforindex($this->TRUE_COLOR,  imagecolorat($this->PICTURE_CREATE,  $x-1,  $y-1));
        $src_clr2  =  imagecolorsforindex($this->TRUE_COLOR,  imagecolorat($this->PICTURE_CREATE,  $x,  $y));
        $r  =  intval($src_clr2["red"]+$this->SHARP*($src_clr2["red"]-$src_clr1["red"]));
        $g  =  intval($src_clr2["green"]+$this->SHARP*($src_clr2["green"]-$src_clr1["green"]));
        $b  =  intval($src_clr2["blue"]+$this->SHARP*($src_clr2["blue"]-$src_clr1["blue"]));
        $r  =  min(255,  max($r,  0));
        $g  =  min(255,  max($g,  0));
        $b  =  min(255,  max($b,  0));
        if  (($DST_CLR=imagecolorexact($this->PICTURE_CREATE,  $r,  $g,  $b))==-1)
        $DST_CLR  =  imagecolorallocate($this->PICTURE_CREATE,  $r,  $g,  $b);
        $cnt++;
        if  ($DST_CLR==-1)  die("color  allocate  faile  at  $x,  $y  ($cnt).");
        imagesetpixel($this->TRUE_COLOR,  $x,  $y,  $DST_CLR);
       }
      }
     }
     
     /*
       将图片反色处理??
     */
     function return_color(){
      /*
        创建一个画布
      */
      $NEW_PICTURE_CREATE=imagecreate($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
      $WHITE=imagecolorallocate($NEW_PICTURE_CREATE,255,255,255);
      /*
        将背景图拷贝到画布中
      */
      imagecopy($NEW_PICTURE_CREATE, $this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
      $this->TRUE_COLOR=$NEW_PICTURE_CREATE;
     }

     /*
     生成目标图片并显示
     */
     function show(){
      // 判断浏览器,若是IE就不发送头
      if(isset($_SERVER['HTTP_USER_AGENT']))
      {
       $ua = strtoupper($_SERVER['HTTP_USER_AGENT']);
       if(!preg_match('/^.*MSIE.*\)$/i',$ua))
       {
        header("Content-type:$this->PICTURE_MIME");
       }
      }
      $OUT=$this->PICTURE_TYPE;
      $OUT($this->TRUE_COLOR);
     }

     /*
     生成目标图片并保存
     */
     function save_picture(){
      // 以 JPEG 格式将图像输出到浏览器或文件
      $OUT=$this->PICTURE_TYPE;
      if(function_exists($OUT)){
       // 判断浏览器,若是IE就不发送头
       if(isset($_SERVER['HTTP_USER_AGENT']))
       {
        $ua = strtoupper($_SERVER['HTTP_USER_AGENT']);
        if(!preg_match('/^.*MSIE.*\)$/i',$ua))
        {
         header("Content-type:$this->PICTURE_MIME");
        }
       }
       if(!$this->TRUE_COLOR){
        exit($this->ERROR['unavilable']);
       }else{
        $OUT($this->TRUE_COLOR,$this->DEST_URL);
        $OUT($this->TRUE_COLOR);
       }
      }
     }
     /*
     析构函数:释放图片
     */
     function __destruct(){
      /*释放图片*/
      imagedestroy($this->TRUE_COLOR);
      imagedestroy($this->PICTURE_CREATE);
     }
     #end of class
    }
    ?>


    Google
     
    文章录入:丹峰    责任编辑:丹峰 
  • 上一篇文章:

  • 下一篇文章:
  •  
    设为首页 / 加入收藏 / 联系站长 / 友情链接 / 本站动态 / 用户留言 / 版权申明
    QQ宝页站 www.QQBye.com 信息备案:粤ICP备06124483号