最近在使用PHP gblib生成分享图片的过程中,使用了imagefilledellipse 画圆环用来显示进度,发现锯齿特别严重;

遂google,发现了pChart2这个开源图表库,其demo效果极佳,几乎看不出来锯齿,但这是一个商业图表,所以我开启苦逼之路,阅读下源码,看看是怎么做到了,追根溯源 终于发现了,下面是使用后的效果图

哈哈,效果还是很明显的,独乐乐不如众乐乐,下面就分享一下实现方法;

其实现的核心代码仅仅8行,删除一些有的没的,就是下面一坨

$Xi = floor($X);

$Yi = floor($Y);

if( $Xi == $X && $Yi == $Y){

$this->drawAlphaPixel($X,$Y,array('Alpha'=>$Alpha,'R'=>$R,'G'=>$G,'B'=>$B));

}else{

$Alpha1 = (1 - ($X - $Xi)) * (1 - ($Y - $Yi)) * $Alpha;

$this->drawAlphaPixel($Xi,$Yi,array('Alpha'=>$Alpha1,'R'=>$R,'G'=>$G,'B'=>$B));

$Alpha2 = ($X - $Xi) * (1 - ($Y - $Yi)) * $Alpha;

$this->drawAlphaPixel($Xi+1,$Yi,array('Alpha'=>$Alpha2,'R'=>$R,'G'=>$G,'B'=>$B));

$Alpha3 = (1 - ($X - $Xi)) * ($Y - $Yi) * $Alpha;

$this->drawAlphaPixel($Xi,$Yi+1,array('Alpha'=>$Alpha3,'R'=>$R,'G'=>$G,'B'=>$B));

$Alpha4 = ($X - $Xi) * ($Y - $Yi) * $Alpha;

$this->drawAlphaPixel($Xi+1,$Yi+1,array('Alpha'=>$Alpha4,'R'=>$R,'G'=>$G,'B'=>$B);

}

道理正如你第一眼就想到的那样,画四个点对像素点进行补差;(drawAlphaPixel就是imagesetpixel的一个封装)

假设$X = 1.6;$Y=1.2;我这里将其放大一百倍,效果图

图中圆形代表一个像素点(当然像素点一般都是正方形的,这里是为了直观),颜色最浓的($X,$Y)为圆心的像素点,可以看到明显的颜色透明度差别,越是接近($X,$Y)的颜色越浓,这样渐变的过程就混淆了锯齿,像“光晕”一样(咳咳,不知道这样解释合不合理)

代码中画的四个点以此可以对应到图中Z排布1,2,3,4圆上,并没有很高端大气上档次的部分(其实这也是效率较低的一种方法),但确实可以解决问题;

最后,

根据pChart2 我做了一个mini版的simpleChart(遵循apache license 2) 还在不断完善中,目前仅仅实现了基本的绘图API为了方便使用,方法名和参数都继承了pChart2的血统,并进行了一些优化,但功能就简单很多;上面的图片都是用这个做的;

代码托管在 https://github.com/xiilei/simpleChart

php画图抗锯齿,GD绘图抗锯齿方案[PHP]相关推荐

  1. python 抠图 锯齿_Python | 绘图中的抗锯齿

    python 抠图 锯齿 Antialiasing is another important feature of Matplotlib and in this article, we will re ...

  2. 【Qt教程】3.5 - Qt5 QPainter绘图抗锯齿、相对坐标/平移坐标系、QPainter画图片、手动调用QPainter绘图事件

    GitHub源码仓库:Qt学习例程 1. QPainter绘图抗锯齿 /// 抗锯齿测试 /// painter.drawEllipse(QPoint(100,50), 50, 50);// 设置 抗 ...

  3. canvas绘图有锯齿毛边问题的解决

    canvas绘图有锯齿毛边问题的解决 canvas绘制的一个圆形,用于表现移动端的朝向及视场角,绘制完成后出现了明显的锯齿,移动端看的时候也是非常明显,如下图所示: 本次主要是通过 hidpi-can ...

  4. MATLAB绘图有锯齿

    MATLAB绘图有锯齿 方案一: linehandle = plot(xxxxxx); set( linehandle, 'linesmoothing', 'on' ); 参考 方案二: opengl ...

  5. 怎样把gis锯齿边_ArcGIS地图锯齿处理的方法

    再发布地图服务之前,这些错误要得到解决,即状态应为已解决或者标示为异常(选中某个错误或警告,点击右键选择标记为异常). 抗锯齿地图设置: 使用 MSD 发布地图服务时,您可以设置两个抗锯齿属性,这些属 ...

  6. Kamiya艾美捷抗胸腺嘧啶二聚体单抗(环丁烷嘧啶二聚体CPD)说明书

    Kamiya艾美捷抗胸腺嘧啶二聚体单抗相关性质: 同义词:环丁烷嘧啶二聚体(CPD) 特异性:与由以下物质产生的胸腺嘧啶二聚体发生特异性反应:双链或单链DNA的紫外线照射.不与(6-4)照片产品反应. ...

  7. Abbkine IFKine驴抗小鼠IgG二抗,绿色荧光标记方案

    Abbkine二级抗体可与酶.生物素或荧光团结合,用于多种基于抗体的应用,包括蛋白质印迹.免疫组织化学.免疫荧光.流式细胞术和ELISA. Abbkine驴抗小鼠IgG二抗,绿色荧光标记抗体与小鼠Ig ...

  8. 多应用多特点Abbkine驴抗兔IgG二抗绿色荧光标记

    Abbkine二级抗体可与酶.生物素或荧光团结合,用于多种基于抗体的应用,包括Western Blot.免疫组织化学.免疫荧光.流式细胞术和ELISA. 该抗体与兔IgG全分子反应.它也与兔所有其它类 ...

  9. 抗旋转matlab算法,抗旋转核心训练:2个动作推荐

    抗旋转核心训练:2个动作推荐 之前的核心训练文章中我们提到了核心稳定训练的主题是:"抵抗出现运动的能力"(即稳定身体,避免身体出现移动的能力),因此这类训练可以称为"抗移 ...

最新文章

  1. 百度搜出十年前的照片?法院判赔1元~
  2. 压力不是来自于任务本身,而是任务在大脑中的堵塞,带来的焦虑和心理的抵触(转)...
  3. 进程和线程的一些见解
  4. 【PAT乙级】1085 PAT单位排行 (25 分)
  5. boost::spirit模块将 QString 数据类型用作 Qi 属性的测试程序
  6. C++ map基本操作
  7. cygwin下使用gcc编译c可执行程序
  8. 【C++grammar】名字隐藏与重定义
  9. 阿里巴巴右侧6滑块VS雅虎右侧6滑块VS自定义6滑块
  10. VS2013/2012 下无法打开 源 文件“stdafx.h”的解决方法
  11. Some Knowledge
  12. 必知必会JVM垃圾回收——对象搜索算法与回收算法
  13. 单片机c语言最容易上手的教程,最好的单片机C语言快速入门教程.doc
  14. 计算机桌面美化软件,桌面美化软件哪个好_桌面美化软件排行榜【最新】-太平洋电脑网...
  15. 《Python数据科学手册》—学习笔记
  16. js 声明——有无var的区别
  17. 嗖嗖移动业务大厅小项目
  18. 做外贸必备的十大网站
  19. python 均差表 差商表 数值分析
  20. 色温(光源,环境,季节)

热门文章

  1. 无标度(scale-free)与标度不变性(scale invariance)概念辨析
  2. 如何像微博那样固定背景
  3. video.min.js php,用Video.js实现H5直播界面
  4. 项目质量管理---实施质量保证
  5. LocalDate日期相差天数; 当前日期加一天或减一天
  6. 一个中文字符对应几个字节?
  7. openwrt-19.07.2增加EC20支持qmi拨号
  8. 利用对于kaggle商品图片的分类
  9. 第一次学python作文400字_我被她的话惊呆了400字作文
  10. 3D美术职业晋级之路