• PHP学习创建水印,缩略图


    今天网上学习了一段PHP创建缩略图还有打水印的代码,如下:

    其中将图片的路径作为参数传给函数,打水印的过程就是首先获取图片和logo的参数信息,然后将logo图片拷贝到原图的某个位置,然后保存,水印打入完毕。

    创建缩略图就是将缩放比例传入函数,然后调整元图片的宽度和高度,进行保存。

    感觉这段代码当中比较巧妙地就是用到了图片的路径保存还有就是这个大量运用到PHP提供的图片处理函数,这点是非常重要的,没见过的函数要多查查手册,大体就能理解功能了 。

    图片处理类:

    <?php
    class Image_process{
        public $source;//原图
        public $source_width;//宽
        public $source_height;//高
        public $source_type_id;//原图的类型
        public $orign_name;//文件名
        public $orign_dirname;//路径名
        
        public function __construct($source){   //传入图片路径作为参数
            $this->typeList      = array(1=>'gif',2=>'jpg',3=>'png');
            $ginfo               = getimagesize($source);   //获取图片的参数
            $this->source_width  = $ginfo[0];
            $this->source_height = $ginfo[1];
            $this->source_type_id= $ginfo[2];
            $this->orign_url     = $source;
            $this->orign_name    = basename($source);
            $this->orign_dirname = dirname($source);
        }
     
                                                 
        public function judgeType($type,$source){     //判断并处理,返回PHP可识别编码
            if($type==1){
                return ImageCreateFromGIF($source);//gif
            }else if($type==2){
                return ImageCreateFromJPEG($source);//jpg
            }else if($type==3){
                return ImageCreateFromPNG($source);//png
            }else{
                return false;
            } 
        }
     
        
        public function watermarkImage($logo){   //生成水印图
            $linfo        = getimagesize($logo);
            $logo_width   = $linfo[0];
            $logo_height  = $linfo[1];
            $logo_type_id = $linfo[2];
            $sourceHandle = $this->judgeType($this->source_type_id,$this->orign_url);
            $logoHandle   = $this->judgeType($logo_type_id,$logo);
     
            if( !$sourceHandle || ! $logoHandle ){
                return false;
            }
            $x = $this->source_width - $logo_width;
            $y = $this->source_height- $logo_height;
     
            ImageCopy($sourceHandle,$logoHandle,$x,$y,0,0,$logo_width,$logo_width) or die("fail to combine");
            $newPic = $this->orign_dirname .'water_'. time().'.'. $this->typeList[$this->source_type_id];
            //将小logo作为水印拷贝到原图片的某个位置
            if( $this->saveImage($sourceHandle,$newPic)){   //保存将水印写入
                imagedestroy($sourceHandle);
                imagedestroy($logoHandle);
            }
        }
     
        // fix 宽度
        // height = true 固顶高度
        // width  = true 固顶宽度
        public function fixSizeImage($width,$height){
            if( $width > $this->source_width) $this->source_width;
            if( $height > $this->source_height ) $this->source_height;
            if( $width === false){
                $width = floor($this->source_width / ($this->source_height / $height));
            }
            if( $height === false){
                $height = floor($this->source_height / ($this->source_width / $width));
            }
            $this->tinyImage($width,$height);
        }
     
        //比例缩放
        // $scale 缩放比例
        public function scaleImage($scale){
            $width  = floor($this->source_width * $scale);   //按照scale比例将原图进行缩放
            $height = floor($this->source_height * $scale);
            $this->tinyImage($width,$height);
        }
     
        //创建略缩图
        private function tinyImage($width,$height){
            $tinyImage = imagecreatetruecolor($width, $height );
            $handle    = $this->judgeType($this->source_type_id,$this->orign_url);
            if(function_exists('imagecopyresampled')){
                imagecopyresampled($tinyImage,$handle,0,0,0,0,$width,$height,$this->source_width,$this->source_height);
            }else{
                imagecopyresized($tinyImage,$handle,0,0,0,0,$width,$height,$this->source_width,$this->source_height);
            }
     
            $newPic = time().'_'.$width.'_'.$height.'.'. $this->typeList[$this->source_type_id];
            $newPic = $this->orign_dirname .'	humb_'. $newPic;
            if( $this->saveImage($tinyImage,$newPic)){
                imagedestroy($tinyImage);
                imagedestroy($handle);
            }
        }
     
        //保存图片
        private function saveImage($image,$url){
            if(ImageJpeg($image,$url)){
                return true;
            }
        }
    }
    ?>
    

      调用以上类代码:

    <?php
     
    include('image_process.class.php');
    $m = array(
        'D:localhost1.jpg',
        'D:localhost2.jpg',
        'D:localhost3.jpg',
        'D:localhost4.jpg'
    );
     
    //$img  = 'D:localhost1.jpg';
    $logo = 'D:localhostlogo.jpg';
    foreach( $m as $item){
        $s = new Image_process( $item );
        $s->watermarkImage($logo);//生成水印
        $s->scaleImage(0.8);//生成缩略图
        $s->fixSizeImage(200,false);
        sleep(1);
        echo $m." is done"."<br/>";
    }
    ?>
    

      

     

    以上参考:http://www.oschina.net/code/snippet_163553_37508#55208

  • 相关阅读:
    MySQL删除重复数据
    C#如何实现Object与byte[]的互相转换
    远程桌面连接(转)
    WEB标准学习路程之"CSS":2.字体font
    WEB标准学习路程之"CSS":3.背景Background属性
    WEB标准学习路程之"入门篇":8.XHTML代码规范
    WEB标准学习路程之"CSS":9.常用选择符
    WEB标准学习路程之"CSS":1.什么是样式表
    WEB标准学习路程之"入门篇":9.校验及常见错误
    WEB标准学习路程之"CSS":4.尺寸Dimensions属性
  • 原文地址:https://www.cnblogs.com/coderchuanyu/p/3871845.html
Copyright © 2020-2023  润新知