最近需要在图片中画椭圆,但是gd库函数有矩形、圆弧、椭圆……就是没有圆角矩形

然后在网上找的画圆角矩形的方法试了一些,大都不好用

在找的过程中参考了别人的一些实现方法,于是我看着文档实现了一个自己的画圆角矩形

效果图

两个圆角矩形.png

核心代码

/**

* 创建圆角矩形

*

* @param [object] $imageObj [imagecreatefromjpeg() 返回一图像标识符]

* @param [int] $arcRec_SX [圆角矩形开始的X坐标]

* @param [int] $arcRec_SY [圆角矩形开始的Y坐标]

* @param [int] $arcRec_EX [圆角矩形结束的X坐标]

* @param [int] $arcRec_EY [圆角矩形结束的Y坐标]

* @param [int] $redius [圆角矩形的圆角弧度]

* @param [] $color [php gd库里创建的颜色对象]

*

* @return [] [没有返回值]

*/

function arcRec($imageObj, $arcRec_SX, $arcRec_SY, $arcRec_EX, $arcRec_EY, $redius, $color)

{

// $arcRec_SX = 50; //开始点X坐标

// $arcRec_SY = 50; //开始点Y坐标

// $arcRec_EX = 500; //结束点X坐标

// $arcRec_EY = 500; //结束点Y坐标

// $redius = 50; //圆角半径

$arcRec_W = $arcRec_EX - $arcRec_SX;

$arcRec_H = $arcRec_EY - $arcRec_SY;

imagefilledrectangle($imageObj, $arcRec_SX + $redius, $arcRec_SY, $arcRec_SX + ($arcRec_W - $redius), $arcRec_SY + $redius, $color); //矩形一

imagefilledrectangle($imageObj, $arcRec_SX, $arcRec_SY + $redius, $arcRec_SX + $arcRec_W, $arcRec_SY + ($arcRec_H - ($redius * 1)), $color);//矩形二

imagefilledrectangle($imageObj, $arcRec_SX + $redius, $arcRec_SY + ($arcRec_H - ($redius * 1)), $arcRec_SX + ($arcRec_W - ($redius * 1)), $arcRec_SY + $arcRec_H, $color);//矩形三

imagefilledarc($imageObj, $arcRec_SX + $redius, $arcRec_SY + $redius, $redius * 2, $redius * 2, 180, 270, $color, IMG_ARC_PIE); //四分之一圆 - 左上

imagefilledarc($imageObj, $arcRec_SX + ($arcRec_W - $redius), $arcRec_SY + $redius, $redius * 2, $redius * 2, 270, 360, $color, IMG_ARC_PIE); //四分之一圆 - 右上

imagefilledarc($imageObj, $arcRec_SX + $redius, $arcRec_SY + ($arcRec_H - $redius), $redius * 2, $redius * 2, 90, 180, $color, IMG_ARC_PIE); //四分之一圆 - 左下

imagefilledarc($imageObj, $arcRec_SX + ($arcRec_W - $redius), $arcRec_SY + ($arcRec_H - $redius), $redius * 2, $redius * 2, 0, 90, $color, IMG_ARC_PIE); //四分之一圆 - 右下

}

实现原理

如图

用ps临时做的

把一个椭圆拆分为两种图形,这两种图形是gd库函数支持画的

分为矩形和椭圆弧(上下各两个,中间一个大的矩形,四角是椭圆弧)

这样只要我们计算好了每个点的位置和比例,就可以拼出一个圆角矩形了

实战

新建一个index.php文件,把test.jpg文件放到php文件的同级目录下(可以放在其他目录,这里是为了方便讲解),目录结构图大概这样

目录结构图

在index.php中写代码

$imageFile = './test.jpg'; //图片文件路径

$imageObj = imagecreatefromjpeg($imageFile); //创建图像资源,返回标识符

$red = imagecolorallocate($imageObj, 255, 0, 0); //定义颜色(红色

$blue = imagecolorallocate($imageObj, 0, 0, 255); //定义颜色(蓝色

$white_tra = imagecolorallocatealpha($imageObj, 255, 255, 255, 30); //定义颜色(白色)(不透明度:30[不透明度取值范围0 - 127,0:不透明,127:全透明])

代码讲解:

因为我们操作的是jpg图片所以这里用imagecreatefromjpeg打开,如果操作png、bmp、webp可以用对应的函数(我只测试了操作jpg图片,其他的没有测试)

