首页 > php图像处理 > php上传图片加水印,图片水印,文字水印

php上传图片加水印,图片水印,文字水印

这是一款比较完整的在用户上传图片时就自动给图片增加上水印,这款增加水印功能可以增加文字水印与图片水印,实例代码如下:

<?php
/*
 * created on 2010-6-21
 *
 * the class for control image
 *
 * made by s71ence
 *
 * @$img_path 图片路径
 * @$is_auto_reduce 图片是否自动按照大小等级压缩 1是
 * @$is_appoint 是否手动进行压缩或放大 1是
 * @$multiple 手动指定压缩/放大比例
 * @$is_water_str 是否加水印文字 1是
 * @$water_str 水印文字
 * @$is_watermark 是否加水印图片 1是
 * @$logo_path 水印图片路径
 * @$is_display 是否显示图片 1是
 * @$is_create 是否生成压缩后的图片 1是
 *
 * 注:
 * 1.生成新图时不可显示图片,即$isdisplay和$iscreate不可同时置为1
 * 2.当图片宽或高小于1000时,需手动设置压缩比例进行压缩
 * 3.不建议启用水印,若要启用,建议原图片大小最好在1000以内
 * 4.水印文字中不可含有中文
 * 5.新生成的图片在原目录文件中,支持n个层级
*/
class image_control {
    private $img_path;
    private $is_auto_reduce;
    private $is_appoint;
    private $multiple;
    private $is_water_str;
    private $water_str;
    private $is_watermark;
    private $logo_path;
    private $is_display;
    private $is_create;
    function __construct($img_path, $is_auto_reduce, $is_appoint, $multiple, $is_water_str, $water_str, $is_watermark, $logo_path, $is_display, $is_create) {
        $this->img_path = $img_path;
        $this->is_auto_reduce = $is_auto_reduce;
        $this->is_appoint = $is_appoint;
        $this->multiple = $multiple;
        $this->is_water_str = $is_water_str;
        $this->water_str = $water_str;
        $this->is_watermark = $is_watermark;
        $this->logo_path = $logo_path;
        $this->is_display = $is_display;
        $this->is_create = $is_create;
    }
    function img_control() {
        //获取原图
        $img_info = getimagesize($this->img_path);
        switch ($img_info[2]) {
            case 1:
                $img_get = @imagecreatefromgif($this->img_path);
                break;
            case 2:
                $img_get = @imagecreatefromjpeg($this->img_path);
                break;
            case 3:
                $img_get = @imagecreatefrompng($this->img_path);
                break;
        }
        //文字水印
        if ($this->is_water_str == 1) {
            //imagettftext(原图,文字大小,文字旋转,水印起始坐标x,水印起始坐标y,$te,'simhei.ttf',$str);
            $te = imagecolorallocate($img_get, 255, 255, 255);
            $str = iconv("gbk", "utf-8", $this->water_str); //水印文字
            imagettftext($img_get, 16, 0, $img_info[0] - 200, $img_info[1] - 20, $te, 'msyh.ttf', $str);
        }
        //图片水印
        if ($this->is_watermark == 1) {
            //水印图片处理
            $logo_info = getimagesize($this->logo_path);
            switch ($logo_info[2]) {
                case 1:
                    $logo = @imagecreatefromgif($this->logo_path);
                    break;
                case 2:
                    $logo = @imagecreatefromjpeg($this->logo_path);
                    break;
                case 3:
                    $logo = @imagecreatefrompng($this->logo_path);
                    break;
            }
            //水印logo图片
            //函数说明:imagecopy(原图,水印图片,水印坐标x,水印坐标y,水印图片开始坐标x,水印图片开始坐标y,'水印图片宽','水印图片高');
            imagecopy($img_get, $logo, 0, 0, 0, 0, $logo_info[0], $logo_info[1]);
        }
        //自动图片压缩 按图片大小分级自动压缩
        //imagecopyresized(画布,原图,画布起始x坐标,画布起始y坐标,原图起始x坐标,原图起始x坐标,新图片宽,新图片高,原图片宽,原图片高);
        if ($this->is_auto_reduce == 1) {
            if ($img_info[0] >= 3000 || $img_info[1] >= 3000) {
                $new_image_get = imagecreatetruecolor($img_info[0] * 0.03, $img_info[1] * 0.03); //生成画布
                imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * 0.03, $img_info[1] * 0.03, $img_info[0], $img_info[1]);
            } else if ($img_info[0] >= 2500 || $img_info[1] >= 2500) {
                $new_image_get = imagecreatetruecolor($img_info[0] * 0.04, $img_info[1] * 0.04);
                imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * 0.04, $img_info[1] * 0.04, $img_info[0], $img_info[1]);
            } else if ($img_info[0] >= 2000 || $img_info[1] >= 2000) {
                $new_image_get = imagecreatetruecolor($img_info[0] * 0.05, $img_info[1] * 0.05);
                imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * 0.05, $img_info[1] * 0.05, $img_info[0], $img_info[1]);
            } else if ($img_info[0] >= 1500 || $img_info[1] >= 1500) {
                $new_image_get = imagecreatetruecolor($img_info[0] * 0.08, $img_info[1] * 0.08);
                imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * 0.08, $img_info[1] * 0.08, $img_info[0], $img_info[1]);
            } else if ($img_info[0] >= 1000 || $img_info[1] >= 1000) {
                $new_image_get = imagecreatetruecolor($img_info[0] * 0.1, $img_info[1] * 0.1);
                imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * 0.1, $img_info[1] * 0.1, $img_info[0], $img_info[1]);
            } else if ($img_info[0] >= 500 || $img_info[1] >= 500) {
                $new_image_get = imagecreatetruecolor($img_info[0] * 0.2, $img_info[1] * 0.2);
                imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * 0.2, $img_info[1] * 0.2, $img_info[0], $img_info[1]);
            } else if ($img_info[0] >= 300 || $img_info[1] >= 300) {
                $new_image_get = imagecreatetruecolor($img_info[0] * 0.3, $img_info[1] * 0.3);
                imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * 0.3, $img_info[1] * 0.3, $img_info[0], $img_info[1]);
            } else {
                $new_image_get = imagecreatetruecolor($img_info[0] * 1, $img_info[1] * 1);
                imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * 1, $img_info[1] * 1, $img_info[0], $img_info[1]);
            }
        }
        //手动图片压缩
        //imagecopyresized(画布,原图,画布起始x坐标,画布起始y坐标,原图起始x坐标,原图起始x坐标,新图片宽,新图片高,原图片宽,原图片高);
        if ($this->is_appoint) {
            $new_image_get = imagecreatetruecolor($img_info[0] * $this->multiple, $img_info[1] * $this->multiple); //生成画布
            imagecopyresized($new_image_get, $img_get, 0, 0, 0, 0, $img_info[0] * $this->multiple, $img_info[1] * $this->multiple, $img_info[0], $img_info[1]);
        }
        //图像输出
        if ($this->is_display == 1) {
            header("content-type: image/jpeg");
            return imagejpeg($new_image_get);
        }
        //新图像生成
        if ($this->is_create == 1) {
            $new_name = explode("/", $this->img_path);
            $new_name_string = "";
            for ($i = 0; $i < count($new_name) - 1; $i++) {
                $new_name_string.= $new_name[$i] . "/";
            }
            $new_img_path = $new_name_string . "new" . $new_name[$i];
            if (imagejpeg($new_image_get, $new_img_path) && imagejpeg($img_get, $this->img_path)) {
                setcookie("img_new_path", $new_img_path);
                //return "图片生成成功!<br/>新图:".$new_img_path."<br/>原图:".$this->img_path;
                
            } else {
                return "图片生成失败,请检查配置是否正确!";
            }
        }
    }
    function __desctruct() {
        //clear
        
    }
}
//调用方法,代码如下:
/* $img_path="../users/user_photo/t2.jpg"; //被操作的图片路径
 $is_auto_reduce=1;//图片是否自动按照大小等级压缩 1是 
 $is_appoint=0;//是否手动进行压缩 1是 
 $multiple=0.5;//手动指定压缩比例 
 $is_water_str=0;//是否加水印文字 
 $water_str="www.111cn.net";//水印文字 
 $is_watermark=0;//是否加水印图片 1是 
 $logo_path="../image/logo_about.gif";//水印图片路径 
 $is_display=0;//是否显示图片 1是 
 $is_create=1;//是否生成压缩后的图片 1是 
 $img=new image_control($img_path,$is_auto_reduce,$is_appoint,$multiple,$is_water_str,$water_str,$is_watermark,$logo_path,$is_display,$is_create); 
 echo $img->img_control();
*/


本文地址:http://www.phprm.com/tuxiang/fs4487.html

转载随意,但请附上文章地址:-)

标签:php图片水印 php文字水印

相关文章

发表留言