zoukankan      html  css  js  c++  java
  • php 圆角图片处理

       /**
         * 把图片转换成圆角
         * @param string $imgpath
         * @param int $radius
         * @return resource
         */
        public function radius_img_url($imgpath = './t.png', $radius = 15) {
            $ext     = pathinfo($imgpath);
            $src_img = null;
            switch ($ext['extension']) {
                case 'jpg':
                    $src_img = imagecreatefromjpeg($imgpath);
                    break;
                case 'png':
                    $src_img = imagecreatefrompng($imgpath);
                    break;
            }
            $wh = getimagesize($imgpath);
            $w  = $wh[0];
            $h  = $wh[1];
            return $this->radius_img($src_img, $w,$h, $radius);
        }
        public function radius_img($src_img, $width,$height, $radius = 15) {
    
            $w  = &$width;
            $h  = &$height;
            // $radius = $radius == 0 ? (min($w, $h) / 2) : $radius;
            $img = imagecreatetruecolor($w, $h);
            //这一句一定要有
            imagesavealpha($img, true);
            //拾取一个完全透明的颜色,最后一个参数127为全透明
            $bg = imagecolorallocatealpha($img, 255, 255, 255, 127);
            imagefill($img, 0, 0, $bg);
            $r = $radius; //圆 角半径
            for ($x = 0; $x < $w; $x++) {
                for ($y = 0; $y < $h; $y++) {
                    $rgbColor = imagecolorat($src_img, $x, $y);
                    if (($x >= $radius && $x <= ($w - $radius)) || ($y >= $radius && $y <= ($h - $radius))) {
                        //不在四角的范围内,直接画
                        imagesetpixel($img, $x, $y, $rgbColor);
                    } else {
                        //在四角的范围内选择画
                        //上左
                        $y_x = $r; //圆心X坐标
                        $y_y = $r; //圆心Y坐标
                        if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
                            imagesetpixel($img, $x, $y, $rgbColor);
                        }
                        //上右
                        $y_x = $w - $r; //圆心X坐标
                        $y_y = $r; //圆心Y坐标
                        if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
                            imagesetpixel($img, $x, $y, $rgbColor);
                        }
                        //下左
                        $y_x = $r; //圆心X坐标
                        $y_y = $h - $r; //圆心Y坐标
                        if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
                            imagesetpixel($img, $x, $y, $rgbColor);
                        }
                        //下右
                        $y_x = $w - $r; //圆心X坐标
                        $y_y = $h - $r; //圆心Y坐标
                        if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
                            imagesetpixel($img, $x, $y, $rgbColor);
                        }
                    }
                }
            }
            return $img;
        }
    

      直接在背景图片上面画圆

        /**
         * 直接把圆角图片画在背景图片上
         * @param $bg_img 背景图片
         * @param $x 背景图片位置
         * @param $y 背景图片位置
         * @param $src_img 要画的圆角的图片
         * @param $width 圆角图片的尺寸
         * @param $height 圆角图片的尺寸
         * @param int $radius 圆角尺寸
         * @return resource
         */
        public static function radius_img_bg($bg_img, $x, $y, $src_img, $width,$height, $radius = 15) {
            $ob_x = $x;
            $ob_y = $y;
            $max_x  = $ob_x + $width;
            $max_y  = $ob_y + $height;
            $start_y = $y;
            // $radius = $radius == 0 ? (min($w, $h) / 2) : $radius;
            $r = $radius; //圆 角半径
            for ($x; $x < $max_x; $x++) {
                for ($y=$start_y; $y < $max_y; $y++) {
                    $rgbColor = imagecolorat($src_img, $x-$ob_x, $y-$ob_y);
                    if (
                        ($x >= $ob_x + $radius && $x <= ($max_x - $radius)) ||
                        ($y >= $ob_y + $radius && $y <= ($max_y - $radius))
                    ) {
                        //不在四角的范围内,直接画
                        imagesetpixel($bg_img, $x, $y, $rgbColor);
                    } else {
                        //在四角的范围内选择画
                        //上左
                        $y_x = $ob_x + $r; //圆心X坐标
                        $y_y = $ob_y + $r; //圆心Y坐标
                        if ((pow($x - $y_x, 2) + pow($y - $y_y, 2) <= pow($r,2))) {
                            imagesetpixel($bg_img, $x, $y, $rgbColor);
                        }
                        //上右
                        $y_x = $max_x - $r; //圆心X坐标
                        $y_y = $ob_y + $r; //圆心Y坐标
                        if ((pow($x - $y_x, 2) + pow($y -$y_y, 2) <= pow($r,2))) {
                            imagesetpixel($bg_img, $x, $y, $rgbColor);
                        }
                        //下左
                        $y_x = $ob_x + $r; //圆心X坐标
                        $y_y = $max_y - $r; //圆心Y坐标
                        if (pow($x - $y_x,2) + pow($y - $y_y,2) <= pow($r, 2)) {
                            imagesetpixel($bg_img, $x, $y, $rgbColor);
                        }
                        //下右
                        $y_x = $max_x - $r; //圆心X坐标
                        $y_y = $max_y - $r; //圆心Y坐标
                        if (pow($x - $y_x,2) + pow($y - $y_y,2) <= pow($r, 2)) {
                            imagesetpixel($bg_img, $x, $y, $rgbColor);
                        }
                    }
                }
            }
            return $bg_img;
        }
    

      

  • 相关阅读:
    对QR码的初步研究(附:在博客里放上博客文章的QR码)
    EonerCMS——做一个仿桌面系统的CMS(十四)
    终于病了
    【HoorayOS】开源的Web桌面应用框架(第二版 v120311)
    【HoorayOS】开源的Web桌面应用框架——EonerCMS更名为HoorayOS
    一句代码实现 HTML5 语音搜索
    HTML5 拖拽上传图片实例
    【HoorayOS】开源的Web桌面应用框架
    【HoorayOS】开源的Web桌面应用框架(文件夹功能分析)
    从源码分析常见的基于Array的数据结构动态扩容机制
  • 原文地址:https://www.cnblogs.com/tu6ge/p/9869531.html
Copyright © 2011-2022 走看看