/**
* 把图片转换成圆角
* @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;
}

  

php 圆角图片处理的更多相关文章

  1. iOS 图片文件格式判断、圆角图片

    1.圆角图片 // 设置圆形图片(放到分类中使用) - (UIImage *)cutCircleImage { UIGraphicsBeginImageContextWithOptions(self. ...

  2. RoundedBitmapDrawable生成圆角图片

    Bitmap src = BitmapFactory.decodeResource(getResources(), imageId); //获取Bitmap图片 RoundedBitmapDrawab ...

  3. Android BitmapShader 实战 实现圆形、圆角图片

    转载自:http://blog.csdn.net/lmj623565791/article/details/41967509 1.概述 记得初学那会写过一篇博客Android 完美实现图片圆角和圆形( ...

  4. Android实现圆形圆角图片

    本文主要使用两种方法实现图形圆角图片 自定View加上使用Xfermode实现 Shader实现 自定View加上使用Xfermode实现 /** * 根据原图和变长绘制圆形图片 * * @param ...

  5. Android 高级UI设计笔记18:实现圆角图片

    1. 下面我们经常在APP中看到的圆角图片,如下: 再比如:微信聊天会话列表的头像是圆角的. 2. 下面分析一个Github的经典: (1)Github库地址: https://github.com/ ...

  6. 【Android】 图片编辑:创建圆角图片

    创建圆角图片的方式大同小异,最简单的就是 9.png 美工做出来的就是.这种最省事直接设置就可以. 另外一种就是通过裁剪 这里的剪裁指的是依据原图我们自己生成一张新的bitmap,这个时候指定图片的目 ...

  7. Android Xfermode 实战 实现圆形、圆角图片

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42094215,本文出自:[张鸿洋的博客] 1.概述 其实这篇本来准备Androi ...

  8. Android_BitmapShader实现圆形、圆角图片

    转:http://blog.csdn.net/lmj623565791/article/details/41967509,本文出自:[张鸿洋的博客] 1.概述 记得初学那会写过一篇博客Android ...

  9. ps快速删除圆角图片旁白的白色区域方法

    简单实用5招的ps快速删除圆角图片旁白的白色区域方法 1.图像-模式-rgb颜色 2.双击背景取消图层锁定 3.用魔棒工具点击要删除的区域 4.delete删除 5.另存为png图片

  10. CALayer 知识:创建带阴影效果的圆角图片图层和创建自定义绘画内容图层

    效果如下: KMLayerDelegate.h #import <UIKit/UIKit.h> @interface KMLayerDelegate : NSObject @end KML ...

随机推荐

  1. [C++]-string类的常用操作

    代码 #include<iostream> #include<string> #include<algorithm> using namespace std; in ...

  2. 特殊回文数 BASIC-9

    特殊回文数 代码 import java.util.Scanner; /*123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位十进制数, 满足 ...

  3. 不同JDK版本的流异常处理

    1.JDK7以前的流异常try-catch处理 public static void main(String[] args) { FileInputStream fis = null; try { f ...

  4. Java异常处理的两种方式以及自定义异常的使用方法

    异常 就是程序出现了不正常的情况 Error:严重问题,不需要处理 Exception:称为异常类,他表示程序本身可以处理的问题 RuntimeException:在编译期是不检查的,出现问题后,需要 ...

  5. 【Azure 应用服务】App Service For Container 配置Nginx,设置/home/site/wwwroot/目录为启动目录,并配置反向代理

    问题描述 通过Docker Desktop for Linux,配置Nginx镜像后,自定义nginx.conf文件,修改启动目录和对 /out 路径的反向代理到博客园的博文地址 (https://w ...

  6. js函数聚合

    //掺杂类实现聚合(有的时候,我们需要某个或多个类里的一些方法函数) //将要被聚合的函数 var JSON = { toJsonString: function () { var output = ...

  7. git 的指定参考教程

    https://www.runoob.com/git/git-create-repository.html

  8. Qt简单的解析Json数据例子(一)

    要解析的json的格式为: { "rootpath": "001", "usernum": 111, "childdep" ...

  9. 【springcloud】服务熔断与降级(Hystrix)

    转自:https://blog.csdn.net/pengjunlee/article/details/86688858 服务熔断 服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的 ...

  10. [ASP.NET MVC]@Html.ActionLik重载

    一 Html.ActionLink("linkText","actionName") 该重载的第一个参数是该链接要显示的文字,第二个参数是对应的控制器的方法, ...