jpgraph是php中一个非常非常强大的第三方报表工具,据说能完成一切你想要的图形…
新手初识jpgraph肯定会遇到各种各样的问题,比如乱码什么的,本案例是/archives/539
PHP能做很多事情,用于web开发只是冰山一角,如果你愿意或者你对PHP足够了解,你甚至可以用PHP来开发一条PS系统,是的,没错,PHP可以创建和处理包括GIF、PNG、JPEG、WBMP以及XPM在内的多种格式的图像。比PS等软件更加方便的是,PHP可以直接将图像数据流输出到浏览器。
要在PHP中使用图像处理功能,需要加载GD库,或者安装其他的第三方图形库。
一下内容引用自官方手册:
自PHP5.0开始,就自带GD库了。
获得当前安装的GD库的信息,返回一个关联数组描述了安装的 GD 库的版本和性能。 |
从字符串中获取图像尺寸信息 |
取得图像类型的文件后缀 |
以WBMP格式将图像输出到浏览器或文件 |
返回经过仿射变换后的图像,剪切区域可选 |
是否使用antialias(抗锯齿)功能 |
为一幅图像分配颜色+alpha |
取得某像素的颜色索引值 |
取得指定的颜色最进阶的颜色索引值 |
取得与指定的颜色加透明度最接近的颜色 |
取得与给定颜色最仅仅的色度的黑白色的索引 |
取得指定的颜色加透明度的索引值 |
是一个图像中调色板版本的颜色与真彩色版本更能匹配 |
取得指定颜色的索引值或有可能得到的最接近的替代值 |
取得指定颜色 + alpha 的索引值或有可能得到的最接近的替代值 |
给指定调色板索引设定颜色 |
取得一幅图像的调色板中颜色的数目 |
将某个颜色定义为透明色 |
复制并合并图像的一部分 |
用灰度拷贝并合并图像的一部分 |
重采样复制部分图像并调整大小 |
复制部分图像并调整大小 |
新建一个基于调色板的图像 |
由BMP文件或 URL 创建一个新图象。 |
从GD2文件或URL新建一个图像 |
从给定的GD2文件或URL中的部分新建一个图像 |
从GD文件或URL新建一个图像 |
从gif文件或URL新建一个图像 |
从JPEG文件或URL新建一个图像 |
从PNG文件或URL新建一个图像 |
从字符串中的图像流新建一图像 |
从WBMP文件或URL新建一个图像 |
从XBM文件或URL新建一个图像 |
从XPM文件或URL新建一个图像 |
使用一种模式自动剪裁图像到给定矩形 |
区域填充到指定颜色的边界为止 |
将 GD 图像输出到浏览器或文件 |
将 GD2 图像输出到浏览器或文件 |
以GIF格式将图像输出到浏览器或文件 |
检查图像是否为真彩色图像 |
以JPEG格式将图像输出到浏览器或文件 |
设定alpha混色标志以使用绑定的libgd分层效果 |
将调色板从一幅图像拷贝到另一幅 |
将基于调色板的文件转换为真彩色 |
以PNGF格式将图像输出到浏览器或文件 |
将真彩色图像转换为调色板图像 |
取得使用 TrueType 字体的文本的范围 |
文本字符串。如果filename
指定的图像不能访问或者不是一个有效的图像文件,该函数将返回FALSE并产生一条E_WARNING级别的错误。
imageinfo
允许从图像文件中提取一些扩展信息。它将以关联数组返回不同的JPG文件的APP标识。一些程序用这些APP标识来在图像中嵌入文本信息。一个非常常见的是在APP13标识中嵌入IPTC信息。可以用iptcparse()
函数来将二进制的APP13标识解析为可读的信息。
该函数还会返回额外的参数mime,符合该图像的MIME类型。此信息可以用来在HTTP Content-type头信息中发送正确的信息。对于JPG图像,还会多返回两个索引:channels和bits。对于RGB图像,channels值为3;对于CMYK图像,channels值为4。bits是每种颜色的位数。
通过以上打印结果可知,该图像的宽度为650,高度为344,索引值为2的值为2说明图像是jpg图像,除此之外,还获得了图像的channels、bits以及mime类型。
该函数与getimagesize()函数相同。不同之处在于该函数第一个参数是图像数据的字符串表达,而不是文件名。该函数定义如下:
从输出可以看到,两个函数返回的结果是一致的,只是使用函数时图像文件的打开方式不同。
这两个函数分别获取图像的宽度和高度,先来看一下函数定义:
这两个函数都接收一个img
资源作为参数,分别返回所代表的图像的宽度和高度。
这两个函数没什么可说,使用起来也很简单,没什么可说的。
以上代码会分别输出300和200。
PHP中的GD库可用于创建和处理图片,一般通过以下4个步骤对图像进行操作。
使用imagecreate()
函数可以创建一个基于调色板的图像。语法如下:
该函数返回一个图像资源,代表了一幅大小为x_size
和y_size
的空白图像。
也可以使用imagecreatetruecolor()
创建画布资源。并且系统推荐使用此函数。其函数定义如下:
该函数创建一个基于真彩色的图像。也返回一个图像资源,代表了一幅大小为width
和height
的黑色图像。
注意:以上函数中在图像中输出的字符串为英文,如果是中文字符串将显示乱码,要输出中文最好使用imagettftext()
函数。
既然要处理图像,自然少不了和颜色打交道,在PHP中可以使用imagecolorallocate()
函数来指定颜色,其函数定义如下:
该函数返回一个标识符,代表了由给定的RGB成分组成的颜色。red
,green
和blue
分别是所需要的颜色的红、绿、蓝成分。这些参数是0到255的整数或者十六进制的0x00到0xFF。
PHP中还有一个imagecolorallocatealpha()
函数,可以给图像分配颜色,同时还能指定透明度。其函数定义如下:
该函数的行为同imagecolorallocate()
相同,只是多了一个额外的透明度参数alpha
,其值从0到127。0表示完全不透明,127表示完全透明。
以上两个函数在颜色分配失败时都返回FALSE。
PHP的GD库提供了许多绘制图像的函数,可以像画图工具一样,绘制一些简单的形状图形。
使用imageellipse()
函数可以绘制一个椭圆,其函数定义如下:
该函数在指定坐标上画一个椭圆。成功时返回TRUE,否则返回FALSE。
还有一个函数imagefilledellipse()
也是绘制一个椭圆,区别是它会为椭圆填充指定的color
颜色。
以上两个函数都是用来创建多边形的。参数points
是一个PHP数组,包含了多边形的各个顶点坐标,参数num_points
是顶点的总数。两个函数的区别在于一个用color
作为边框颜色,一个用color
作为填充颜色。
以上两个函数用col颜色在image图像资源中画一个矩形,其左上角坐标为x1, y1, 右下角坐标为x2, y2.图像的左上角坐标为0,0。
以上两个函数以cx
,cy
(图像左上角为0,0)为中心在image
所代表的图像中画一个椭圆弧。w
和h
分别制定了椭圆的宽度和高度,起始和结束点以s
和e
参数为角度指定。0°位于三点钟位置,以顺时针方向绘制。
PHP中还提供了多个绘制文字的函数。
该函数将字符串c
的第一个字符画在image
指定的图像中,其左上角位于x
,y
(图像左上角为0,0),颜色为color
。如果font
是1,2,3,4,5,则使用内置字体(更大的数字对应于更大的子图。)
该函数语法格式与imagechar()
相同,区别只是字符的方向不同,这里不再累述。
该函数使用FreeType2字体将文本写入图像。
注意:由于GD库版本更新后,字体路径需要使用绝对路径,所以以上代码中使用realpath()
来获得1.ttf
的绝对路径。
同样的,想让该函数成功的输出中文,需要指定中文字体。
该函数使用TrueType字体将指定的text
写入图像,函数返回一个含有8个元素的数组,分别表示了文本外框的四个角的坐标,顺序为左下角、右下角、右上角、左上角。这些点相对于文本和角度无关,因此左上角指的是以水平方向看文字时其左上角。
€
)来访问字体中超过位置 127 的字符。UTF-8 编码的字符串可以直接传递。 命名实体,比如©
是不支持的。可以考虑使用 html_entity_decode() 来解码命名实体为 UTF-8
字符。如果字符串中使用的某个字符不被字体支持,将使用一个空心矩形替换该字符。(也就是所谓的乱码)$text = "这是一个把中文用黑体显示的图片。";
imagecopy()
可用来复制图像,其函数定义如下:
函数imagerotate()
可将图像旋转一个给定的角度。函数定义如下:
该函数返回将src_im
图像用给定的angle
角度旋转后的图像资源。bgd_color
指定了旋转后没有覆盖到的部分的颜色。旋转的中心是图像的中心,旋转后的图像会按比例缩小以适合目标图像的大小——边缘不会被剪去。
图像水印的原理就是把一张图片复制到另一张背景图片上。GD库的imagecopymerge()
函数,可以实现图片水印,该函数定义如下:
该函数将src_im
图像中坐标从src_x
,src_y
开始,宽度为src_w
,高度src_h
的一部分拷贝到dst_im
图像中坐标为dst_x
和dst_y
的位置上。两图像将根据pct
来决定合并程度,其值范围从0到100。当pct
=0时,实际上什么也没做,当为100时对于调色板图像本函数和imagecopy()
完全一样,它对真彩色图像实现了alpha
透明。
图像验证码的原理就是生成一张图片,然后在图片上写入字符,并辅之一些干扰元素(通常为像素点和斜线)。图像验证码经常用在用户登陆、发帖等验证场景中,其目的是为了防止机器人(程序)自动操作,验证此行为来自用户。
以上代码是为了理解验证码生成的原理,下面给出一个验证码类,用面向对象的方式再实现验证码的生成,也算是复习一下面向对象的知识。
Jpgraph是一个功能强大且十分流行的PHP第三方图片处理库,其建立在内部库文件GD2基础之上。优点是建立了很多方便操作的对象和函数,能够大大简化使用GD库对图片进行处理的编码过程。
该第三方库还有许多其他图形,请自行研究吧。
jpgraph是php中一个非常非常强大的第三方报表工具,据说能完成一切你想要的图形…
新手初识jpgraph肯定会遇到各种各样的问题,比如乱码什么的,本案例是/archives/539
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。