分享PHP图像操作库前10佳介绍
所周PHP下的一个图形软件库:GD 图形库,可以用于动态的处理图形图像。GD提供了对于诸如C, Perl, Python, PHP, OCaml等等诸多编程语言的支持。除了生成HTML输出之外,你还可以使用PHP以 PNG、JPEG、GIF、WBMP,以及 XPM等图形文件格式来创建和计算图形文件;并且,使用 PHP 还能让你可以直接向一个浏览器输出图像的数据流。为了这些功能,你需要编译PHP 时加入 GD 支持。本文我们来了解10个最佳的php图形操作库。
下面介绍一些最好的用于开发的PHP图形操作库:
1. Imagine
该图像处理库是用PHP 5.3建立的面向对象的PHP库。通过使用这个库,你可以很容易地对图像进行例如裁剪、调整大小和放置过滤器等工作。为了产生指定的RGB码值和对象透明度百分比,这个库的颜色类在其构造函数中支持两个参数。
2. Php Graphic Works
这个库被创建用来在服务器端进行图像处理。使用这个图像库允许你用一个简单的方法进行复杂的图像处理。可对图像进行的操作,包括旋转,裁剪,缩放,拉伸和翻转。而您只需要通过一些代码就可以完成这些。
3. Zebra Image
这款轻巧和面向对象的图像处理库是用PHP构建的。它支持的图像格式包括JPG,GIF 和 PNG。它有一个独特的能力,就是在每一个动作之后都可以把一种格式转换为另一种格式。
4. Php5 Image Manipulation
这个完全面向对象的图像处理库可用于PHP和GD2 。它被认为是 PHP-image 项目的一种扩展形式。这个面向对象的图像处理库提供各种ICO图像文件类型,如PNG,GIF ,PSD ,JPEG和ICO 。此外,它还能输出由GD2支持的各种图像文件类型。
5. 动态虚拟图像生成
这是免费的PHP脚本库,通过它你可以生成任何尺寸和颜色的图片。此外,你可以在图像上面输入文字。
6. WideImage
Wide Image也被认为是用于图像处理的面向对象的库。使用这个库,你可以执行处理、加载、以图像格式保存图像等一般操作。
7. Image Cache
这个轻量级的PHP类用于移动、压缩和缓存浏览器中的图像。然后,它返回打印在 image标签中的图像的新来源。您可以通过设置各种选项来使用这个库,比如 base URL,目录等。
8. Image Workshop
这是一个被认为是基于图层的图像编辑软件的可自由使用的PHP类。它允许你叠加多个层和具有执行比如把一个图像放到另一个上面进行移动,和调整大小,裁剪,写字,旋转,叠加等功能的能力。
9. Asido
这是个有着操作图像丰富功能的PHP库,适合任何运行环境,如 Magick Wand, GD2, 和Image Magick。它同时支持PHP4和PHP5。
10. PhpThumb
该PHP库除了支持各种流行的图像格式以外,还接受所有图像资源类型。使用该图像操作库,你可以旋转、裁剪、水印图片。除此之外,你还可以定义图片的像素。
有时我们的网站需要获取flash文件的尺寸信息,php有一个内置的函数可以实现,这个函数就是getimagesize,他可以返回图像的尺寸及文件类型的一个数组。如果你还想着通过解析swf文件头信息来获取flash文件的尺寸信息,那真的有点走远了。因为从PHP 4开始已经内置getimagesize函数来做这个事。其功能测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通 HTML 文件中 IMG 标记中的 height/width 文本字符串。而且从PHP 4.0.5起还支持参数是一个url。例如:
print_r(getimagesize('http://www.google.com.hk/images/srpr/logo4w.png'));
输出的结果为:
Array
(
[0] => 550
[1] => 190
[2] => 3
[3] => width="550" height="190"
[bits] => 8
[mime] => image/png
)
感觉getimagesize还是很强大的,各种图像类型的文件都可以操作,越来越喜欢php了。
通过本文你至少可以掌握以下技巧:
1、能够使用JpGraph画出各式各样的图表
一、开启GD库
Jpgraph需要GD库的支持,所以在调式JpGraph之前,确保GD库已开启,这很重要,不然后面的工作就没办法展开了。GD库在PHP5中是被默认安装的,我们只需开启GD库就可以了。
打开php.ini文件,找到“;extension=php_gd2.dll”选项,将其前的分号“;”去掉,如图所示
二、使用方法
在使用JpGraph时,最好弄明白你使用的是哪一个版本,千万不要弄错,不然就会张冠李戴,让你调得头晕目眩的。也不要从网上找一些片断代码来调试,除非它是完整的,不然也会让你吃不了兜着走的了。唠叼就到这里了,下面开始调试。
运行环境
操作系统 W7
解压下载的jpgraph-3.5.0b1压缩包,会看到一些目录:
src:图表生成所依赖的代码包,其子目录Examples里有许多的实例。
实例
把jpgraphExamplesaccbarex1.php拷贝到test目录(和jpgraph同一目录),然后打开打开http://localhost/test/accbarex1.php,我们就会看到生成的图
哗,这是我们使用PHP作图很难实现的
代码如下 | 复制代码 |
//加载生成图表对应的文件 //创建图表的数据,可以自定义 // 图表的长宽 //图表的外边距 //设置图表的标题字体、大小 //和上面标题对应,设置标题的字体和大小 //生成本地图表,?认留空,生成在当前目录,可以Stroke(“路径/文件名.png”)这样指定路径 |
JpGraph的难点是中文乱码的解决,本来还想把这个问题一块解决的,但似乎篇幅有点长了,留到下一篇吧
小结:调试JpGraph,需要注意其运行环境、版本、操作系统以及代码的完整性,不然相同的代码可能却无法正确运行。
很多开发中,我们试图使用header("Content-type: image/jpeg");来 输出图片,试图用一些php的图像处理技术,让输出图片更加智能和动感。但我们常常遇到新的问题,除非你规定不同的URL结构,并采用服务器技术将图片缓 存,否则很有可能这些输出图片会消耗大量的流量。怎么把它们缓存起来,下次用户访问的时候调用缓存呢?(前提是你的这个图片希望保持不变)
代码如下 | 复制代码 |
// put this above any php image generation code: session_start(); header("Cache-Control: private, max-age=10800, pre-check=10800"); header("Pragma: private"); header("Expires: " . date(DATE_RFC822,strtotime(" 2 day"))); |
在header("Content-type: image/jpeg");上方添加上面这段代码,它将规定当前页面缓存的时间(两天),并在下一次访问中使用这个缓存时间节点。
接下来判断是否已经有缓存,如果有,就使用缓存。
情况一:如果浏览器对当前页面已经有缓存,那么就直接使用它。
代码如下 | 复制代码 |
// the browser will send a $_SERVER['HTTP_IF_MODIFIED_SINCE'] if it has a cached copy if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])){ // if the browser has a cached version of this image, send 304 header('Last-Modified: '.$_SERVER['HTTP_IF_MODIFIED_SINCE'],true,304); exit; } |
情况二:浏览器缓存了当前页,虽然我们更新了某些图片信息,但来源图片本身没有变化,而且我们希望使用之前的缓存,那么也使用缓存。
代码如下 | 复制代码 |
$img = "some_image.png"; |
当然,有些特殊的情况我们还必须考虑,但上面的代码基本上能够带领我们的思路。对了,记得把它们都放在header("Content-type: image/jpeg")的上面。
接着我们来看个例子吧
代码如下 | 复制代码 |
<?php |
在PHP中绘制图像的函数非常丰富,包括点、线、各种几何图形等可以想象出来的平面图形,都可以通过PHP中提供的各种画图函数完成。我们在这里介绍一些常用的图像绘制,如果使用我们没有介绍过的函数,可以参考手册实现。另外,这些图形绘制函数都需要使用画布资源,并在画布中的位置通过坐标(原点是在画布左上角的起始位置,以像素为单位,沿着X轴正方向向右延伸,Y轴正方向向下延伸)决定,并且还可以通过函数的最后一个参数,设置每个图形的颜色。画布中的坐标系统如图所示。
1.函数图形区域填充imageFill()
通过PHP仅仅绘制出只有边线的几何图形是不够的,还可以使用对应的填充函数,完成图形区域的填充。除了每个图形都有对应的填充函数之外,还可以使用imageFill()函数实现区域填充。该函数的语法格式如下:
bool imagefill(resource $image,int $x ,int $y,int $color) //区域填充
该函数在参数$image代表的图像上,相对于图像左上角(0,0)坐标处,从坐标($x,$y)处用参数$color指定的颜色执行区域填充。与坐标($x,$y)点颜色相同且相邻的点都会被填充。例如在下面的示例中,将画布的背景设置为红色。代码如下所示:
代码如下 | 复制代码 |
<?php $im = imagecreatetruecolor(100, 100); //创建100*100大小的画布 $red = imagecolorallocate($im, 255, 0, 0); //设置一个颜色变量为红色 imagefill($im, 0, 0, $red); //将背景设为红色 header('Content-type:image/png'); //通知浏览器这不是文本而是一个图片 imagepng($im); //生成PNG格式的图片输出给浏览器 imagedestroy($im); //销毁图像资源,释放画布占用的内存空间 ?> |
2.绘制点和线imageSetPixel()、imageline()
画点和线是绘制图像中最基本的操作,如果灵活使用,可以通过它们绘制出千变万化的图像。在PHP中,使用imageSetPixel()函数在画布中绘制一个单一像素的点,并且可以设置点的颜色。其函数的原型如下所示:
bool imagesetpixel(resource $image,int $x,int $y,int $color) //画一个单一像素
该函数在第一个参数$image中提供的画布上,距离圆点分别为$x和$y的坐标位置,绘制一个颜色为$color的一个像素点。理论上使用画点函数便可以画出所需要的所有图形,也可以使用其他的绘图函数。如果需要绘制一条线段,可以使用imageline()函数,其语法格式如下所示:
bool imageline(resource $image,int $x1,int $y1,int $x2,int $y2,int $color) //画一条线段
我们都知道两点确定一条线段,所以该函数使用$color颜色在图像$image中,从坐标($x1,$x2)开始到($x2,$y2)坐标结束画一条线段。
3.绘制矩形imageRectangle()、imageFilledRectangle()
可以使用imageRectangle()函数绘制矩形,也可以通过imageFilledRectangle()函数绘制一个矩形并填充。这两个函数的语法格式如下所示:
bool imagerectangle(resource $image,int $x1 , int $y1,int $x2,int $y2,int $color) //画一个矩形
bool imagefilledrectangle(resource image,int $x1 ,int $y1 ,int $x2 ,int $y2,int $color) //画一个矩形并填充
这两个函数的行为类似,都是在$image图像中画一个矩形,只不过前者是使用$color参数指定矩形的边线颜色,而后者则是使用这个颜色填充矩形。相对于图像左上角的(0,0)位置,矩形的左上角坐标为($x1,$y1),右下角坐标为($x2,$y2)。
4.绘制多边形imagePolygon()、imagefilledpolygon()
可以使用imagePolygon()函数绘制一个多边形,也可以通过imageFilledPolygon()函数绘制一个多边形并填充。这两个函数的语法格式如下:
bool imagepolygon(resource $image,array $points,int $num_points,int $color) //画一个多边形
bool imagefilledpolygon(resource $image ,array $points,int $num_points,int $color) //画一个多边形并填充
这两个函数的行为类似,都是在$image图像中画一个多边形,只不过前者是使用$color参数指定多边形的边线颜色,而后者则是使用这个颜色填充多边形。第二个参数$points是一个PHP数组,包含了多边形的各个顶点坐标。即points[0]=x0,points[1]=y0,points[2]=x1,points[3]=y1,依此类推。第三个参数$num_points是顶点的总数,必须大于3.
5.绘制椭圆imageEllipse()、imageFilledElipse()
可以使用imageEllipse()函数绘制一个椭圆,也可以通过imageFilledEllipse()函数绘制一个椭圆并填充。这两个函数的语法格式如下:
bool imageellipse(resource $image,int $cx,int $cy,int $w,int $h,int $color) //画一个椭圆
bool imagefilledellipse(resource $image,int $cx,int $cy,int $w,int $h,int $color) //画一个椭圆填充
这两个函数行为类似,都是在$image图像中画一个椭圆,只不过前者是使用$color参数指定椭圆形的边线颜色,而后者则是使用它填充颜色。相对于画布左上角坐标(0,0),以($cx,$cy)坐标为中心画一个椭圆,参数$w和$h分别指定了椭圆的宽和高。如果成功则返回TRUE,失败则返回FALSE。
6.绘制弧线imageArc()
就是使用绘制填充圆弧的函数实现的。可以使用imageArc()函数绘制一条弧线,以及圆形和椭圆形。这个函数的语法格式如下:
bool imagearc(resource $image ,int $cx,int $cy,int $w,int $h,int $s,int $e ,int $color) //画椭圆弧
相对于画布左上角坐标(0,0),该函数以($cx,$cy)坐标为中心,在$image所代表的图像中画一个椭圆弧。其中参数$w和$h分别指定了椭圆的宽度和高度,起始点和结束点以$s和$e参数以角度指定。0º位于三点钟位置,以顺时针方向绘画。如果要绘制一个完整的圆形,首先要将参数$w和$h设置为相等的值,然后将起始角度$s设置为0,结束角度$e指定为360.如果需要绘制填充圆弧,可以查询imageFilledArc()函数使用。
下面再看一个由图片处理函数生成的一个 3D扇形统计图示例
代码如下 | 复制代码 |
<?php |
直接通过浏览器请求该脚本,或是将该脚本所在的URL,赋给HTML中的IMG标记的src属性,都可以获取动态输出的图像结果,如下图所示:
相关文章
- 今天小编在这里就来给Photoshop的这一款软件的使用者们来说下火龙变冰龙的制作教程,各位想知道具体的制作步骤的使用者们,那么下面就快来跟着小编一起看看制作教程吧。...2016-09-14
- 不知不觉功夫熊猫这部电影已经出到3了,今天小编在这里要教大家的是用Photoshop制作功夫熊猫3的海报,各位想知道制作方法的,那么下面就来跟着小编一起看看吧。 给各...2016-09-14
Illustrator渐变网格工具绘制可爱的卡通小猪教程分享
今天小编在这里就来给Illustrator的这一款软件的使用者们来说一说渐变网格工具绘制可爱的卡通小猪的教程,各位想知道具体制作方法的使用者们,那么下面就快来跟着小编一...2016-09-14- 今天小编在这里就来给photoshop的这一款软件的使用者们来说一说日系小清新通透人像的调色教程,各位想知道具体的调色步骤的使用者们,那么下面就快来跟着小编一起看一看...2016-09-14
- Promise是异步编程的一种解决方案,在ES6中Promise被列为了正式规范,统一了用法,原生提供了Promise对象。接下来通过本文给大家介绍Promise的介绍及基本用法,感兴趣的朋友一起看看吧...2021-10-21
- 下面来给大家分享两个关于php威盾解密的例子,一个是批量解密一个是超级算法的解密都非常的好,大家有举的进入参考。 例子,批量解密 代码如下 复制代码 ...2016-11-25
- mysqli封装了诸如事务等一些高级操作,同时封装了DB操作过程中的很多可用的方法。应用比较多的地方是 mysqli的事务。...2013-10-02
- 这篇文章主要为大家详细介绍了微信小程序实现canvas分享朋友圈海报,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-21
- 核心代码: 复制代码 代码如下:<!--?php$html2RTFCom = new COM("HTML2RTF.Converter");$html2RTFCom--->PreserveImages = true;$html2RTFCom->PageNumbers = 1;$html2RTFCom->PageNumbersAlignH = 1;$html2RTFCom->Pa...2014-06-07
- 今天小编就为大家分享一篇python 实现将Numpy数组保存为图像,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
- 这篇文章主要给大家介绍了关于vue如何调用浏览器分享的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-20
- 今天小编在这里就来给美图秀秀的这一款软件的使用者们来说下制作卡通全家福的教程,各位想知道具体制作方法的使用者们,那么下面就快来跟着小编一起看一看教程吧。 ...2016-09-14
- 这篇文章主要介绍了C#图像透明度调整的方法,涉及C#操作图像透明度的相关技巧,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了C#图像亮度调整的方法,涉及C#操作图像亮度的相关技巧,需要的朋友可以参考下...2020-06-25
- 在qq空间,新浪微博,人人网等网络平台大家经常可以看到一键分享功能,那么基于js代码是如何实现一键分享的呢?下面脚本之家小编给大家介绍js实现一键分享功能的代码,需要的朋友参考下吧...2016-04-22
- memche消息队列的原理就是在key上做文章,用以做一个连续的数字加上前缀记录序列化以后消息或者日志。然后通过定时程序将内容落地到文件或者数据库。php实现消息队列的用处比如在做发送邮件时发送大量邮件很费时间的问...2014-05-31
PHP中print_r、var_export、var_dump用法介绍
文章详细的介绍了关于PHP中print_r、var_export、var_dump区别比较以及这几个在php不同的应用中的用法,有需要的朋友可以参考一下 可以看出print_r跟var_export都...2016-11-25Framewrok7 视图介绍(views、view)使用介绍
下面我们来看一篇关于Framewrok7 视图介绍(views、view)使用介绍吧,希望这篇文章能够帮助到各位朋友。 一、Views 与View的介绍 1,Views (<div class="views">) (1)Vi...2016-10-02- 今天小编就为大家分享一篇Python-numpy实现灰度图像的分块和合并方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
- 先修改Master(10.1.123.197)的 my.cnf 配置在 [mysqld] 中新增以下内容:复制代码 代码如下:log-bin=mysql-binlog-bin-index=mysql-bin.indexserver-id = 1sync_binlog=1binlog_format=mixed然后指定要做同步的数据库,并...2014-05-31