imagecolorallocate和imagecolorallocatealpha在文档中的解释是为图像分配颜色,并返回一个标识符

imagecolorallocatealpha是支持调整不透明度的

函数文档

imagecreatefromjpeg

imagecolorallocate

imagecolorallocatealpha

把核心代码放进来并调用

arcRec($imageObj, $arcRec_SX, $arcRec_SY, $arcRec_EX, $arcRec_EY, $redius, $color);

imageobj 这是在第二步中由imagecreatefromjpeg返回的标识符

arcRec_SX 这是圆角矩形左上角的X坐标

arcRec_SY 这是圆角矩形左上角的Y坐标

arcRec_EX 这是圆角矩形右下角X坐标

arcRec_EY 这是圆角矩形右下角的Y坐标

redius 这是圆角矩形的不透明度(取值范围 0 - 127,0:不透明 127:全透明)

color 这是第二步中用imagecolorallocate或者imagecolorallocatealpha创建图像颜色返回的标识符

最后把图像输出

imagepng($imageObj, 'uaivg.png');

最终的index.php文件的代码为

$imageFile = './test.jpg'; //图片文件路径

$imageObj = imagecreatefromjpeg($imageFile); //创建图像资源,返回标识符

$red = imagecolorallocate($imageObj, 255, 0, 0); //定义颜色(红色

$blue = imagecolorallocate($imageObj, 0, 0, 255); //定义颜色(蓝色

$white_tra = imagecolorallocatealpha($imageObj, 255, 255, 255, 30); //定义颜色(白色)(不透明度:30[不透明度取值范围0 - 127,0:不透明,127:全透明])

imagepng($imageObj, 'uaivg.png');

arcRec($imageObj, 100, 100, 150, 150, 5, $red);

arcRec($imageObj, 200, 200, 450, 350, 50, $blue);

imagepng($imageObj, 'uaivg.png');

/**

* 创建圆角矩形

*

* @param [object] $imageObj [imagecreatefromjpeg() 返回一图像标识符]

* @param [int] $arcRec_SX [圆角矩形开始的X坐标]

* @param [int] $arcRec_SY [圆角矩形开始的Y坐标]

* @param [int] $arcRec_EX [圆角矩形结束的X坐标]

* @param [int] $arcRec_EY [圆角矩形结束的Y坐标]

* @param [int] $redius [圆角矩形的圆角弧度]

* @param [] $color [php gd库里创建的颜色对象]

*

* @return [] [没有返回值]

*/

function arcRec($imageObj, $arcRec_SX, $arcRec_SY, $arcRec_EX, $arcRec_EY, $redius, $color)

{

// $arcRec_SX = 50; //开始点X坐标

// $arcRec_SY = 50; //开始点Y坐标

// $arcRec_EX = 500; //结束点X坐标

// $arcRec_EY = 500; //结束点Y坐标

// $redius = 50; //圆角半径

$arcRec_W = $arcRec_EX - $arcRec_SX;

$arcRec_H = $arcRec_EY - $arcRec_SY;

imagefilledrectangle($imageObj, $arcRec_SX + $redius, $arcRec_SY, $arcRec_SX + ($arcRec_W - $redius), $arcRec_SY + $redius, $color); //矩形一

imagefilledrectangle($imageObj, $arcRec_SX, $arcRec_SY + $redius, $arcRec_SX + $arcRec_W, $arcRec_SY + ($arcRec_H - ($redius * 1)), $color);//矩形二

imagefilledrectangle($imageObj, $arcRec_SX + $redius, $arcRec_SY + ($arcRec_H - ($redius * 1)), $arcRec_SX + ($arcRec_W - ($redius * 1)), $arcRec_SY + $arcRec_H, $color);//矩形三

imagefilledarc($imageObj, $arcRec_SX + $redius, $arcRec_SY + $redius, $redius * 2, $redius * 2, 180, 270, $color, IMG_ARC_PIE); //四分之一圆 - 左上

imagefilledarc($imageObj, $arcRec_SX + ($arcRec_W - $redius), $arcRec_SY + $redius, $redius * 2, $redius * 2, 270, 360, $color, IMG_ARC_PIE); //四分之一圆 - 右上

imagefilledarc($imageObj, $arcRec_SX + $redius, $arcRec_SY + ($arcRec_H - $redius), $redius * 2, $redius * 2, 90, 180, $color, IMG_ARC_PIE); //四分之一圆 - 左下

imagefilledarc($imageObj, $arcRec_SX + ($arcRec_W - $redius), $arcRec_SY + ($arcRec_H - $redius), $redius * 2, $redius * 2, 0, 90, $color, IMG_ARC_PIE); //四分之一圆 - 右下

}

