zoukankan      html  css  js  c++  java
  • php 图片旋转添加水印

     /*
         * 生成水印logo
         * text 水印文字 bigImgPath 背景图
         */
        public static function make_watermark_img($text, $bigImgPath)
        {
            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 * 17; //1个字17
            $logo = 'uploads/'.$text.'.png'; //水印文字图片地址
            $size = 12; //字体大小
            $img = imagecreate($width,24);//创建一个长为x高为y的空白图片
            imagecolorallocate($img,0xff,0xff,0xff);//设置图片背景颜色,这里背景颜色为#ffffff,也就是白色
            $black=imagecolorallocate($img,0x00,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' => '生成水印失败'];
            }
            //图片旋转
            self::flip($logo, $logo, 45);
            //添加水印
            $a = self::add_watermark($logo, $bigImgPath);
            print_r($a);die;
        }
    
        /*
         * 添加水印
         */
        public static function add_watermark($logo, $bigImgPath)
        {
    
            $im = imagecreatefromstring(file_get_contents($bigImgPath));
            //获取水印源
            $watermark = imagecreatefromstring(file_get_contents($logo));
            //获取图、水印 宽高类型
            list($bgWidth, $bgHight, $bgType) = getimagesize($bigImgPath);
            list($logoWidth, $logoHight, $logoType) = getimagesize($logo);
            //定义平铺数据
            $x_length = $bgWidth - 10; //x轴总长度
            $y_length = $bgHight - 10; //y轴总长度
            //创建透明画布 伪白色
            $opacity = 30;
            $w = imagesx($watermark);
            $h = imagesy($watermark);
            $cut = imagecreatetruecolor($w,$h);
            $white = imagecolorallocatealpha($cut, 255,255,255,0);
            imagefill( $cut, 0, 0, $white );
            //整合水印
            imagecopy($cut, $watermark, 0, 0, 0, 0, $w, $h);
            //循环平铺水印
            for ($x = 0; $x < $x_length; $x++)
            {
                for ($y = 0; $y < $y_length; $y++) {
                    imagecopymerge($im, $cut, $x, $y, 0, 0, $logoWidth, $logoHight, $opacity);
                    $y += $logoHight;
                }
                $x += $logoWidth;
            }
            header("Content-type:image/png");
            // imagejpeg 的第二个参数不传, 默认是显示图片
            $keys = array_merge(range(0, 9), range('a', 'z'));
            $key = '';
            for ($i = 0; $i < 15; $i++) {
                $key .= $keys[array_rand($keys)];
            }
            $fileName = $key.time().'.png';
            $file_path = 'uploads/'.$fileName;
            $img =  imagepng($im);
            print_r($img);die;
        }
    
        /**
         * @param $filename // 图片原始地址
         * @param $src // 旋转后图片保存地址
         * @param int $degrees // 旋转角度
         * @return bool
         */
        public static function flip($filename,$src,$degrees = 45)
    
        {
            //读取图片
    
            $data = @getimagesize($filename);
    
            if($data==false)return false;
    
            //读取旧图片
    
            switch ($data[2]) {
                case 1:
    
                    $src_f = imagecreatefromgif($filename);break;
    
                case 2:
    
                    $src_f = imagecreatefromjpeg($filename);break;
    
                case 3:
    
                    $src_f = imagecreatefrompng($filename);break;
    
            }
    
            if($src_f=="")return false;
    
            $rotate = @imagerotate($src_f, $degrees,0);
    
            if(!imagejpeg($rotate,$src,100))return false;
    
            @imagedestroy($rotate);
            return true;
        }
  • 相关阅读:
    ubuntu 可以用 root 登录 ftp
    正则表达式 匹配中文,英文字母和数字及_的写法!同时控制长度
    HttpUtility.UrlEncode,Server.UrlEncode 的区别
    HttpUtility.UrlEncode 方法 (String) 对 URL 字符串进行编码 NET Framework 4.6 and 4.5
    C# 多线程task
    NET Framework 4.5 有更加简便的方法 Task.Run()
    Tuple<int, int> Dictionary<string, object>妙用
    sha1加密
    MD5和sha1加密算法--散列加密技术 MD5:128bit的大整数
    3、Task.Factory属性
  • 原文地址:https://www.cnblogs.com/bkhdd/p/15623301.html
Copyright © 2011-2022 走看看