• php 给图片加水印


    昨天下午同事问我一个php的问题,就是给图片加水印,php我也一知半解,网上资料找了一通,自己就写了一个加水印的php类。

    具体代码如下:

    <?php
    class WaterGener{
    
    
        private $default_text="Just for test"; 
        private $default_waterpic="girl.jpg";
        private $default_qulity=75;
        //默认使用的字体
        private $font = 'simhei.ttf'; //定义字体
    
        //默认的padding 的值
        private $padding=5;
    
        /**
        构造函数
        **/
        function __construct(){
    
        }
    
        //获取图片类型
        private function getImage($path){
            if(!empty($path) && file_exists($path)) {
                $water_info = @getimagesize($path);
                $water_im;
                switch($water_info[2])   {    //取得水印图片的格式  
                     case 1:$water_im = @imagecreatefromgif($path);break;
                     case 2:$water_im = @imagecreatefromjpeg($path);break;
                     case 3:$water_im = @imagecreatefrompng($path);break;
                     default:return 1;
                 }
                 return $water_im;
            }
            return -1;
        }
    
    
        public function buildWaterImage($picture,$logo="",$savePath="demo.jpg"){
            //需要判断图片的类型,水印图片的类型
            if(!empty($path) && file_exists($path))return -1;
    
            $logoImage =$this->getImage($logo===""?$this->default_waterpic:$logo);
    
            $photoImage =$this->getImage($picture);
            if($photoImage==-1){
                echo "没有找到图片";
                return; 
            }
            imagealphablending($photoImage, true);
            $logo_size = getimagesize($logo); 
            $logoW = $logo_size[0];
            $logoH = $logo_size[1];
            $picture_size = getimagesize($picture); 
            ImageCopy($photoImage, $logoImage, $picture_size[0]-$logoW-$this->padding, $picture_size[1]-$logoH-$this->padding, 0, 0, $logoW, $logoH);
            ImageJPEG($photoImage,$savePath,$this->default_qulity); // output to browser or file
            ImageDestroy($photoImage);
            ImageDestroy($logoImage);
            echo "success...";
        } 
    
        public function buildWaterText($picture,$text="",$savePath="demo.jpg"){
            //需要判断
            $photoImage = $this->getImage($picture);
            ImageAlphaBlending($photoImage, true);
            $picture_size = getimagesize($picture); 
            $textcolor = imagecolorallocate($photoImage, 255,255, 255);
            //解决乱码问题
            //$text = iconv("GB2312", "UTF-8", $text); //将中文字转换为UTF8 
            imagettftext($photoImage, 20, 0, $this->padding, $picture_size[1]-($this->padding*4), $textcolor, $this->font, $text);//将文字写到图片中
            //imagestring($photoImage, 5, 0, 0,$text, $textcolor);
            ImageJPEG($photoImage,$savePath,$this->default_qulity); // output to browser
            ImageDestroy($photoImage);
        } 
    
    }
    ?>
    

    上面代码有一些纰漏:

    1,水印生成的位置,比如说可以是中间,右上角,右下角,等等。需要完善。

    2,如果是加文字水印,文字水印的位置怎么计算?计算每个文字的宽度和高度?这个还有待完善。

    3,异常的处理。php里面处理异常,我貌似还没有接触过。

    上面代码调用方式:

    <?php
    include_once "water.class.php";
    $water=new WaterGener();
    $water->buildWaterImage("girl.jpg","logo.gif","demo1.jpg");
    $water->buildWaterText("girl.jpg","开源中国");
    ?>
    


  • 相关阅读:
    [转]C# 中使用System.Net.Http.HttpClient 模拟登录博客园
    FastReport.NET 学习笔记--子分组添加事件无效的问题
    FastReport.NET 学习笔记--VS2010工具箱找不到fastreport的问题
    关于C#静态方法调用问题
    单链表——带头节点
    线性表——顺序存储结构
    重新出发
    ThreadPoolExecutor源码学习(1)-- 主要思路
    ThreadPoolExecutor源码学习(2)-- 在thrift中的应用
    [译]Cassandra的数据读写与压缩
  • 原文地址:https://www.cnblogs.com/tony-jingzhou/p/3718574.html
Copyright © 2020-2023  润新知