GD库使用小结—1
因为一开始,“大家”都说一般任务中,用php操作图片不常见,像我们这种基本业务型的,就更用不到了,所以先别看,偶就没有看。现在有机会了自然要来玩一把。
以前学过C#的GDI+,交了课程设计后忘得一干二净。又被迫学了点MFC的画图,觉得这是最蛋疼的画图过程。去年做了个小任务时用到了js图表控件,用的是封装好的js库直接调方法,然后发现这是用HTML5的canvas元素结合js打造而成,这些chart控件很多很漂亮:jsChart、HighChart、EChart、aChart、Chart.js等等,都是基于canvas,还有svg这货也很强大。
对比下有不少共同点,首先都要创建一个环境(context),就像真实的人画画一样,得给他一个完整的环境:一间画室,一张画板,若干画笔、颜料等,这样的硬性条件具备后才能开始作图,这个环境听起来很抽象,简单理解就是机子上必须具备某些“库”、“扩展”,类似于.net framework、jave runtime等,画js图表你得下载和加载对应的js文件,你的浏览器得支持canvas,这些硬性条件构成了这个(底层)环境,某些任务需要这些底层去完成,就像玩游戏,很多大点的游戏必须要directX,也是这个道理。
然后就是调用这个环境提供的各种库的方法,来画各种图形:点、线、圆(弧)、椭圆、矩形、多边形、字符、文本等,再强大的可能直接提供了一些经典的曲线如贝塞尔等,然后可以设置这些图形的样式,线条连续还是断续,颜色红还是绿,画图形时是画个空框架还是将内部填充,画在界面上哪里(图在屏幕上坐标多少),正着放还是歇着放(角度多少),图形长宽如何等等,都应有方法可调。
等一切设置完毕就是画到界面上了,然后可能会做释放某些资源的扫尾工作(垃圾回收)。大多数工作都在设置各种参数的阶段。
php使用GD库进行绘图,请确保开启了这个扩展。可以看到当前GD库的版本,支持的类型GIF、JPEG、PNG、WBMP等,FreeType大致查了下是一个字体引擎,提供访问各种字体接口,可供我们绘制文字,也算一个库扩展,只是包含在gd库中。
php画图也基本遵循这个过程:创建画布(相当于绘图环境)->设置参数,绘制图像 -> 输出(保存)图像 -> 资源释放。如果是将图片直接输出到浏览器,实际是放在一个img标签中,它的src属性是这个脚本的所在路径。一个最简单的示例
<?<span style="color: #000000">php </span><span style="color: #008000">//</span><span style="color: #008000"><a style="color:transparent">本@文来源gao($daima.com搞@代@#码(网5</a><strong>搞gaodaima代码</strong> 创建画布</span> <span style="color: #800080">$width</span> = 200; <span style="color: #008000">//</span><span style="color: #008000"> 规定画布的宽高</span> <span style="color: #800080">$height</span> = 100<span style="color: #000000">; </span><span style="color: #800080">$image</span> = imagecreatetruecolor(<span style="color: #800080">$width</span>, <span style="color: #800080">$height</span>); <span style="color: #008000">//</span><span style="color: #008000"> 创建一幅真彩色图像 // 添加一些即将用到的颜色</span> <span style="color: #800080">$white</span> = imagecolorallocate(<span style="color: #800080">$image</span>, 0xf2, 0xec, 0xe0<span style="color: #000000">); </span><span style="color: #800080">$orange</span> = imagecolorallocate(<span style="color: #800080">$image</span>, 0xff, 0xa5, 0x4c<span style="color: #000000">); </span><span style="color: #008000">//</span><span style="color: #008000"> 对画布背景填充颜色</span> imagefill(<span style="color: #800080">$image</span>, 0, 0, <span style="color: #800080">$white</span><span style="color: #000000">); </span><span style="color: #008000">//</span><span style="color: #008000"> 画一串字符串在画布上</span> imagestring(<span style="color: #800080">$image</span>, 5, 30, 40, "Hello World", <span style="color: #800080">$orange</span><span style="color: #000000">); </span><span style="color: #008000">//</span><span style="color: #008000"> 通知浏览器输出的是图像(png类型)</span> <span style="color: #008080">header</span>('Content-Type: image/png'<span style="color: #000000">); </span><span style="color: #008000">//</span><span style="color: #008000"> 输出到浏览器</span> imagepng(<span style="color: #800080">$image</span><span style="color: #000000">); </span><span style="color: #008000">//</span><span style="color: #008000"> 释放图像资源</span> imagedestroy(<span style="color: #800080">$image</span>);