`

PHP添加中文水印

阅读更多

示例代码1:

<?php
Header("Content-type: image/png");      /*通知浏览器,要输出图像*/
$im       = imagecreate(400 , 300);        /*定义图像的大小*/
$gray     = ImageColorAllocate($im , 235 , 235 , 235);
$pink     = ImageColorAllocate($im, 255 , 128 , 255);

$fontfile = "simkai.ttf";

/* $fontfile 字体的路径,视操作系统而定,可以是 simhei.ttf(黑体) , SIMKAI.TTF(楷体) , SIMFANG.TTF(仿宋) ,SIMSUN.TTC(宋体&新宋体) 等 GD 支持的中文字体*/
$str   = iconv('GB2312','UTF-8','中文水印');     /*将 gb2312 的字符集转换成 UTF-8 的字符*/
ImageTTFText($im, 30, 0, 100, 200, $pink , $fontfile , $str);
/* 加入中文水印 */
Imagepng($im);
ImageDestroy($im);
?>

 

 

示例代码2:

<?
header("Content-type: image/jpeg");
$image = "1.jpg"; //原图
$fnt = "c:/windows/fonts/stcaiyun.ttf"; // 彩云
$str = "谨防盗版 谨防盗版";
//$str = iconv("GB2312","UTF-8",$str);
$size = 40;
$angle = 20;
$ar = imagettfbbox($size, $angle, $fnt, $str);
$width = $ar[2];
$height = max($size,$ar[1]-$ar[5]);
$im = imagecreatefromjpeg($image);
//$white = imagecolorallocate($im, 255,255,255);
$color = imagecolorallocatealpha($im, 255,255,255,1);
for($i=0;$i<5;$i++) {
//$color = imagecolorclosestalpha($im,255,255,255,90-$i*10);
imagettftext($im, $size, $angle, 40-$ar[6], $height-$ar[1]+100*$i, $color, $fnt, $str);
}
imagejpeg($im);
imagedestroy($im);
?>

 

 

示例代码3:

<?php
class imagelogo{
var $input_image_file = "";        //输入图片的文件名
var $output_image_file = "";       //生成文件的名称
var $logo_image_name = "";         //包含存放路径的水印图片的文件名
var $logo_text = "";               //水印文字
var $logo_text_size = 18;          //水印文字大小
var $logo_text_angle = 4;          //水印文字角度
var $logo_text_pos = 6;            //水印文字放置位置
var $logo_text_font = "";          //水印文字的字体
var $logo_text_color = "#ffffff"; //水印字体的颜色值
var $logo_image_pos = 6;           //水印图片放置的位置
   //1 = 顶部居左,2 = 顶部居中,3 = 顶部居右,4 = 底部居左
   //5 = 底部居中,6 = 底部居右,7 = 中间居左,8 = 居中,9 = 中间居右
var $logo_image_transition = 25;   //水印图片与原图片的融合度(1=100)
var $jpeg_quality = 75;            //jpeg图片的质量
//生成水印图片
function create($filename=""){
   if ($filename) $this->input_image_file = strtolower(trim($filename));
   $src_image_type = $this->get_type($this->input_image_file);
   $src_image = $this->createImage($src_image_type,$this->input_image_file);
   if (!$src_image) return;
   $src_image_w=imagesx($src_image);
   $src_image_h=imagesy($src_image);
   //开始处理水印logo图片信息,把两个图片合成为一个图片
   if ($this->logo_image_name){
    $this->logo_image_name = strtolower(trim($this->logo_image_name));
    $logo_image_type = $this->get_type($this->logo_image_name);
    $logo_image = $this->createImage($logo_image_type,$this->logo_image_name);
    $logo_image_w=imagesx($logo_image);
    $logo_image_h=imagesy($logo_image);
    $temp_logo_image = $this->getPos($src_image_w,$src_image_h,$this->logo_image_pos,$logo_image);
    $logo_image_x = $temp_logo_image["dest_x"];
    $logo_image_y = $temp_logo_image["dest_y"];
    imagecopymerge($src_image, $logo_image,$logo_image_x,$logo_image_y,0,0,$logo_image_w,$logo_image_h,$this->logo_image_transition);
   }
   //水印为纯文本
   if ($this->logo_text){
    $this->logo_text = $this->gb2utf8($this->logo_text);
    $temp_logo_text = $this->getPos($src_image_w,$src_image_h,$this->logo_text_pos);
    $logo_text_x = $temp_logo_text["dest_x"];
    $logo_text_y = $temp_logo_text["dest_y"];
    if(preg_match("/([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])/i", $this->logo_text_color, $color))
    {
     $red = hexdec($color[1]);
     $green = hexdec($color[2]);
     $blue = hexdec($color[3]);
     $logo_text_color = imagecolorallocate($src_image, $red,$green,$blue);
    }else{
     $logo_text_color = imagecolorallocate($src_image, 255,255,255);
    }
    //用TrueType字体向图像写入文本
    imagettftext($src_image,$this->logo_text_size,$this->logo_angle,$logo_text_x,$logo_text_y,$logo_text_color,$this->logo_text_font,$this->logo_text);
   }
   //保存生成的图片为新的文件
   if ($this->output_image_file){
    switch ($this->get_type($this->output_image_file)){
     case 'gif':$src_img=imagegif($src_image, $this->output_image_file); break;
     case 'jpeg':$src_img=imagejpeg($src_image, $this->output_image_file, $this->jpeg_quality); break;
     case 'png':$src_img=imagepng($src_image, $this->output_image_file); break;
     default:$src_img=imagejpeg($src_image, $this->output_image_file, $this->jpeg_quality); break;
    }
   }
   else
   { //在原来图片的基础上生成新的合成图片
    if ($src_image_type = "jpg") $src_image_type="jpeg";
    header("Content-type: image/{$src_image_type}");
    switch ($src_image_type){
     case 'gif':$src_img=imagepng($src_image); break;
     case 'jpg':$src_img=imagejpeg($src_image, "", $this->jpeg_quality);break;
     case 'png':$src_img=imagepng($src_image);break;
     default:$src_img=imagejpeg($src_image, "", $this->jpeg_quality);break;
    }
   }
   imagedestroy($src_image);
}
//根据文件名和类型创建图片
function createImage($type,$img_name){
   if (!$type){
    $type = $this->get_type($img_name);
   }
   switch ($type){
    case 'gif':
     if (function_exists('imagecreatefromgif'))
    $tmp_img=@imagecreatefromgif($img_name);
     break;
    case 'jpg':
     $tmp_img=imagecreatefromjpeg($img_name);
     break;
    case 'png':
     $tmp_img=imagecreatefrompng($img_name);
     break;
    default:
     $tmp_img=imagecreatefromstring($img_name);
     break;
   }
   return $tmp_img;
}
//根据源图像的长、宽,位置代码,水印图片id来生成把水印放置到源图像中的位置
function getPos($sourcefile_width,$sourcefile_height,$pos,$logo_image=""){
   if ($logo_image){
    $insertfile_width = imagesx($logo_image);
    $insertfile_height = imagesy($logo_image);
   }else {
    $lineCount = explode("\r\n",$this->logo_text);
    $fontSize = imagettfbbox($this->logo_text_size,$this->logo_text_angle,$this->logo_text_font,$this->logo_text);
    $insertfile_width = $fontSize[2] - $fontSize[0];
    $insertfile_height = count($lineCount)*($fontSize[1] - $fontSize[3]);
   }
   switch ($pos){
    case 1://顶部居左
     $dest_x = 0;
     if ($this->logo_text){
      $dest_y = $insertfile_height;
     }else{
      $dest_y = 0;
     }
     break;
    case 2://顶部居中
     $dest_x = ( ( $sourcefile_width - $insertfile_width ) / 2 );
     if ($this->logo_text){
      $dest_y = $insertfile_height;
     }else{
      $dest_y = 0;
     }
     break;
    case 3://顶部居右
     $dest_x = $sourcefile_width - $insertfile_width;
     if ($this->logo_text){
      $dest_y = $insertfile_height;
     }else{
      $dest_y = 0;
     }
     break;
    case 4://底部居左
     $dest_x = 0;
     $dest_y = $sourcefile_height - $insertfile_height;
     break;
    case 5://底部居中
     $dest_x = ( ( $sourcefile_width - $insertfile_width ) / 2 );
     $dest_y = $sourcefile_height - $insertfile_height;
     break;
    case 6://底部居右
     $dest_x = $sourcefile_width - $insertfile_width;
     $dest_y = $sourcefile_height - $insertfile_height;
     break;
    case 7://中间居左
     $dest_x = 0;
     $dest_y = ( $sourcefile_height / 2 ) - ( $insertfile_height / 2 );
     break;
    case 8://居中
     $dest_x = ( $sourcefile_width / 2 ) - ( $insertfile_width / 2 );
     $dest_y = ( $sourcefile_height / 2 ) - ( $insertfile_height / 2 );
     break;
    case 9://中间居右
     $dest_x = $sourcefile_width - $insertfile_width;
     $dest_y = ( $sourcefile_height / 2 ) - ( $insertfile_height / 2 );
     break;
    default://底部居右
     $dest_x = $sourcefile_width - $insertfile_width;
     $dest_y = $sourcefile_height - $insertfile_height;
     break;
   }
   return array("dest_x"=>$dest_x,"dest_y"=>$dest_y);
}
//获取图片的格式,主要包括jpg,png和gif
function get_type($img_name){
   $name_array = explode(".",$img_name);
   if (preg_match("/\.(gif|jpg|jpeg|png)$/", $img_name, $matches)){
    $type = strtolower($matches[1]);
   }else{
    $type = "string";
   }
   return $type;
}
//指定的文字转换为UTF-8格式,使用gb2312保证中文的正常显示
function gb2utf8($gb){
   if(!trim($gb))
    return $gb;
   $filename="./gb2312.txt";
   $tmp=file($filename);
   $codetable=array();
   while(list($key,$value)=each($tmp))
    $codetable[hexdec(substr($value,0,6))]=substr($value,7,6);
   $utf8="";
   while($gb){
    if (ord(substr($gb,0,1))>127){
     $tthis=substr($gb,0,2);
     $gb=substr($gb,2,strlen($gb)-2);
     $utf8.=$this->u2utf8(hexdec($codetable[hexdec(bin2hex($tthis))-0x8080]));
    }else{
     $tthis=substr($gb,0,1);
     $gb=substr($gb,1,strlen($gb)-1);
     $utf8.=$this->u2utf8($tthis);
    }
   }
   return $utf8;
}
//转换为UTF8编码
function u2utf8($c){
   $str="";
   if ($c < 0x80){
    $str.=$c;
   }else if ($c < 0x800){
    $str.=chr(0xC0 | $c>>6);
    $str.=chr(0x80 | $c & 0x3F);
   }else if ($c < 0x10000){
    $str.=chr(0xE0 | $c>>12);
    $str.=chr(0x80 | $c>>6 & 0x3F);
    $str.=chr(0x80 | $c & 0x3F);
   }else if ($c < 0x200000){
    $str.=chr(0xF0 | $c>>18);
    $str.=chr(0x80 | $c>>12 & 0x3F);
    $str.=chr(0x80 | $c>>6 & 0x3F);
    $str.=chr(0x80 | $c & 0x3F);
   }
   return $str;
}
}
?>

<?php
include_once("imagelogo.class.php");
$imglogo = new imagelogo();
$imglogo->logo_text = "大家好,phpbook";
$imglogo->logo_text_font = "./SIMLI.TTF";、//字体
$imglogo->create("./scene.jpg");
?>

<?php
include_once("imagelogo.class.php");
$imglogo = new imagelogo();
$imglogo->logo_text = "大家好,phpbook";
$imglogo->logo_text_font = "./SIMLI.TTF";
$imglogo->output_image_file ="./sd.jpg";
$imglogo->create("./scene.jpg");
?>

 

 示例代码4:

<?php 
/*-------------------------------------------------------------
**描述:这是用于给指定图片加底部水印(不占用图片显示区域)的自定义类,需创建对象调用
**创建:2007-10-09
**更新:2007-10-09
**说明:1、需要gd库支持,需要iconv支持(php5已经包含不用加载)
        2、只适合三种类型的图片,jpg/jpeg/gif/png,其它类型不处理
        3、注意图片所在目录的属性必须可写
        4、调用范例:
            $objImg = new MyWaterDownChinese();
            $objImg->Path = "images/";
            $objImg->FileName = "1.jpg";
            $objImg->Text = "HAHAKONGJIAN[url]HTTP://HI.BAIDU.COM/LYSONCN[/url]";
            $objImg->Font = "./font/simhei.ttf";
            $objImg->Run();
**成员函数:
----------------------------------------------------------------*/
class MyWaterDownChinese{
          var $Path = "./"; //图片所在目录相对于调用此类的页面的相对路径
          var $FileName = ""; //图片的名字,如“1.jpg”
          var $Text = "";   //图片要加上的水印文字,支持中文
          var $TextColor = "#ffffff"; //文字的颜色,gif图片时,字体颜色只能为黑色
          var $TextBgColor = "#000000"; //文字的背景条的颜色
          var $Font = "c://windows//fonts//simhei.ttf"; //字体的存放目录,相对路径
          var $OverFlag = true; //是否要覆盖原图,默认为覆盖,不覆盖时,自动在原图文件名后+"_water_down",如“1.jpg”=> "1_water_down.jpg"
          var $BaseWidth = 200; //图片的宽度至少要>=200,才会加上水印文字。
         
//------------------------------------------------------------------
//功能:类的构造函数(php5.0以上的形式)
//参数:无
//返回:无
function __construct(){;}

//------------------------------------------------------------------
//功能:类的析构函数(php5.0以上的形式)
//参数:无
//返回:无
function __destruct(){;}
//------------------------------------------------------------------

//------------------------------------
//功能:对象运行函数,给图片加上水印
//参数:无
//返回:无
function Run()
{
    if($this->FileName == "" || $this->Text == "")
        return;
    //检测是否安装GD库
    if(false == function_exists("gd_info"))
    {
        echo "系统没有安装GD库,不能给图片加水印.";
        return;
    }
    //设置输入、输出图片路径名
    $arr_in_name = explode(".",$this->FileName);
    //
    $inImg = $this->Path.$this->FileName;
    $outImg = $inImg;
    $tmpImg = $this->Path.$arr_in_name[0]."_tmp.".$arr_in_name[1]; //临时处理的图片,很重要
    if(!$this->OverFlag)
        $outImg = $this->Path.$arr_in_name[0]."_water_down.".$arr_in_name[1];
    //检测图片是否存在
    if(!file_exists($inImg))
        return ;
    //获得图片的属性
    $groundImageType = @getimagesize($inImg); 
    $imgWidth = $groundImageType[0]; 
    $imgHeight = $groundImageType[1];
    $imgType = $groundImageType[2];
    if($imgWidth < $this->BaseWidth) //小于基本宽度,不处理
        return;
    
    //图片不是jpg/jpeg/gif/png时,不处理
    switch($imgType)
    {
         case 1: 
              $image = imagecreatefromgif($inImg); 
              $this->TextBgColor = "#ffffff"; //gif图片字体只能为黑,所以背景颜色就设置为白色
              break; 
         case 2: 
              $image = imagecreatefromjpeg($inImg);
              break; 
         case 3: 
              $image = imagecreatefrompng($inImg);
              break; 
         default: 
              return;
              break;
    }
    //创建颜色
    $color = @imagecolorallocate($image,hexdec(substr($this->TextColor,1,2)),hexdec(substr($this->TextColor,3,2)),hexdec(substr($this->TextColor,5,2))); //文字颜色
    //生成一个空的图片,它的高度在底部增加水印高度
    $newHeight = $imgHeight+20;
    $objTmpImg = @imagecreatetruecolor($imgWidth,$newHeight);
    $colorBg = @imagecolorallocate($objTmpImg,hexdec(substr($this->TextBgColor,1,2)),hexdec(substr($this->TextBgColor,3,2)),hexdec(substr($this->TextBgColor,5,2))); //背景颜色    
    //填充图片的背景颜色
    @imagefill ($objTmpImg,0,0,$colorBg);
    //把原图copy到临时图片中
    @imagecopy($objTmpImg,$image,0,0,0,0,$imgWidth,$imgHeight);
    //创建要写入的水印文字对象
    $objText = $this->createText($this->Text);
    //计算要写入的水印文字的位置
    $x = 5;
    $y = $newHeight-5;
    //写入文字水印
    @imagettftext($objTmpImg,10,0,$x,$y,$color,$this->Font,$objText);    
    //生成新的图片,临时图片
    switch($imgType)
    {
         case 1: 
              imagegif($objTmpImg,$tmpImg);
              break; 
         case 2: 
              imagejpeg($objTmpImg,$tmpImg);
              break; 
         case 3: 
              imagepng($objTmpImg,$tmpImg);
              break; 
         default: 
              return;
              break;
    }    
    //释放资源
    @imagedestroy($objTmpImg);
    @imagedestroy($image);
    //重新命名文件
    if($this->OverFlag)
    {
        //覆盖原图
        @unlink($inImg);
        @rename($tmpImg,$outImg);
    }
    else
    {
        //不覆盖原图
        @rename($tmpImg,$outImg);
    }
}

//--------------------------------------
//功能:创建水印文字对象
//参数:无
//返回:创建的水印文字对象
function createText($instring)
{
   $outstring="";
   $max=strlen($instring);
   for($i=0;$i<$max;$i++)
   {
       $h=ord($instring[$i]);
       if($h>=160 && $i<$max-1)
       {
           $outstring .= "&#".base_convert(bin2hex(iconv("gb2312","ucs-2",substr($instring,$i,2))),16,10).";";
           $i++;
       }
       else
       {
           $outstring .= $instring[$i];
       }
   }
   return $outstring;
}

}//class
?>

 

 

示例代码5:

<?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_;//裁切的宽度
    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_;
        $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_;gt;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_;
    $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_;gt;FORCE_START_X;
    }
    else
    {
      $CREATE_;gt;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
}
?>

 

分享到:
评论

相关推荐

    1.PHP使用插件fpdf fpdi 给PDF文件加水印(中文乱码)

    以上就是使用fpdf和fpdi在PHP中为PDF文件添加水印的基本流程,特别是处理中文乱码的关键点。确保正确引入字体并使用支持中文的字体库是解决乱码问题的关键。在实际应用中,你可能需要根据具体需求调整水印的位置、...

    php文字水印,支持自动换行

    在PHP开发中,有时我们需要为图片添加文字水印以保护版权或者增加品牌标识。这个"php文字水印,支持自动换行"的功能提供了一种高效且灵活的方式,它允许我们轻松地在图片上添加文字,并根据需要进行智能的换行处理。...

    生成水印的php类 生成水印的php类

    `simfang.ttf`是一个中文字体文件,确保了水印能正确显示中文字符。 总的来说,生成水印的PHP类是通过GD库或类似库来实现的,它封装了图像处理的细节,使得在项目中添加水印变得更加方便。了解并掌握这些技术,可以...

    PHP简单遍历文件批量加文字水印,图片水印

    在PHP编程中,给文件批量添加水印是一项常见的需求,特别是在处理大量图片资源时。本文将详细介绍如何使用PHP实现文字水印和图片水印的批量处理。首先,我们需要理解两个核心概念:遍历文件和添加水印。 遍历文件...

    2.PHP使用插件fpdf fpdi chinese.php 给PDF文件加水印

    以上就是在PHP环境中使用fpdf、fpdi和chinese.php插件为PDF文件添加中文文字和图片水印的基本流程。在实际项目中,你可能需要根据具体需求调整水印的位置、样式,或者处理更复杂的PDF结构。确保对这些库有深入理解,...

    PHP图像处理 imagestring添加图片水印与文字水印操作示例

    在示例中,`imagettftext`被用来添加中文水印,需要指定一个支持中文的字体文件,如`STXINGKA.TTF`。 为了处理图像,PHP提供了GD库,它包含了`imagecreatefrom`系列函数(如`imagecreatefrompng`, `...

    php加水印类

    在PHP开发中,有时我们需要为图像添加水印以保护版权或增强品牌形象。"php加水印类"就是这样一个工具,它允许开发者通过编程方式轻松地在图像上添加文本或图像水印。以下是对这个主题的详细说明: 首先,`watermark...

    3.PHP使用插件fpdf fpdi 给PDF文件加水印(中文乱码)

    在PHP开发中,有时我们需要对PDF文件进行操作,比如添加水印,这通常是出于版权保护或者品牌宣传的目的。本文将详细介绍如何使用两个流行的PHP库,fpdf和fpdi...希望这些信息能帮助你成功地为你的PDF文件添加中文水印。

    PHP给图片添加水印,压缩,剪切的封装类.zipzip

    php对图片文件的操作主要是利用GD库扩展。当我们频繁利用php对图片进行操作时,会自然封装很多函数,否则会写太多重复的代码。当有很多对图片的相关函数的时候,我们可以考虑将这些函数也整理一下,因而就有了封装成...

    PHP 图片水印类代码

    【PHP 图片水印类代码】是一个用于在图像上添加文字或图片水印的PHP类。这个类提供了丰富的功能,包括设置水印的透明度、位置、字体样式以及颜色等。下面将详细介绍这个类的工作原理和各个属性及方法。 1. **水印...

    php图片加中文水印实现代码分享

    从给定文件中我们可以提取以下知识点: 1. PHP图片处理:文件提到利用PHP进行图片的处理,...通过这些知识,我们可以了解到PHP在图像处理方面的应用,特别是如何为图片添加中文水印,以及相关的技术细节和实现步骤。

    水印插件 for discuz 7.0.rar

    7.0版本设计的一款插件,其主要功能是在论坛中的图片上添加水印,以保护版权或者标识论坛信息。Discuz! 是一个非常流行的开源社区论坛系统,它允许用户通过安装各种插件来扩展其功能。 描述简洁明了,只提到了插件...

    强大的php生成word ,html,rtf,pdf框架(包含中文文档)

    添加水印 14 添加对象 15 添加标题 15 添加目录 16 表格 17 添加表格 17 添加行 17 添加单元格 17 单元格样式 19 表格样式 20 页脚 22 页眉 23 模版 23 其他问题修改 25 解决文本缩进问题 25 表格对齐和表格缩进 27 ...

    用来给图片加水印的PHP类

    在PHP中,为图片添加水印是一项常见的任务,可以用于保护版权或增加品牌标识。这里提供的PHP类`imageWaterMark`专门用于实现这个功能。它支持两种类型的水印:图片水印($waterImage)和文字水印($waterText)。...

    PHPcms整合Ueditor--水印

    - 实现水印功能:Ueditor本身并不直接支持图片水印,需要借助后端程序(如PHP)处理上传的图片,添加水印后再返回给PHPcms。 4. 图片水印技术: - PHP实现水印:可以使用PHP的GD库或Imagick库来添加文字或图像...

    PHP MPDF中文乱码的解决方式

    如果想给PDF文档添加水印,可以使用以下代码: ```php $mpdf-&gt;showWatermarkText=true; $mpdf-&gt;SetAutoFont(); ``` 这段代码将显示水印,并自动选择字体。需要水印文本时,可以使用`SetWatermarkText`方法,不过...

    phppdf

    6. 扩展功能:除了基本操作,Phppdf可能还支持添加页眉页脚、水印、书签、自动换行、分栏、多列文本、PDF安全设置等功能,满足更多复杂的PDF生成需求。 7. 注意事项:由于PDF格式的复杂性,生成PDF时可能遇到编码...

    tcpdf例子代码.rar

    这个压缩包“tcpdf例子代码.rar”包含了一些示例代码,帮助用户了解如何在 PHP 中利用 TCPDF 实现 PDF 的创建、添加页眉、插入图片、绘制框线以及设置字体以支持中文和繁体中文。以下是关于 TCPDF 的详细介绍及其在...

    PHPWord中文手册

    - **添加水印**:可以在文档上添加文本或图片形式的水印。 #### 九、对象处理 - **添加对象**:可以将其他类型的对象嵌入到文档中,如图表、表格等。 #### 十、标题与目录 - **添加标题**:通过`$section-&gt;add...

Global site tag (gtag.js) - Google Analytics