zoukankan      html  css  js  c++  java
  • php根据图片主要颜色添加相近颜色的水印

                $color = $this->dominant_color($img); //获取图片颜色
                $water = $this->make_watermark_img('水印文字', $color); //生成水印图片
                $this->add_img_water($file_path, $water['url']); //图片打水印
       /**
         * 给图片添加水印
         * @param string $filename 需添加水印图
         * @param string $water 水印图
         * @param string $newname 图片新名称
         */
        public function add_img_water($filename, $water)
        {
            list($f_w, $f_h) = getimagesize($filename);
            list($w_w, $w_h) = getimagesize($water);
            //确定水印起始位置(水印居右下角)
            $pos_x = $f_w - $w_w;
            $pos_y = $f_h - $w_h;
            //创建背景图片的资源
            $back_img = imagecreatefromjpeg($filename);
            //创建水印图片的资源
            $water_img = imagecreatefrompng($water);
            //添加水印
            imagecopy($back_img, $water_img, $pos_x, $pos_y, 0, 0, $w_w, $w_h);
            //保存图片
            imagepng($back_img,$filename);
            return;
        }
    
        /**
         * 获取图片主要颜色
         * @param $image
         * @return array
         */
        public function dominant_color($image)
        {
            $rTotal = $gTotal = $bTotal = $total = 0;
            $type = getimagesize($image);//取得图片的大小,类型等
            if (isset($type['mime']) && $type['mime'] == 'image/webp') {
                $i = imagecreatefromwebp($image);
            }else{
                $i = imagecreatefromstring(file_get_contents($image));
            }
    //        $i      = imagecreatefromjpeg($image);
            for ($x = 0; $x < imagesx($i); $x++) {
                for ($y = 0; $y < imagesy($i); $y++) {
                    $rgb    = imagecolorat($i, $x, $y);
                    $r      = ($rgb >> 16) & 0xFF;
                    $g      = ($rgb >> 8) & 0xFF;
                    $b      = $rgb & 0xFF;
                    $rTotal += $r;
                    $gTotal += $g;
                    $bTotal += $b;
                    $total++;
                }
            }
            $rAverage = round($rTotal / $total);
            $gAverage = round($gTotal / $total);
            $bAverage = round($bTotal / $total);
            return array(
                'r' => $rAverage,
                'g' => $gAverage,
                'b' => $bAverage,
            );
        }
    
        public function make_watermark_img($text, $color)
        {
            $blue = $color['b'];
            $red = $color['r'];
            $green = $color['g'];
            if (strtoupper(substr(PHP_OS,0,3))==='WIN')
            {
                $font = "c:/windows/fonts/SIMHEI.TTF";//字体类型,这里为黑体,
            }else{
                $font = "/usr/share/fonts/simhei.ttf";//字体类型,这里为黑体,
            }
            $text_len = strlen($text) / 3; //显示的文字
            $width = $text_len * 20; //1个字17
    
            $logo = 'uploads/sy.png'; //水印文字图片地址
            $size = 14; //字体大小
            $img = imagecreate($width,24);//创建一个长为x高为y的空白图片
            imagecolorallocate($img,$red,$green,$blue);//设置图片背景颜色,这里背景颜色为#ffffff,也就是白色
    //        imagecolorallocate($img,0xff,0xff,0xff);//设置图片背景颜色,这里背景颜色为#ffffff,也就是白色
            $black=imagecolorallocate($img,100,0x00,0x00);//设置字体颜色,这里为#000000,也就是黑色
            imagettftext($img,$size,0,0,16, $black, $font , $text);//将ttf文字写到图片中
            $watermark_logo = imagepng($img, $logo);//输出图片,输出png使用imagepng方法,输出gif使用imagegif方法
            if (!$watermark_logo) {
                return ['status' => false, 'msg' => '生成水印失败'];
            }
            return ['status' => true, 'url' => $logo];
        }
  • 相关阅读:
    第一百一十一节,JavaScript,BOM浏览器对象模型
    第一百一十节,JavaScript匿名函数和闭包
    第一百零九节,JavaScript面向对象与原型
    第一百零八节,JavaScript,内置对象,Global对象字符串编码解码,Math对象数学公式
    第一百零七节,JavaScript基本包装类型,数据类型的方法
    第一百零六节,JavaScript变量作用域及内存
    第一百零五节,JavaScript正则表达式
    第一百零四节,JavaScript时间与日期
    经典的图片上传并绘制缩略图的类的代码
    ecshop判断搜索引擎是否为蜘蛛
  • 原文地址:https://www.cnblogs.com/bkhdd/p/15745360.html
Copyright © 2011-2022 走看看