TIPS

核心代码中注释的代码是测试的时候写的

这篇文章中讲解的调用方法中的参数是传圆角矩形左上角和右下角的坐标

改一改代码可以改成传圆角矩形左上角的坐标和圆角矩形的宽高来进行绘制

19.3.21晚更新 改好了

/**

* 创建圆角矩形

*

* @param [object] $imageObj [imagecreatefromjpeg() 返回一图像标识符]

* @param [int] $arcRec_SX [圆角矩形开始的X坐标]

* @param [int] $arcRec_SY [圆角矩形开始的Y坐标]

* @param [int] $arcRec_W [圆角矩形的宽度]

* @param [int] $arcRec_H [圆角矩形的高度]

* @param [int] $redius [圆角矩形的圆角弧度]

* @param [] $color [php gd库里创建的颜色对象]

*

* @return [] [没有返回值]

*/

function arcRec($imageObj, $arcRec_SX, $arcRec_SY, $arcRec_W, $arcRec_H, $redius, $color)

{

// $arcRec_SX = 50; //开始点X坐标

// $arcRec_SY = 50; //开始点Y坐标

// $arcRec_EX = 500; //结束点X坐标

// $arcRec_EY = 500; //结束点Y坐标

// $redius = 50; //圆角半径

//$arcRec_W = $arcRec_EX - $arcRec_SX;

//$arcRec_H = $arcRec_EY - $arcRec_SY;

$arcRec_EX = $arcRec_SX + $arcRec_W;

$arcRec_EY = $arcRec_SY + $arcRec_H;

imagefilledrectangle($imageObj, $arcRec_SX + $redius, $arcRec_SY, $arcRec_SX + ($arcRec_W - $redius), $arcRec_SY + $redius, $color); //矩形一

imagefilledrectangle($imageObj, $arcRec_SX, $arcRec_SY + $redius, $arcRec_SX + $arcRec_W, $arcRec_SY + ($arcRec_H - ($redius * 1)), $color);//矩形二

imagefilledrectangle($imageObj, $arcRec_SX + $redius, $arcRec_SY + ($arcRec_H - ($redius * 1)), $arcRec_SX + ($arcRec_W - ($redius * 1)), $arcRec_SY + $arcRec_H, $color);//矩形三

imagefilledarc($imageObj, $arcRec_SX + $redius, $arcRec_SY + $redius, $redius * 2, $redius * 2, 180, 270, $color, IMG_ARC_PIE); //四分之一圆 - 左上

imagefilledarc($imageObj, $arcRec_SX + ($arcRec_W - $redius), $arcRec_SY + $redius, $redius * 2, $redius * 2, 270, 360, $color, IMG_ARC_PIE); //四分之一圆 - 右上

imagefilledarc($imageObj, $arcRec_SX + $redius, $arcRec_SY + ($arcRec_H - $redius), $redius * 2, $redius * 2, 90, 180, $color, IMG_ARC_PIE); //四分之一圆 - 左下

imagefilledarc($imageObj, $arcRec_SX + ($arcRec_W - $redius), $arcRec_SY + ($arcRec_H - $redius), $redius * 2, $redius * 2, 0, 90, $color, IMG_ARC_PIE); //四分之一圆 - 右下

}

