当前位置: 首页 > news >正文

php 图片 圆角,PHP将图片处理成圆角

文章摘要:上一篇文章,我说了关于php把文字画在图片上的换行方法,这篇说说项目中图片圆角的处理我们可能在很多项目中,需要对图片进行圆角处理,例如HTML5中,例如Android中;这里我们说说用PHP对图片进行圆角处理的方法;圆角处理的方法有很多,这里我就只说说我的项目中是怎么对处理圆角的;

效果图如下:

AAffA0nNPuCLAAAAAElFTkSuQmCC

乐萌汉字卡片

如图可见,不论是插图,还是文字这背景,我们都做了圆角处理,下面我看看在PHP中,我们是怎么实现的吧。

这里我先说说实现的思路,我们是先画出直角的图,然后再用一个圆角去覆盖在直角上面,这样看起来就是一个圆角了。

一、背景图圆角处理

方法调用://整个图,也就是白色背景$im = imagecreatetruecolor(750, 3000);

$bgcolor = imagecolorallocate($im, 255, 255, 255);

imagefill($im, 0, 0, $bgcolor);//生成汉字的背景矩形$image_width = 694;//圆角淡色背景的宽694px$image_height = 368;//圆角淡色背景的高368px//矩形上面加圆角$radius = 10;//圆角的像素,值越大越圆$dst_x = 28;//距离白色大背景左边的距离$y = 40;//距离白色大背景顶端的距离//这里调用函数,绘制淡色的圆角背景,imagebackgroundmycard($im, $dst_x, $y, $image_width, $image_height, $radius);以上是调用函数的说明,下面我们给出函数方法:

方法实现:/**

* 画一个带圆角的背景图

* @param $im  底图

* @param $dst_x 画出的图的(0,0)位于底图的x轴位置

* @param $dst_y 画出的图的(0,0)位于底图的y轴位置

* @param $image_w 画的图的宽

* @param $image_h 画的图的高

* @param $radius 圆角的值

*/function imagebackgroundmycard($im, $dst_x, $dst_y, $image_w, $image_h, $radius){

$resource = imagecreatetruecolor($image_w, $image_h);

$bgcolor = imagecolorallocate($resource, 0xef, 0xef, 0xe1);//该图的背景色

imagefill($resource, 0, 0, $bgcolor);

$lt_corner = get_lt_rounder_corner($radius, 255, 255, 255);//圆角的背景色

// lt(左上角)

imagecopymerge($resource, $lt_corner, 0, 0, 0, 0, $radius, $radius, 100);    // lb(左下角)

$lb_corner = imagerotate($lt_corner, 90, 0);

imagecopymerge($resource, $lb_corner, 0, $image_h - $radius, 0, 0, $radius, $radius, 100);    // rb(右上角)

$rb_corner = imagerotate($lt_corner, 180, 0);

imagecopymerge($resource, $rb_corner, $image_w - $radius, $image_h - $radius, 0, 0, $radius, $radius, 100);    // rt(右下角)

$rt_corner = imagerotate($lt_corner, 270, 0);

imagecopymerge($resource, $rt_corner, $image_w - $radius, 0, 0, 0, $radius, $radius, 100);

imagecopy($im, $resource, $dst_x, $dst_y, 0, 0, $image_w, $image_h);

}

上面函数方法依赖的函数:/** 画圆角

* @param $radius 圆角位置

* @param $color_r 色值0-255

* @param $color_g 色值0-255

* @param $color_b 色值0-255

* @return resource 返回圆角

*/function get_lt_rounder_corner($radius, $color_r, $color_g, $color_b){    // 创建一个正方形的图像

$img = imagecreatetruecolor($radius, $radius);    // 图像的背景

$bgcolor = imagecolorallocate($img, $color_r, $color_g, $color_b);

$fgcolor = imagecolorallocate($img, 0, 0, 0);

imagefill($img, 0, 0, $bgcolor);    // $radius,$radius:以图像的右下角开始画弧

// $radius*2, $radius*2:已宽度、高度画弧

// 180, 270:指定了角度的起始和结束点

// fgcolor:指定颜色

imagefilledarc($img, $radius, $radius, $radius * 2, $radius * 2, 180, 270, $fgcolor, IMG_ARC_PIE);    // 将弧角图片的颜色设置为透明

imagecolortransparent($img, $fgcolor);    return $img;

}

最后输出图片:

讲浅色背景圆角处理的已经完成了,如果你想看看最后的效果,只要做下面一部,把图片输出就可以了。//生成图片imagepng($im, "test.png");

