• PHP动态图像处理


    PHP中GD库的使用

            在PHP中,通过GD库处理图像的操作,都是现在内存中处理,操作完成以后再以文件流的方式,输出到浏览器或保存在服务器的磁盘中。创建一个图象应该包括4个基本步骤:
    • 创建画布:画布实际上就是在内存中开辟的一块临时区域,用于存储图像的信息。
    • 绘制图像:设置图像的颜色,填充点、线、几何图形、文本等。
    • 输出图像:完成绘制后,需要将图像以某种格式保存到服务器指定的文件中,或将图像直接输出到浏览器上显示给用户。但在图像输出之前,一定要使用header()函数发送Content-type通知浏览器。
    • 释放资源:图像被输出以后,话不中的内容也不再有用。处于节约系统资源的考虑,需要及时清除画布占用的所有内存资源。
    画布管理
            可以使使用imagecreate()和imageCreateTrueColor()两个函数插件指定的画布。
            imagecreate():新建一个基于调色板的图像。
            imagecreatetruecolor():新建一个真彩色图像。
            画布的句柄如果不再使用,一定要将这个资源销毁,释放内存与该图像的存储单元。调用imagedestroy($image)函数就可以实现。
    设置颜色

            imagecolorallocate(resouce $image,int $red,int $green,int $blue);

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
        $im = imagecreate(100, 100);                            //为设置颜色函数提供一个画布资源
        //背景设为红色
        $background = imagecolorallocate($im, 255, 0, 0);       //第一次调用即为画布设置背景颜色
        //设定一些颜色
        $white = imagecolorallocate($im, 255, 255, 255);        //返回由十进制整数设置为白色的标识符
        $black = imagecolorallocate($im, 0, 0, 0);              //返回由十进制整数设置为黑色的标识符
        //十六进制方式
        $white = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);     //返回由十六进制整数设置为白色的标识符
        $black = imagecolorallocate($im, 0x00, 0x00, 0x00);     //返回由十六进制整数设置为黑色的标识符
    生成图像

          

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
        if (function_exists("imagegif")){
            header("Content-type:image/gif");
            imagegif($image);
        }elseif (function_exists("imagejpeg")){
            header("Content-type:image/jpeg");
            imagejpeg($image, "", 0.5);
        }elseif (function_exists("imagepng")){
            header("Content-type:imagepng");
            imagepng($image);
        }elseif (function_exists("imagewbmp")){
            header("Content-type:imagewbmp");
            imagewbmp($image);
        }else{
            die("在PHP服务中,不支持图像");
        }
    绘制图像

            imageFill()实现区域填充。

    1
    imagefill(resource $image,int  $x,int $y,int $color);

    1
    2
    3
    4
    5
    6
    7
    8
    <?php
        $image = imagecreatetruecolor(100, 100);
        $red = imagecolorallocate($image, 255, 0, 0);
         
        imagefill($image, 0, 0, $red);
        header("Content-type:image/png");
        imagepng($image);
        imagedestroy($image);

    •  绘制点:在php中,使用imageSetPixel()函数在画布中绘制一个单一像素的点,并且可以设置点的颜色。

    1
    bool imagesetpixel(resource $image, int $x, int $y, int $color);

    • 绘制线:imageline()绘制一条线段。

    1
    bool imageline(resource $image, int $x1, int $y1,int $x2, int $y2, int $color);

    •  绘制矩形: imageRectangle(),也可以使用imageFilledRectangle()函数绘制一个矩形并填充。

    1
    2
    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);

    • 绘制多边形:  imagepolygon(),imagefilledploygon()。

    1
    2
    bool imageploygon(resource $image, array $points, int $num_points, int $color);
    bool imageFilledploygon(resource $image, array $points, int $num_points, int $color);

    • 绘制椭圆:imageEllipse()、imageFilledEllipse()函数绘制一个椭圆并填充。

    1
    2
    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);

    • 绘制弧线:imagearc

    1
    bool imagearc(resource $image, int $cx, int $cy,int $w, int $h, int $s, int $e, int $color);

            以($cx.$cy)坐标为中心,$w,$h分别为椭圆的宽度与高度,起始点和结束点以$s,$e参数以角度指定。0度在三点钟位置,以顺时针方向绘画。如果要绘制完整的原型,首先要将参数$w,$h设置为相等的值,然后将起始角度$s指定为0,结束角度$e指定为360。

    在图像中绘制文字

       

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
        $im = imagecreate(150, 150);                                        //创建一个150*150的画布
         
        $bg = imagecolorallocate($im, 255, 255, 255);                       //设置画布的背景为白色
        $black = imagecolorallocate($im, 0, 0, 0);                          //设置一个颜色变量为黑色
         
        $string = "staven1234";                                             //在图像中输出的字符串
         
        imageString($im, 3, 28, 70, $string, $black);                       //水平将字符串输到图像中
        imageStringUp($im, 3, 59, 115, $string, $black);                    //垂直由下而上输到图像中
        for($i=0,$j=strlen($string); $i<strlen($string); $i++,$j--){         //循环单个字符输到图像中
            imageChar($im, 3, 10*($i+1), 10*($i+2), $string[$i], $black);   //向下倾斜输出每个字符
            imageCharUp($im, 3, 10*($i+1), 10*($j+2), $string[$i], $black); //向上倾斜输出每个字符
        }
         
        header('Content-type: image/png');                                  //设置输出的头部标识符
        imagepng($im);                                                      //输出PNG格式的图片

            imagettftext()输出一种可以缩放的与设备无关的TrueType字体。

            $angle是角度制表示的角度,0度为从左向右读的文本,更高数值表示逆时针旋转,90度表示从下往上读的文本。$fontfile表示想要使用的TrueType字体的路径。






            







  • 相关阅读:
    phpdocumentor生成代码注释文档(linux)
    phpstorm扩展
    es教程
    康威定律
    k8s
    tidb调研
    netty 在线教程
    McQueenRPC源码阅读
    DIY一些基于netty的开源框架
    性能测试
  • 原文地址:https://www.cnblogs.com/staven/p/d3ef425dd49f550b9757bfa758f3a842.html
Copyright © 2020-2023  润新知