`

图片水印及缩略图

阅读更多
<?php 
/**
 * @title:图片水印
 * @autor:zms
 * @version:2011-7-26
 * 因为GD库的限制,现在只能使用gif,jpg,png三种格式
 */

 // //////////使用例子
 //实例化
 //参数说明:路径,是否使用水印(default:false)
 $img = new image_watermark(true);//实例化
 //设置原始图
 $img->dst_image('卡通.jpg');
 //加入文字
 //参数说明:内容,位置(default:图片中间位置),透明度(defulat:127  0-127),大小(default:12),角度(default:0),颜色(RGB:default:255,255,255),(字体:default:shongti.ttf,编码:default:UTF-8)
 $img->set_font('测试text,www.baidu.com', "300,422", 50, 15, 50, '36,93,219');
 $img->set_font('测试text,www.baidu.com');
 //加入水印图片
 //参数说明:路径,透明度(default:0),位置:default:图片右下角位置'将图像中坐标从 x3 ,x4 开始,宽度为 x5 ,高度为 x6 的一部分拷贝到 原 图像中坐标为 x1 和 x2 的位置上。'
 //如果水印图的高宽设置大于原始图的大小,不打水印
 $img->src_image('2010723136342131.jpg', '80', "0,0,460,150,200,200");
 $img->src_image('2010723136342131.jpg', '80');
 $img->src_image('2010723136342131.jpg', '80',"0,0,55,56,150,520");
 //缩放图片(0-?)
 //参数说明:倍数(defautl:1),(位置x1,x2,x3,x4)将图像中坐标从 x3 ,x4 开始一部分拷贝到 剪切板 中坐标为 x1 和 x2 的位置上。
 //$img->resize_image(1);
 //将水印后图片写到本地
 //参数说明:是否覆盖原始图片(default:false)
 //$img->write_img(false);
 //将水印后图片输出到浏览器
 $img->print_img();
 
class image_watermark {

    private $dst_img = "";//原始图片真彩图像
    private $dst_img_url = "";//原始图片地址
    private $dst_img_info = "";//原始图片信息
    
    private $src_img = "";//水印图片真彩图像
    private $src_img_url = "";//水印图片地址
    private $src_img_info = "";//水印图片信息
    
    private $resize_img = "";//缩放后图片
    
    //设置图片名的输入编码,解决中文名图片乱码问题
    private $img_in_encode = "UTF-8";
    function set_img_in_encode($encode) {
        $this->img_in_encode = $encode;
    }
    //-------------------
    /**
     * @param object $dst_image	: 原始图片
     * @param object $use [optional]: true ,false 是否使用水印
     * @param object $cover [optional]: true ,false 是否覆盖旧图片(true:覆盖 false:生成新图)
     * @return
     */
    function __construct($use = false) {
        header("content-type:text/html; charset=UTF-8");
        if ($use) {//使用水印
            if (!extension_loaded('gd')) {
                echo "GD库未开启,请设置php.int开启GD库";
                exit;//中断所有操作
            }
        } else {
            echo "未开启水印功能,请实例化方法时开启";
            exit;//中断所有操作
        }
    }//end __construct
    
    /**
     * 清理
     * @return
     */
    function __destruct() {
        @imagedestroy();
    }
    
    /**
     * 设置原始图
     * @param object $dst_image
     * @return
     */
    function dst_image($dst_image) {
        //中文名图片乱码解决
        $dst_image = @iconv($this->img_in_encode, "gb2312", $dst_image);
        $this->dst_img_url = $dst_image;
        //1.获取图片信息
        $this->dst_img_info = @getimagesize($this->dst_img_url);
        //2.验证是否为可用图片
        if ($this->check_type($this->dst_img_info[2])) {
            //2.1.获取图片信息,识别编码,建立真彩图像
            $this->create_image($this->dst_img_info[2], 'dst');
        } else {
            echo "原始图片文件格式错误!现在只支持:GIF,JPG,PNG";
            exit;//中断所有操作
        }
    }
    /**
     * 设置水印图
     * @param object $src_image : 水印图地址
     * @param object $src_image_style [optional] : x1,x2,x3,x4,x5,x6
     * 将图像中坐标从 x3 ,x4 开始,宽度为 x5 ,高度为 x6 的一部分拷贝到 原 图像中坐标为 x1 和 x2 的位置上。
     * @param object $transparent [optional] : 透明度 其值范围从 0 到 100
     * @return
     */
    function src_image($src_image, $transparent = 100, $src_image_style = "0,0,0,0,100,100") {
        $transparent = $transparent >= 0 && $transparent <= 100 ? $transparent : 100;
        //中文名图片乱码解决
        $src_image = @iconv($this->img_in_encode, "gb2312", $src_image);
        $this->src_img_url = $src_image;
        //1.获取图片信息
        $this->src_img_info = @getimagesize($this->src_img_url);
        $src_image_style = trim(ltrim(rtrim($src_image_style, ","), ","));
        $src_image_style_array = split(",", $src_image_style);
        
        if ($src_image_style == "0,0,0,0,100,100") {
            $src_image_style_array[0] = $this->dst_img_info[0] - 100;
            $src_image_style_array[1] = $this->dst_img_info[1] - 100;
        }
        //判断水印图的设置大小是否会超出原始图的大小,如果超过,则不打水印
        if ($src_image_style_array[4] < $this->dst_img_info[0] && $src_image_style_array[5] < $this->dst_img_info[1]) {
            //2.验证是否为可用图片
            if ($this->check_type($this->src_img_info[2])) {
                //2.1.获取图片信息,识别编码,建立真彩图像
                $this->create_image($this->src_img_info[2], 'src');
                @imagecopymerge($this->dst_img, $this->src_img, $src_image_style_array[0], $src_image_style_array[1], $src_image_style_array[2], $src_image_style_array[3], $src_image_style_array[4], $src_image_style_array[5], $transparent);
            } else {
                echo "水印图片文件格式错误!现在只支持:GIF,JPG,PNG";
                exit;//中断所有操作
            }
        }
    }
    /**
     * 识别编码,建立真彩图像
     * @param object $img_info:图像格式
     * @param object $type : 识别图像是水印或是原始 'dsk' 'src'
     * @return
     */
    function create_image($img_info, $type) {
        if ($type == 'dst') {
            $url = $this->dst_img_url;
        } elseif ($type == 'src') {
            $url = $this->src_img_url;
        }
        switch ($img_info) {
            case "1":
                $img = @imagecreatefromgif($url);
                break;
            case "2":
                $img = @imagecreatefromjpeg($url);
                break;
            case "3":
                $img = @imagecreatefrompng($url);
                break;
            default:
                break;
        }//end switch
        if ($type == 'dst') {
            $this->dst_img = $img;
        } elseif ($type == 'src') {
            $this->src_img = $img;
        }
    }//end create_image
    
    /**
     * 设置文字
     * @param object $content : 内容
     * @param object $transparent [optional] : 透明度 其值从 0 到 127。0 表示完全不透明,127 表示完全透明
     * @param object $fontfile [optional] : 字体文件 (.ttf)
     * @param object $col [optional] : 字体颜色 RGB "255,255,255"
     * @param object $coordinate [optional] : 坐标 "x,y"
     * @param object $size [optional] : 大小 int
     * @param object $angle [optional] : 角度制表示的角度,0 度为从左向右读的文本。更高数值表示逆时针旋转
     * @param object $encode [optional] : 编码 "UTF-8"
     * @return
     */
    function set_font($content, $coordinate = "0,0", $transparent = 0, $size = 12, $angle = 0, $col = "0,0,0", $fontfile = "shongti.ttf") {
        $transparent = $transparent >= 0 && $transparent <= 127 ? $transparent : 0;
        //1.对颜色split
        $col = trim(ltrim(rtrim($col, ","), ","));
        $col_array = split(",", $col);
        //$col = imagecolorallocate($this->dst_img, $col_array[0], $col_array[1], $col_array[2]);
        $col = @imagecolorallocatealpha($this->dst_img, $col_array[0], $col_array[1], $col_array[2], $transparent);
       
        $coordinate = trim(ltrim(rtrim($coordinate, ","), ","));
        $coordinate_array = split(",", $coordinate);
        if ($coordinate == "0,0") {
            $coordinate_array[0] = $this->dst_img_info[0] / 2;
            $coordinate_array[1] = $this->dst_img_info[1] / 2;
        }
        @imagettftext($this->dst_img, $size, $angle, $coordinate_array[0], $coordinate_array[1], $col, $fontfile, $content);
    }//end set_font
    
    /**
     * 缩放图片
     * @param object $resize [optional] : 缩放
     * @param object $coordinate [optional] : 剪切板开始位置:x1,x2,x3,x4
     * 将图像中坐标从 x3 ,x4 开始一部分拷贝到 剪切板 中坐标为 x1 和 x2 的位置上。
     * @return
     */
    function resize_image($resize = 1, $coordinate = "0,0,0,0") {
        $resize = $resize > 0 ? $resize : 1;
        //创建剪切板
        $this->resize_img = @imagecreatetruecolor($this->dst_img_info[0] * $resize, $this->dst_img_info[1] * $resize);
        $coordinate = trim(ltrim(rtrim($coordinate, ","), ","));
        $coordinate_array = split(",", $coordinate);
        //剪切图像
        @imagecopyresized($this->resize_img, $this->dst_img, $coordinate_array[0], $coordinate_array[1], $coordinate_array[2], $coordinate_array[3], $this->dst_img_info[0] * $resize, $this->dst_img_info[1] * $resize, $this->dst_img_info[0], $this->dst_img_info[1]);
    }
    
    /**
     * 将水印后图片写到本地
     * @param object $cover [optional] : 是否覆盖原始图片
     * @return
     */
    function write_img($cover = false) {
        $c = $cover ? $this->str_img_name() : $this->str_img_name(true);
        
        switch ($this->dst_img_info[2]) {
            case "1":
                if ($this->resize_img != "") {
                    @imagegif($this->resize_img, $c);
                } else {
                    @imagegif($this->dst_img, $c);
                }
                break;
            case "2":
                if ($this->resize_img != "") {
                    @imagejpeg($this->resize_img, $c);
                } else {
                    @imagejpeg($this->dst_img, $c);
                }
                break;
            case "3":
                if ($this->resize_img != "") {
                    @imagepng($this->resize_img, $c);
                } else {
                    @imagepng($this->dst_img, $c);
                }
                break;
            default:
                break;
        }//end switch
    }//end write_img
    
    /**
     * 将水印后图片输出到浏览器
     * @return
     */
    function print_img() {
        switch ($this->dst_img_info[2]) {
            case "1":
                header("content-type:image/gif");
                if ($this->resize_img != "") {
                    @imagegif($this->resize_img);
                } else {
                    @imagegif($this->dst_img);
                }
                break;
            case "2":
                header("content-type:image/jpeg");
                if ($this->resize_img != "") {
                    @imagejpeg($this->resize_img);
                } else {
                    @imagejpeg($this->dst_img);
                }
                break;
            case "3":
                header("content-type:image/png");
                if ($this->resize_img != "") {
                    @imagepng($this->resize_img);
                } else {
                    @imagepng($this->dst_img);
                }
                break;
            default:
                break;
        }//end switch
    }//end write_img
    
    /**
     * 验证文件格式
     * @param object $type : 图片格式
     * 1:gif 2:jpg,jpeg 3:png
     * @return
     */
    function check_type($type) {
        return $type == "1" ? true : $type == "2" ? true : $type == "3" ? ture : false;
    }//end check_type
    /**
     * 截取文件名
     * $new : 是否为新图片
     * @return
     */
    function str_img_name($new = false) {
        if (strstr($this->dst_img_url, "/")) {//判断文件名是否为最后一级
            $path = trim(substr($this->dst_img_url, 0, strrpos($this->dst_img_url, "/")));
            //截取文件名
            $file_name = trim(substr($this->dst_img_url, strrpos($this->dst_img_url, "/"), strlen($this->dst_img_url)));
        } else {
            $file_name = trim($this->dst_img_url);
        }
        if ($new) {
            $file_name = str_replace(".", "_new.", $file_name);
        }
        return $path.$file_name;
    }//end str_img_name
    
}//end class

?>

 

分享到:
评论

相关推荐

    自动生成带水印及缩略图程序

    在.NET框架中,生成带水印及缩略图的程序是一项常见的图像处理任务,它涉及到对数字图像进行操作,如尺寸调整、添加文字或图像水印等。这项技术广泛应用于网站开发、媒体管理、版权保护等领域。下面我们将深入探讨...

    aspJpeg 组件下载(文字水印、图片水印、缩略图)

    aspJpeg 组件下载 (文字水印、图片水印、缩略图) 绿色文件

    C#图片生成缩略图和图片水印

    在C#编程中,生成图片缩略图和添加水印是常见的图像处理任务,这在网站开发、应用程序设计以及各种媒体展示中都有广泛的应用。本文将深入探讨如何使用C#来实现这两个功能。 首先,我们来看一下如何创建图片的缩略图...

    图片批量加水印以及缩略图

    "图片批量加水印以及缩略图"这个主题涉及到两个关键的技术点:图像水印添加和图像缩略图生成。 1. **图片加水印**:水印是一种在图像上添加标识或版权信息的方式,用于防止未经授权的使用或表明所有权。批量加水印...

    PHP图片处理(上传、加水印、缩略图)

    PHP图片处理(上传、加水印、缩略图),对图片的处理

    php生成图片缩略图并添加水印

    生成各种图片缩略图,并支持添加水印 一个生成缩略图的函数 一个添加水印的函数 傻瓜式应用很简单

    图片操作-图片水印、文字水印、缩略图生成

    本教程主要关注使用C#编程语言实现图片水印、文字水印和缩略图生成的功能。以下是对这些知识点的详细说明: 1. 图片水印: 图片水印是在原始图像上添加半透明或带有特定图案的图像,用于标识版权或增加视觉效果。在...

    GD库实现水印和缩略图

    在这个类中,我们定义了构造函数接收源图像路径和目标图像路径,然后提供添加文本水印、图片水印和生成缩略图的方法。具体的实现细节包括加载源图像,创建目标图像,计算水印位置,应用水印和缩放操作,最后保存图像...

    在线图片水印、缩略图生成组件

    功能特点: 1、导入多种图片格式,目前支持BMP,JPG,GIF等。 2、输出JPG格式缩略图,自定义输出压缩参数。 3、高效率生成缩略图,5种导出...6、支持图片水印,图片水引支持透明度。 7、性能更稳定,消耗系统资源少。

    PHP100视频教程35:PHP5文字图片混合水印与缩略图.rar

    在这个教程中,我们将主要使用GD库来实现水印和缩略图的创建。 1. **文字水印**: 创建文字水印通常涉及以下几个步骤: - 加载原始图像资源:使用`imagecreatefromjpeg()`、`imagecreatefrompng()`等函数加载图片...

    php实现常见图片格式的水印和缩略图制作(面向对象)

    根据提供的文件内容,我们可以看到一个名为“Water”的类,该类用于制作图片水印和缩略图。这个类具有多个属性,如“watermark_on”用于控制是否添加水印,“water_img”用于设置水印图片路径,“pos”用于设置水印...

    制作缩略图源码,生成带水印的缩略图

    在IT行业中,生成缩略图和添加水印是常见的图像处理任务,特别是在网站开发、社交媒体分享、图片存储服务等领域。这个“制作缩略图源码,生成带水印的缩略图”的项目显然关注的就是这一核心功能。接下来,我们将详细...

    缩略图 水印 缩略图 能够兼容各种浏览器 Jquery

    在网上找了好久都没有一个好的图片上传组建,于是我自己弄了一个, 功能非常 强大。...能够显示缩略图,一次上传多张,生成缩略图,按比例缩放。添加水印都有。而且能够兼容时下的各种浏览器。 Jquery

    Asp.net上传图片同时生成缩略图和水印图

    在ASP.NET中,上传图片并生成缩略图和水印图是一项常见的需求,特别是在创建网站或者应用程序时,需要处理用户上传的图像。以下是一个关于如何在ASP.NET中实现这个功能的详细说明。 首先,上传图片是通过HTML的`...

    上传图片生成缩略图、图片水印、文字水印.rar

    在ASP.NET开发中,处理图片的操作是常见的需求,如生成缩略图、添加水印(包括图片水印和文字水印)等。本压缩包"上传图片生成缩略图、图片水印、文字水印.rar"提供了一套完整的解决方案,适用于网站中需要处理图片...

    上传图片生成水印缩略图

    "上传图片生成水印缩略图"是一个典型的需求,它涉及到文件上传、图像处理和优化等多个技术环节。接下来,我们将深入探讨这个话题。 1. **文件上传**:在Web应用中,`fileUpload`通常指的是用户通过网页上传文件的...

    C#水印以及缩略图代码

    在这一背景下,利用编程语言实现对图片添加水印及生成缩略图的功能显得尤为重要。本文将围绕“C#水印以及缩略图代码”这一主题,详细介绍其实现原理和技术细节。 #### 二、关键技术介绍 ##### 2.1 CodeCarvings....

    struts2上传文件、生成缩略图、添加文字和图片水印

    在Web开发中,文件上传功能是常见的需求,而生成缩略图、添加文字和图片水印则是对上传图片进行处理的常用操作。下面将详细阐述这些知识点。 1. **Struts2文件上传** Struts2提供了强大的文件上传支持,主要依赖于...

    ASP.NET图片上传,生成缩略图,加文字、图片水印

    在ASP.NET开发中,处理图片上传、生成缩略图以及添加文字和图片水印是常见的需求,这些功能在网站设计、电商系统、社交媒体平台等应用中尤为重要。下面将详细讲解这些知识点。 首先,**ASP.NET图片上传**是网站与...

Global site tag (gtag.js) - Google Analytics