imagedestroy($im);

二、插图圆角处理:

和上面背景圆角处理完全相同的思路:就是对插图的直角进行覆盖,我就不多说了,下面附上插图圆角处理的的代码。//这里我们吧准备好的插图画到背景图上,此时还是直角的$filename="img/test_1.png"//图片资源目录$img = imagecreatefrompng($filename);//第一个参数是上面已经用过的大的背景图,也就我们的画板,//第二个参数:上面这个目录拿到的capy用的资源文件了//第三个单数距离大卡片左边的距离//第三个单数距离大卡片上边的距离//第三第四是资源图片开始拷贝的位置,这里我是从左上角开始copy的,所以是0和0;//第五第六个参数是图片拷过去的大小imagecopy($im, $img, 100, $y, 0, 0, 560, 288);//画圆角$lt_corner = get_lt_rounder_corner($radius, 0xef, 0xef, 0xe1);//圆角的背景色myradus($im, 100, $y, $lt_corner, $radius, 288, 560);

上面是调用的方法,这里的get_lt_rounder_corner 是一个自定义的函数,上面背景处理中已经列出该函数的具体实现,这里不再重复,下面给出myradus函数的具体实现:/**

* @param $im  大的背景图,也是我们的画板

* @param $lt_corner 我们画的圆角

* @param $radius  圆角的程度

* @param $image_h 图片的高

* @param $image_w 图片的宽

*/function myradus($im, $lift, $top, $lt_corner, $radius, $image_h, $image_w){/// lt(左上角)

imagecopymerge($im, $lt_corner, $lift, $top, 0, 0, $radius, $radius, 100);// lb(左下角)

$lb_corner = imagerotate($lt_corner, 90, 0);

imagecopymerge($im, $lb_corner, $lift, $image_h - $radius + $top, 0, 0, $radius, $radius, 100);// rb(右上角)

$rb_corner = imagerotate($lt_corner, 180, 0);

imagecopymerge($im, $rb_corner, $image_w + $lift - $radius, $image_h + $top - $radius, 0, 0, $radius, $radius, 100);// rt(右下角)

$rt_corner = imagerotate($lt_corner, 270, 0);

imagecopymerge($im, $rt_corner, $image_w - $radius + $lift, $top, 0, 0, $radius, $radius, 100);

}

是不是觉得下面这个代码已经写过了呢?是的,上面有一样的代码。

这样我们就实现的背景的圆角处理,也实现了图片的圆角处理。

作者:小追兵

链接:https://www.jianshu.com/p/ae2e38c146fa

相关文章:

  • 获取表单数据保存到php数组,form表单设计
  • 今天使用flashback功能小恢复了生产数据一把
  • php 通过ip获取省份,php实现根据IP地址获取其所在省市的方法_PHP
  • Zoundrywindows7下无法正常退出
  • php+生成json+省市,PHP将JSON格式省市(区)二级数据插入数据库
  • Windows重装导致Ubuntu无法启动,Grub信息丢失的解决方法
  • php 查看对象,php如何查看对象方法
  • flashback使用记录
  • 打印表格php,php – 如何使用简单的html dom打印表格的单元格
  • Winforms: Windows 7中Taskbar的新效果(3)——进度条
  • java题有两个矩阵A和B,java_java解一个比较特殊的数组合并题,给定两个排序后的数组A和B,其 - phpStudy...
  • QQ游戏到底是如何实现百万人同时在线并保持游戏高效率的呢?
  • matlab随机生成点图,matlab随机生成散点图
  • 菊子曰
  • php编写异常处理,PHP实现异常处理类的方法
  • 收藏网友的 源程序下载网
  • 2019年如何成为全栈工程师?
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • FineReport中如何实现自动滚屏效果
  • JS+CSS实现数字滚动
  • JSONP原理
  • Python十分钟制作属于你自己的个性logo
  • Spring Boot MyBatis配置多种数据库
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 时间复杂度与空间复杂度分析
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 协程
  • 最近的计划
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • ionic异常记录
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • ( 10 )MySQL中的外键
  • (C++20) consteval立即函数
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (南京观海微电子)——I3C协议介绍
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)UDP基本编程步骤
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)jQuery 基础
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .net和php怎么连接,php和apache之间如何连接
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .net项目IIS、VS 附加进程调试
  • /boot 内存空间不够
  • [2023-年度总结]凡是过往,皆为序章
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [Android] Amazon 的 android 音视频开发文档