PHP 图像处理

创建图像基本步骤

创建图像

所有的绘图设计都需要在一个图像上完成,以后的操作都将就与这个图像

  • imagecreatetruecolor(宽,高):新建一个真彩图像

  • imagecreatefromjpeg():打开服务器或网络文件中已经存在的GIF、JPEG、PNG、WBMP格式图像

  • imagecreatefromjpeg()

  • imagecreatefrompng()

  • imagecreatefromgif()

  • imagecreatefromwbmp()

创建或者打开失败的时候会返回空字符串,并且输出一条错误信息

  • imagesx():取得图像宽度
  • imagesy():取得图像高度
  • imagesize():取得图像大小

绘制图像

  • 图像创建完成以后,就可以通过这个图像资源,使用各种画像函数设置图像的颜色、填充画布、画点、线段、各种几何图形,以及向图像的添加文本等

  • imagecolorallocate(图像对象, red, green, blue):为一幅图像分配颜色

  • imagefill(图像对象, x坐标, y坐标, 分配颜色对象):为一幅图像分配颜色

  • imagesetpixel():画一个单一像素

  • imageline():画一条线段

  • imagerectangle()画一个矩形

  • imagestring():水平画一行字符串

  • imagettftext():用TrueType字体向图像写入文本

  • imagettfbbox():计算TrueType文字所占区域

  • imagecopy():拷贝图像的一部分

  • imagecopymerge():拷贝并合并图像的一部分

  • imagecopyresampled():重采样拷贝部分图像并调整大小


输出图像

完成整个图像的绘制之后,需要将图像以某种格式保存到服务器的文件中,或者将图像直接输出到浏览器上显示给用户。但在图像输出之前,一定要使用header()函数发送Content-type通知浏览器,这次发送的是图片不是文本

  • header(“Content-type:image/jpeg”):通知浏览器,这次发送的是图片不是文本;在该函数之前,不能输出任何内容
  • imagejpeg(图像对象, url):以JPEG格式将图像输出到浏览器或文件;添加url路径可以保存到服务器

释放资源

  • imagedestroy(图像对象):销毁图像,释放资源

创建图像的基本步骤


    //通知浏览器,这次发送的是图片不是文本
    // header("Content-type:image/jpeg");  //默认情况是header("Content-type:text/html");
    
    // -----------创建图像--------------------------------
    $img = imagecreatetruecolor(200, 200);  //新建一个宽高200px的真彩图像
   
    // -----------绘制图像--------------------------------
    $color_red =  imagecolorallocate($img, 255, 0, 0);  //分配颜色
    $color_green =  imagecolorallocate($img, 0, 255, 0);  //分配颜色
    $color_blue =  imagecolorallocate($img, 0, 0, 255);  //分配颜色
    // ---------------------------------------------------
    imagefill($img, 0, 0, $color_green);    //区域填充

    // -----------输出图像--------------------------------
    // imagejpeg($img);    //以JPEG格式将图像输出到浏览器或文件
    imagejpeg($img, 'img/kuse.jpeg');    //以JPEG格式将图像保存到服务器

    // -----------输出图像--------------------------------
    imagedestroy($img); //销毁图像
?>

验证码应用


    //通知浏览器,这次发送的是图片不是文本
    header("Content-type:image/jpeg");  //默认情况是header("Content-type:text/html");
    
    $element = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u','v', 'w', 'x', 'y', 'z');
    $string = '';
    for($i = 0; $i < 5; $i++){
         $string .= $element[rand(0, count($element)-1)];
    }
   
    // -----------创建图像--------------------------------
    $width = 120; 
    $height = 40;
    $img = imagecreatetruecolor($width, $height);  //新建一个宽高200px的真彩图像
   
    // -----------绘制图像--------------------------------
    // $color_bg =  imagecolorallocate($img, 255, 200, 200);  //分配颜色
    $color_bg =  imagecolorallocate($img, rand(150, 255), rand(150, 255), rand(150, 255));  //随机分配颜色
    $color_border =  imagecolorallocate($img, 0, 0, 0);  //边框颜色
    $color_pixel = imagecolorallocate($img, rand(100, 200), rand(100, 200), rand(100, 200));   //像素点颜色
    $color_string = imagecolorallocate($img, rand(10, 100), rand(10, 100), rand(10, 100));   //像素点颜色
    // ---------------------------------------------------
    imagefill($img, 0, 0, $color_bg);    //区域填充
    imagerectangle($img, 0, 0, $width-1, $height-1, $color_border); //画一个矩形
    for($i = 0; $i < 100; $i++){
        imagesetpixel($img, rand(1, $width-1), rand(1, $height-1), $color_pixel); //画一个像素点
    }
    for($i = 0; $i < 3; $i++){
        imageline($img, rand(0, $width/2), rand(0, $height/2), rand($width/2, $width-1), rand($height/2, $height-1), $color_pixel); //画一条线
    }
    // imagestring($img, 5, 10, 10, "abcd", $color_string);//水平写一行字符串
    imagettftext($img, 25, rand(-5, 5), rand(5, 15), rand(30,$height-10), $color_string, 'D:/phpstudy_pro/WWW/font/kaharsa.otf', $string);  //用指定字体写入字符串
    // -----------输出图像--------------------------------
    imagejpeg($img);    //以JPEG格式将图像输出到浏览器或文件
    // imagejpeg($img, 'img/kuse.jpeg');    //以JPEG格式将图像保存到服务器

    // -----------输出图像--------------------------------
    imagedestroy($img); //销毁图像
