• 南通海门开展10个方面19项安全生产专项整治 2019-08-18
  • 晋中交警严查“四类车辆”违法行为 2019-08-18
  • 中国端午,世界节日!看“世界朋友圈”如何过端午 2019-08-17
  • 回复@缘起的心星:你肯定是五级! 2019-08-03
  • 世界社会主义运动的重要篇章 2019-07-04
  • “价值由劳动创造≠劳动必然创造价值”错;“价值由劳动创造=劳动必然创造价值”对。 2019-07-02
  • “超级海绵”从沙漠空气中“吸出”水--旅游频道 2019-06-20
  • 中国经济充当了世界经济发展的火车头。但是,作为世界经济火车头的中国,在世界主要经济体股市都走牛的情况下,为何熊途漫漫?这种不正常的现象,背后是我们资本市场的投融 2019-06-20
  • 中央军委印发《传承红色基因实施纲要》 2019-06-05
  • 粤港澳大湾区未来有望成为世界第五大经济体 2019-05-22
  • 伊朗真的不使用美元了 特朗普急的直跳脚! 2019-05-14
  • 鹏城展翅再高飞(壮阔东方潮 奋进新时代——庆祝改革开放40年) 2019-05-05
  • “十八兄弟会”,横行乡里十几年……—qhchang的博客—强国博客—人民网 2019-05-05
  • 三个版本的小米8发布,都有哪些区别? 2019-05-02
  • 华北难停"烤箱"模式局地气温冲40℃ 华南雨水频繁 2019-04-30
  • 图像处理类:

    功能:实现图片的多位置加水印,随机加水印,图片等比缩放。

    <?php
    class image{

        //成员属性
        private $path;//传入的路径

        //初始化构造方法,默认为当前文件夹的路径
        public function __construct($path='./'){
            $this->path=rtrim($path,'/').'/';//去掉路径右边的/ 然后添加一个反斜杠,为了防止误操作
        }
        //定义一个水印方法,参数有背景图水印图,水印位置,透明度,前缀
        public function water($background,$water,$pos=0,$pol=100,$prefix='wa_'){
            $background=$this->path.$background;//将图片与路径拼接
            $water=$this->path.$water;
            if(file_exists($background) && file_exists($water)){//判断水印图片与背景图片是否存在
                $backInfo=self::getImageInfo($background);//获取图片的信息
                $waterInfo=self::getImageInfo($water);
                if(!self::checkSize($backInfo,$waterInfo)){//判断水印图是否大于背景图
                    echo '水印图片大于背景图片';
                    return false;
                }
               $position=self::getPosition($backInfo,$waterInfo,$pos);//获得图片位置    
               if(!$backRes = self::openImg($background,$backInfo['type'])){//打开图片
                    echo '背景图片打开失败';
                    return false;
                }
                if(!$waterRes=self::openImg($water,$waterInfo['type'])){
                    echo '水印图片打开失败';
                    return false;
                }
                $newRes=self::mergeImg($backRes,$waterRes,$position,$waterInfo,$pol);//合并图片
                if($path=self::save($this->path,$newRes,$backInfo,$prefix)){//保存图片
                    self::des($backRes);
                    self::des($waterRes);
                    return false;
                }else{
                    echo '保存图片失败';
                    return false;
                }
            }else{
                echo '背景图片或者水印图片没有找到';
                return false;
            }
        }
        //合并图片的方法
        static private function mergeImg($b,$w,$p,$info,$pol){
            imagecopymerge($b,$w,$p['x'],$p['y'],0,0,$info['width'],$info['height'],$pol);
            return $b;
        }

        //获得图片属性的方法
        static private function getImageInfo($img){
            $info=getimagesize($img);//使用获得图片信息的函数

            //将所有的信息放入一个数组
            $date['width']=$info[0];
            $date['height']=$info[1];
            $date['type']=$info['mime'];
            $date['name']=basename($img);//使用函数返回路径中的文件名部分
            return $date;
        }

        //打开图片的方法
        static private function openImg($img,$type){
            switch($type){
                case 'image/jpeg':
                case 'image/jpg':
                case 'image/pjpeg':
                    $res=imagecreatefromjpeg($img);
                    break;
                case 'image/png':
                case 'image/x-png':
                    $res=imagecreatefrompng($img);
                    break;
                case 'image.gif':
                    $res=imagecreatefromgif($img);
                    break;
                case 'image/wbmp':
                    $res=imagecreatefromwbmp($img);
                    break;
                default:
                    $res=false;
            }
            return $res;
        }

    /*========================== 图片的等比缩放方法============================*/

     public function thumb($background,$width,$height,$prefix='th_'){
            $background=$this->prefix.$background;
            if(!file_exists($background)){
                echo '背景图片不存在';
                return false;
            }
            $backInfo=self::getImageInfo($background);

            $newSize=self::getNewSize($width,$height,$backInfo);

            $res=self::openImg($background,$backInfo['type']);

            $newRes=self::kidOfImage($res,$newSize,$backInfo);

            if($path=self::save($this->path,$newRes,$backInfo,$prefix)){
                self::des($newRes);
                return $path;
            }

        }

        static private function kidOfImage($srcImg,$size, $imgInfo){
            $newImg = imagecreatetruecolor($size["width"], $size["height"]);
            $otsc = imagecolortransparent($srcImg);
            if( $otsc >= 0 && $otsc < imagecolorstotal($srcImg)) {
                $transparentcolor = imagecolorsforindex( $srcImg, $otsc );
                $newtransparentcolor = imagecolorallocate(
                $newImg,
                $transparentcolor['red'],
                $transparentcolor['green'],
                $transparentcolor['blue']
                );

                imagefill( $newImg, 0, 0, $newtransparentcolor );
                imagecolortransparent( $newImg, $newtransparentcolor );
            }
            imagecopyresized( $newImg, $srcImg, 0, 0, 0, 0, $size["width"], $size["height"],
    $imgInfo["width"], $imgInfo["height"] );

            imagedestroy($srcImg);
            return $newImg;
        }

        static private function getNewSize($width, $height,$imgInfo){

            $size["width"]=$imgInfo["width"]; //将原图片的宽度给数组中的$size["width"]

            $size["height"]=$imgInfo["height"];//将原图片的高度给数组中的$size["height"]

            if($width < $imgInfo["width"]){
                $size["width"]=$width;//缩放的宽度如果比原图小才重新设置宽度
            }

            if($width < $imgInfo["height"]){
                $size["height"]=$height;//缩放的高度如果比原图小才重新设置高度
            }

            if($imgInfo["width"]*$size["width"] > $imgInfo["height"] * $size["height"]){
                $size["height"]=round($imgInfo["height"]*$size["width"]/$imgInfo["width"]);
            }else{
                $size["width"]=round($imgInfo["width"]*$size["height"]/$imgInfo["height"]);
            }

            return $size;
        }
    /*=============================图片缩放结束==============================*/
        //获得水印图片位置的方法
        static private function getPosition($b,$w,$p){

            switch($p){
                case 1://在x为0 y为 0 的情况
                    $x=0;
                    $y=0;
                break;
                case 2://x轴在中间 Y为0
                    $x=ceil(($b['width']-$w['width'])/2);
                    $y=0;
                break;
                case 3:
                    $x=$b['width']-$w['width'];//背景宽-水印宽
                    $y=0;
                break;
                case 4:
                    $x=0;
                    $y=ceil(($b['height']-$w['height'])/2);
                break;
                case 5:
                    $x=ceil(($b['width']-$w['width'])/2);
                    $y=ceil(($b['height']-$w['height'])/2);
                    break;
                case 6:
                    $x=$b['width']-$w['width'];
                    $y=ceil(($b['height']-$w['height'])/2);
                    break;
                case 7:
                    $x=0;
                    $y=$b['height']-$w['height'];//背景高-水印高
                    break;
                case 8:
                    $x=ceil(($b['width']-$w['width'])/2);
                    $y=$b['height']-$w['height'];
                    break;

                case 9:
                    $x=$b['width']-$w['width'];
                    $y=$b['height']-$w['height'];
                    break;
                default:
                    $x=mt_rand(0,$b['width']-$w['width']);
                    $y=mt_rand(0,$b['height']-$w['height']);
                    break;
            }
            //我们将图片的位置以数组的形式返回
         return array('x'=>$x,'y'=>$y);
        }

        //检测水印图片的大小是否大于背景图,填入背景图与水印图的INFO
        static function checkSize($b,$m){
            if($b['width']<=$w['width'] || $b['height']<=$w['height']){
                //水印图片大或者于背景图片返回假
                return false;
            }else{
                //否则返回真
                return true;
            }
        }
        //保存图片的方法
        static private function save($path,$res,$info,$prefix){
            $path=$path.$prefix.$info['name'];
             switch($info['type']){
                case 'image/jpeg':
                case 'image/jpg':
                case 'image/pjpeg':
                        $res=imagejpeg($res,$path);
                        break;
                case 'image/png':
                case 'image/x-png':
                        $res=imagejpeg($res,$path);
                        break;
                case 'image.gif':
                        $res=imagegif($res,$path);
                        break;
                case 'image/wbmp':
                        $res=imagewbmp($res,$path);
                        break;
            }
            return $path;
        }

        //销毁图片的方法
        static private function des($res){
            imagedestroy($res);
        }
    }
    ?>


    云南然成科技有限公司是一家本土的浙江11选5前二直选走势图,公司成立于2015年初,2017年获得云南省科技厅、省财政厅、省国税局、地税局等机构认定的高新技术企业。公司定位于高端网站设计、系统开发、APP开发、微信公众号、微信小程序开发。拥有多个软著权,公司先后为多家事业单位提供服务,比如会泽文化馆、宣威文化馆、中科院昆明植物研究所等。其中中国科学院昆明植物研究所已经进行了长达4年的合作,并且还持续合作中!

    浙江11选5基本走势图:中国 · 云南 · 昆明

    然成科技微信二维码
    扫一扫关注然成微信

    浙江11选5前二直选走势图 www.whjl8.com 电 话:0871-67333261

    办公室:云南省昆明市盘龙区白云路北京路花苑3幢403(地铁2号线白云路站)

  • 南通海门开展10个方面19项安全生产专项整治 2019-08-18
  • 晋中交警严查“四类车辆”违法行为 2019-08-18
  • 中国端午,世界节日!看“世界朋友圈”如何过端午 2019-08-17
  • 回复@缘起的心星:你肯定是五级! 2019-08-03
  • 世界社会主义运动的重要篇章 2019-07-04
  • “价值由劳动创造≠劳动必然创造价值”错;“价值由劳动创造=劳动必然创造价值”对。 2019-07-02
  • “超级海绵”从沙漠空气中“吸出”水--旅游频道 2019-06-20
  • 中国经济充当了世界经济发展的火车头。但是,作为世界经济火车头的中国,在世界主要经济体股市都走牛的情况下,为何熊途漫漫?这种不正常的现象,背后是我们资本市场的投融 2019-06-20
  • 中央军委印发《传承红色基因实施纲要》 2019-06-05
  • 粤港澳大湾区未来有望成为世界第五大经济体 2019-05-22
  • 伊朗真的不使用美元了 特朗普急的直跳脚! 2019-05-14
  • 鹏城展翅再高飞(壮阔东方潮 奋进新时代——庆祝改革开放40年) 2019-05-05
  • “十八兄弟会”,横行乡里十几年……—qhchang的博客—强国博客—人民网 2019-05-05
  • 三个版本的小米8发布,都有哪些区别? 2019-05-02
  • 华北难停"烤箱"模式局地气温冲40℃ 华南雨水频繁 2019-04-30
  • 六合透码中心 广东彩票36选7开奖 5月20号福彩 贵州11选五5开奖结果 188排球比分 彩客网比分电脑版 福彩快乐10分开奖查询 福建快三app免费下载 北京十一选五中奖结果 体彩顶呱刮中奖诀窍 3d直选 北京赛车现场直播 陕西11选五走势图陕西快乐 合肥市彩票中心 新时时彩后二杀号