PHP图片处理类-添加中文水印应用实例

 所属分类:常用实例教程

 浏览:939次-  下载:0次-  评论: 0次-  更新时间:2020-09-24
PHP图片处理类-添加中文水印应用实例
金币说明:注册即送10金币,每日签到可获得更多金币,成为VIP会员可免金币下载! 充值金币充值会员更多说明»
描述:PHP图片处理类-添加中文水印应用实例,功能包含:中文文字水印、是否覆盖原图、水印背景色、自定义字体等,PS:此功能需要您的服务环境支持GD库。

基础属性

  • 语言PHP
  • 数据库无数据库
  • 难易程度初级

详细介绍

PHP引用水印类并给图片添加水印:

header("Content-type: text/html; charset=utf-8");
include_once 'water.class.php';
$objImg = new WaterChinese();
$objImg->Path = "images/";
$objImg->FileName = "1.jpg";
$objImg->Text =  mb_convert_encoding('码帮主(www.mabangzhu.com)', "html-entities", "utf-8");
$objImg->Font = "./fonts/simhei.ttf";//字体位置
$objImg->TextBgColor = "#ffffff";//文字背景颜色
$objImg->TextColor = "#ffffff";//文字颜色
$objImg->OverFlag = false;//是否覆盖原图
$objImg->Run();

PHP给图片添加水印类:

<?php
class WaterChinese {

    var $Path = "./"; //图片所在目录相对于调用此类的页面的相对路径
    var $FileName = ""; //图片的名字,如“1.jpg”
    var $Text = ""; //图片要加上的水印文字,支持中文
    var $TextColor = "#ffffff"; //文字的颜色,gif图片时,字体颜色只能为黑色
    var $TextBgColor = "#000000"; //文字的背景条的颜色
    var $Font = "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;
    }

}


相关素材

讨论这个素材(0)回答他人问题或分享使用心得奖励金币

〒_〒 居然一个评论都没有……

表情  文明上网,理性发言!
我的金币余额: 0 已下载次数: 0
所需金币:25开始下载

金币获取:签到、评论、投搞、充值、发帖、回帖    » 在线充值(10金币=1元)