?>

图片水印


    //通知浏览器,这次发送的是图片不是文本
    header("Content-type:image/jpeg");  //默认情况是header("Content-type:text/html");

    // -----------创建图像--------------------------------
    $img = imagecreatefrompng('img/timg.png');//目标图像资源
    $waterMark = imagecreatefrompng('img/happy.png');//水印图像资源

    // -----------绘制图像--------------------------------
    $color = imagecolorallocate($img, 255, 255, 255);
    $width = imagesx($img); //获取图片宽高
    $heigh = imagesy($img);
    $waterMarkWidth = imagesx($waterMark);
    $waterMarkHeight = imagesy($waterMark);
    // var_dump($width);
    // var_dump($heigh);

    // ------------------------文字水印开始-------------------
    $boxSize = imagettfbbox(50, 0, 'D:\phpstudy_pro\WWW\font\HongLeiBanShuJianTi-2.ttf', '美女写真');
    // var_dump($boxSize);
    $strWidth = $boxSize[2]-$boxSize[0];
    // var_dump($strWidth);
    imagettftext($img, 50, 0, $width - $strWidth-10, $heigh-10, $color, 'D:\phpstudy_pro\WWW\font\HongLeiBanShuJianTi-2.ttf', '美女写真');
    // ------------------------文字水印结束-------------------

    // ------------------------图片水印开始-------------------
    imagecopy($img, $waterMark, 300, 100, 0, 0, $waterMarkWidth, $waterMarkHeight);
    imagecopymerge($img, $waterMark, 300, 300, 0, 0, $waterMarkWidth, $waterMarkHeight, 10);
    /*
    参数说明:
    $img:目标资源
    $waterMark:水印图像资源
    300:拷贝到目标图像的X轴位置
    100:拷贝到目标图像的Y轴位置
    0:从水印图像的X坐标为0的位置开始拷贝
    0:从水印图像的Y坐标为0的位置开始拷贝
    $waterMarkWidth:拷贝水印图像的宽度
    $waterMarkHeight:拷贝水印图像的高度
    0:表示透明度,数值越小,越透明,最大值100表示不透明
    */
    // ------------------------图片水印结束-------------------


    // -----------输出图像--------------------------------
    imagepng($img);    //以png格式将图像输出到浏览器或文件
    // imagepng($img, 'img/kuse.png');    //以png格式将图像保存到服务器

    // -----------输出图像--------------------------------
    imagedestroy($img); //销毁图像
?>

裁剪与缩放


    //通知浏览器,这次发送的是图片不是文本
    header("Content-type:image/jpeg");  //默认情况是header("Content-type:text/html");
    

    // -----------创建图像--------------------------------
    $img = imagecreatefrompng('img/timg.png');//目标图像资源
    

    $imgWidth = imagesx($img);
    $imgHeight = imagesy($img);

    $width = 200;
    $height = $width / ($imgWidth/$imgHeight);
    $img2 = imagecreatetruecolor($width, $height);

    // -----------绘制图像--------------------------------
    // $color =  imagecolorallocate($img2, 255, 0, 0);  
    // imagefill($img2, 0, 0, $color);    //区域填充
    // imagecopyresampled($img2, $img, 150, 100, 300, 200, 200, 100, 200, 100);//裁剪

    imagecopyresampled($img2, $img, 0, 0, 0, 0, $width, $height, $imgWidth, $imgHeight);//等比例缩放,容量改变,图片大小也改变
    

    // -----------输出图像--------------------------------
    if(imagepng($img2)){
        imagepng($img2, 'img/kuse1.png');//以png格式将图像输出到浏览器或文件
    }

    // -----------输出图像--------------------------------
    imagedestroy($img); //销毁图像
    imagedestroy($img2); //销毁图像
?>

你可能感兴趣的:(PHP,后端,php,后端)