php 图片 圆角,php使用gd库在图片中画圆角矩形相关推荐

  1. php gd 圆角,php使用gd库在图片中画圆角矩形

    最近需要在图片中画椭圆,但是gd库函数有矩形.圆弧.椭圆--就是没有圆角矩形 然后在网上找的画圆角矩形的方法试了一些,大都不好用 在找的过程中参考了别人的一些实现方法,于是我看着文档实现了一个自己的画 ...

  2. php gd库 图片水印,php使用GD库实现文字图片水印及缩略图教程

    我们要使用gd库就必须先打开gd库,具体如下 Windows下开启PHP的GD库支持 找到php.ini,打开内容,找到: ;extension=php_gd2.dll 把最前面的分号";& ...

  3. PHP用gd库给图片添加水印,php用GD库给图片添加水印

    php用GD库给图片添加文字水印,整个代码比较简单,DEMO如下: /*打开图片*/ //1.配置图片路径 $src = "aeroplane.jpg"; //2.获取图片信息 $ ...

  4. php gd图片验证,php笔记之GD库图片创建/简单验证码

    燕十八 公益PHP培训 课堂地址:YY频道88354001 学习社区:www.zixue.it php画图:比如说验证码,缩略图,加水印都要用到GD库,所以要开启gd2库,才能用 首先找到php.in ...

  5. php GD库的使用

    两大功能:自己画,对于原有图片改变 PHP中GD库的使用 PHP 不仅限于只产生 HTML 的输出,还可以创建及操作多种不同格式的图像文件.PHP提供了一些内置的图像信息函数,也可以使用GD函数库创建 ...

  6. php中gd库的使用,php GD库的使用

    两大功能:自己画,对于原有图片改变 PHP中GD库的使用 PHP 不仅限于只产生 HTML 的输出,还可以创建及操作多种不同格式的图像文件.PHP提供了一些内置的图像信息函数,也可以使用GD函数库创建 ...

  7. php的gd库处理大的图片,PHP的gd库处理图片

    gd库为图片加文字水印和图片输出 $number = $result['certno'];//设置水印内容 $file = './Uploads/certs/' . $number . '.jpg'; ...

  8. php 利用GD库将正方形图片变成圆形

    当我们获取到微信头像时,我们抓取下来会发现是正方形,但是现实中我们一般都是用圆形的. 以下我将介绍用php 原生GD库,将图片抓取下来后切成圆角,其实代码很简单,所以就直接是上代码了 <?php ...

  9. php GD库实现图片合并、文本居中 案例:生成分享海报

    因有需求要做到用php服务端去生成分享海报,并要求把头像.文字.以及二维码跟海报背景图合并,所以研究了一下php的GD库来实现该需求 本次用到的函数介绍 getimagesize 获取图片的宽高 im ...

  10. php 将图片截取成3张,【php】php gd库怎么把一个图片裁剪成圆形的

    微信的头像现在要加水印到一张图片上 弄成 圆形的 怎么裁剪呢 Imagick提供的有 gd库 怎么做呢 因为要在微信中生成这个图片发送给用户 所以必须是生成这样的图片的 css的border-radi ...

最新文章

  1. java app上传图片接口_接口app 接口中上传 图片
  2. [Win] 利用Memory DC抽取EXE的图标并保存为BMP文件
  3. Redis集群版在Java中的应用
  4. 考研数据结构--排序汇总(自用)
  5. 目标跟踪算法的分类(二)
  6. 互联网介入对安防行业的影响
  7. apache 网页301重定向、自定义400/403/404/500错误页面
  8. 加密狗工作原理和破解方法简介
  9. CentOS7网卡驱动安装过程
  10. Python进阶——自省
  11. apk编辑器android源码,apk编辑器电脑版_apk编辑器电脑版下载[apk编译]- 下载之家
  12. 273222-06-3,(2S,4R)-Boc-4-amino-1-Fmoc-pyrrolidine-2-carboxylic acid,(2S,4R)-Fmoc-4-叔丁氧羰基氨基吡咯烷-2-甲酸
  13. 护眼灯对孩子眼睛好吗?盘点最好的儿童护眼灯品牌
  14. Hybrid端口的工作原理
  15. 如何配置NAT Server?
  16. char和nchar,varchar和nvarchar 之间的区别
  17. 《从菜鸟到大师-杨老师课程笔记》Python工程师之 01
  18. 后端返回422处理过程
  19. Win11没有本地用户和组怎么解决
  20. synergy配置问题

热门文章

  1. Windows 10搭建FTP服务器
  2. 如何在官网验证cka证书
  3. 更精确的新旧中国居民身份证号码验证算法
  4. EXCEL如何将一列转为一行
  5. 诛仙mysql数据库清空_数据库管理,启动命令,输入密码,用户名,虚拟机诛仙zx1324-1345一键镜像端、纯端kfvip - Welcome to XiongTianQi.CN...
  6. 远程访问openwrt路由器+配置动态DNS
  7. 华为云服务器 登录与配置 Mysql
  8. linux无线网卡速度慢,Linux如何解决英特尔无线网卡WiFi网速慢、WiFi蓝牙无法共存等问题...
  9. 中国(西部)云计算中心投产,将成西部规模最大数据中心
  10. 【字符集五】c++标准库<locale>