当前位置:首页 > 网站技术 > 后端技术 > 正文内容

PHP入门之图像信息处理(验证码、水印、缩略图)

小彬2020-07-30后端技术93

PHP处理图像信息要使用GD库(imageMagick是另外一种图像处理工具)

1、gd_info检测服务器支持的图像格式

var_dump(gd_info());

//
array(13) {    
["GD Version"]=>    
string(26) "bundled (2.1.0 compatible)"    
["FreeType Support"]=>    
bool(true)    
["FreeType Linkage"]=>    
string(13) "with freetype"    
["GIF Read Support"]=>    
bool(true)    
["GIF Create Support"]=>    
bool(true)    
["JPEG Support"]=>    
bool(true)    
["PNG Support"]=>    
bool(true)    
["WBMP Support"]=>    
bool(true)    
["XPM Support"]=>    
bool(true)    
["XBM Support"]=>    
bool(true)    
["WebP Support"]=>    
bool(true)    
["BMP Support"]=>    
bool(true)    
["JIS-mapped Japanese Font Support"]=>    
bool(false)    
}


图像信息处理就是1根据原有的图像信息创建一个新的图片资源或者2新建一个图片资源

2、getimagesize:以文件方式打开,获取图像的所有信息


getimagesize($images);

//
array(7) {    
[0]=>    
int(1152)    
[1]=>    
int(454)    
[2]=>    
int(2)    
[3]=>    
string(25) "width="1152" height="454""    
["bits"]=>    
int(8)    
["channels"]=>    
int(3)    
["mime"]=>    
string(10) "image/jpeg"    
}

如上代码:getimagesize($images)[2] 为类型值

1表示imagetype_gif

2表示imagetype_jpeg

3表示imagetype_png


3、getimagesizefromstring:以字符串格式打开,结果和getimagesize($images)一样。

getimagesizefromstring(file_get_contents($images));


4、image_type_to_extension:根据指定的图像类型返回对应的后缀,第一个参数为图像类型。

image_type_to_extension(string getimagesize($images)[2],bool true);


5、image_type_to_mime_type:返回的图像类型的 MIME 类型

 image_type_to_mime_type(string getimagesize($images)[2])


返回值常量
图像类型(imagetype返回值
IMAGETYPE_GIFimage/gif
IMAGETYPE_JPEGimage/jpeg
IMAGETYPE_PNGimage/png
IMAGETYPE_SWFapplication/x-shockwave-flash
IMAGETYPE_PSDimage/psd
IMAGETYPE_BMPimage/bmp
IMAGETYPE_TIFF_II (intel byte order)image/tiff
IMAGETYPE_TIFF_MM (motorola byte order)image/tiff
IMAGETYPE_JPCapplication/octet-stream
IMAGETYPE_JP2image/jp2
IMAGETYPE_JPXapplication/octet-stream
IMAGETYPE_JB2application/octet-stream
IMAGETYPE_SWCapplication/x-shockwave-flash
IMAGETYPE_IFFimage/iff
IMAGETYPE_WBMPimage/vnd.wap.wbmp
IMAGETYPE_XBMimage/xbm


6、imagecreatefromjpeg:根据已有的图像资源返回该图像标识符,代表了从给定的文件名取得的图像。

和它类似的还有以下这些,更多详情可以去php官方文档查看

imagecreatefrombmp

imagecreatefromgd2

imagecreatefromgd2part

imagecreatefromgd

imagecreatefromgif

imagecreatefromjpeg

imagecreatefrompng

imagecreatefromstring

imagecreatefromwbmp

imagecreatefromwebp

imagecreatefromxbm

imagecreatefromxpm


7、imagesx、imagesy:返回图像标识符的宽度和高度

echo '宽度:'.imagesx(imagecreatefromjpeg($image)).',高度:'.imagesy(imagecreatefromjpeg($image));


8、imagecreate:新建一个基于调色板的图像,返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的空白图像。

imagecreate($width, $height);    //resource(8) of type (gd)


9、imagecreatetruecolor:新建一个真彩色图像,返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像。

imagecreatetruecolor($width, $height);    //resource(8) of type (gd)

imagecreate 和imagecreatetruecolor 都是创建一个新的图像,区别在调色板和真彩色


10、imagecolorallocate:为一副新建的图像创建背景颜色

imagecolorallocate ( resource $image , int $red , int $green , int $blue ) : int


11、imagefill :把设定好的背景颜色填充到新建的图像中去

imagefill ( resource $image , int $x , int $y , int $color ) : bool

//参数 在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 imagecolorallocate($im, 255, 255, 255); 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)


12、imagepng:以 PNG 格式将图像输出到浏览器或文件,第二个参数为保存的图片路径

imagepng( resource $image [,string $filename ] ) : bool

与它类似的还有 imagejpeg、imagegif。更多参考php官方文档: https://www.php.net


13、imagedestory:销毁图像,释放与 image 关联的内存,image 是由图像创建函数返回的图像标识符。

imagedestory($im)


实例1:新建一个图像,填充颜色并输出到浏览器

<?php
//设置header mime type 否则图像不会显示在浏览器中
header("Content-type: image/png");

//创建新图像
$im = imagecreate(200,100);

//创建背景颜色
$background_color = imagecolorallocate($im, 255, 255, 255);

//输出到浏览器上
imagepng($im);

//销毁图像
imagedestory($im);
?>


实例2:根据图片集随机展示一张图片

$imageList =aeeay(
    '../image/a.jpg',
    '../image/b.png',
    '../image/c.png'
);
$imageKey =array_rand($imageList);
$image =$imageList[$imageKey]
$info =getimagesize($image);
switch($info[2]){
    case 1:
        $im=imagecreatefromgif($image);
    break;
    case 2:
        $im=imagecreatefromjpeg($image);
    break;
    case 3:
        $im=imagecreatefrompng($image);
    break;
    default:
        echo '图像格式不支持';
    break;
}
$imageType =image_type_to_mime_type($info[2])
header('Content-type: image/'.$imageType);
switch($info[2]){
    case 1:
        imagegif($im);
    break;
    case 2: //IMAGETYPE_JPEG
        imagejpeg($im.null,60);
    break;
    case 3:
        imageong($im);
    break;
}
imagedestroy($im);


14、imagerotate:用给定角度旋转图像

将 src_im 图像用给定的 angle 角度旋转。bgd_color 指定了旋转后没有覆盖到的部分的颜色。

旋转的中心是图像的中心,旋转后的图像会按比例缩小以适合目标图像的大小——边缘不会被剪去。

imagerotate ( resource $image , float $angle , int $bgd_color [, int $ignore_transparent = 0 ] ) : resource


15、imagecopyresized:拷贝部分图像并调整大小(使用该函数会失帧模糊)

参数:目标图像,源图像,目标图像的x坐标,目标图像的y坐标,源图像的x坐标,源图像的y坐标,目标图像的宽度,目标图像的高度,源图像的宽度,源图像的高度

imagecopyresized($desIm,$im,0,0,0,0,$desW,$desH,$srcW,$srcH);


16、imagecopyresampled:重采样拷贝部分图像并调整大小(一般用这个函数)

参数:目标图像,源图像,目标图像的x坐标,目标图像的y坐标,源图像的x坐标,源图像的y坐标,目标图像的宽度,目标图像的高度,源图像的宽度,源图像的高度

imagecopyresampled($desIm,$im,0,0,0,0,$desW,$desH,$srcW,$srcH);


实例3:根据原图实现缩略图的展示

header("Content-type: image/jpeg");

//使用imagecreatefromjpeg才能使用imagex和imagey
$im=imagecreatefromjpeg('1.jpg');
$imx=imagesx($im);
$imy=imagesy($im);
$desx=$imx*0.5;
$desy=$imy*0.5;
$desIm=imagecreatetruecolor($desx,$desy);
imagecopyresampled($desIm,$im,0,0,0,0,$desx,$desy,$imx,$imy);

//第二个参数如果为null,则显示在浏览器上,如下则保存到文件目录下
imagejpeg($desIm,'1_1.jpg',75);


17、imagecopy:拷贝图像的一部分

//将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。

imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h ) : bool


实例4:给原图添加右下角水印

header("Content-type: image/jpeg");
$im = imagecreatefromjpeg('1.jpg');
$logo = imagecreatefrompng('2.png');
imagecopy($im,$logo,imagesx($im)-imagesx($logo),imagesy($im)-imagesy($logo),0,0,imagesx($logo),imagesy($logo));

//此处也可以用jpg::imagejpeg($im,null,75);
imagepng($im);


18、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 透明。

imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct ) : bool


19、imagestring:水平画一行字符串

imagestring() 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。

imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col ) : bool


20、imagestringup:垂直画一行字符串(参数和imagestring一样,此处就不做详细说明。就跟数学的垂直线一样,一横和一竖的关系)


实例5:随机显示长度为4的字符串

header('Content-type: image/png');

$im =imagecreatetruecolor(200,100);

$back =imagecolorallocate($im,mt_rand(50,255),mt_rand(50,255),mt_rand(50,255));

imagefill($im,0,0,$back);

$stringColor=imagecolorallocate($im,mt_rand(50,150),mt_rand(50,150),mt_rand(50,150));

$string ='1234567890adcdefghijklmnopqrstuvwxyzABCDEFGHLJKLMNOPQRS';
$str ='';
for($i=0;$i<5;$i++){
  $str .=$string[mt_rand(0,strlen($string)-1)];
}
imagestring($im,5,mt_rand(50,imagesx($im)-60),mt_rand(50,imagesy($im)-20),$str,$stringColor);
imagepng($im);


21、imagettftext: 用 TrueType 字体向图像写入文本

//参数:目标图像,字体尺寸,文本旋转角度,插入文本的x坐标,插入文本的y坐标,字体文件目录,文本字符串
imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text ) : array



22、imagesetpixel:画点

//参数:目标图像,点的x坐标,点的y坐标,点的颜色
imagesetpixel ( resource $image , int $x , int $y , int $color ) : bool
imagesetpixel() 在 image 图像中用 color 颜色在 x,y 坐标(图像左上角为 0,0)上画一个点。


23、imageline:画线

//参数:目标图像,线的起始x坐标,线的起始y坐标,线的终点x坐标,线的终点y坐标,线的颜色
imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color ) : bool
imageline() 用 color 颜色在图像 image 中从坐标 x1,y1 到 x2,y2(图像左上角为 0, 0)画一条线段。


24、imagerectangle:画矩形

imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col ) : bool
imagerectangle() 用 col 颜色在 image 图像中画一个矩形,其左上角坐标为 x1, y1,右下角坐标为 x2, y2。图像的左上角坐标为 0, 0。


25、imageellipse:画椭圆

//参数:目标图像,圆心的x坐标,圆心的y坐标,圆的宽度,圆的高度,圆的颜色
imageellipse ( resource $image , int $cx , int $cy , int $width , int $height , int $color ) : bool
在指定的坐标上画一个椭圆。



26、imagesetstyle:设置画线的风格 

imagesetstyle ( resource $image , array $style ) : bool

imagesetstyle() 设定所有画线的函数(例如 imageline() 和 imagepolygon())

在使用特殊颜色 IMG_COLOR_STYLED 或者用 IMG_COLOR_STYLEDBRUSHED 画一行图像时所使用的风格。


实战:封装了两个函数php文件

里面有添加水印,缩略图,比例缩小,简单验证码,逻辑运算验证码

GDBasic.php


<?php 
  namespace Imooc\Lib;
class GDBasic
{
   protected static $_check =false;
   // 检查服务器环境中gd库
   public static function check(){
      // 当静态变量不为false
      if(static::$_check){
         return true;
      }
      // 检查gd库是否加载
      if(!function_exists("gd_info")){
         throw new \Exception('GD is not exists');
      }
      // 检查gd库版本
      $version = '';
      $info =gd_info();
      if(preg_match("/\\d+\\.\\d+(?:\\.\\d+)?/",$info['GD Version'],$matches)){
         $version=$matches[0];
      }
      // 当gd库版本小于2.0.1
      if(!version_compare($version,'2.0.1','>=')){
         throw new \Exception("GD erquires GD version '2.0.1' or greater,you have ".$version);
      }
      self::$_check = true;
      return self::$_check;
   }
}
?>

Captcha.php


<?php
namespace Imooc\Lib;
require_once 'GDBasic.php';
class  Captcha extends GDBasic
{   
    //图像宽度和高度
    protected $_width = 60;
    protected $_height =25;
    // 随即串
    protected $_code ='ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklnopqrstuvwxyz';
    // 字体文件
    protected $_font_file = '../font/comicz.ttf';
    // 图像
    protected $_im;
    //验证码
    protected $_captcha;
    public function __construct($width = null,$height=null){
        self::check();
        $this->create($width,$height);
    }
    
    
    /**
     * 创建图像
     *
     * @param [type] $width
     * @param [type] $height
     * @return void
     */
    public function create($width,$height)
    {
        //is_numeric 检测变量是否为数字或数字字符串
        $this->_width =is_numeric($width)?$width:$this->_width;
        $this->_height = is_numeric($height)?$height:$this->_height;
        // 创建图像
        $im = imagecreatetruecolor( $this->_width,$this->_height);
        $back =imagecolorallocate($im,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
        //填充底色
        imagefill($im,0,0,$back);
        $this->_im=$im;
    }
    /**
     * 防伪
     *
     * @return void
     */
    public function moll()
    {
        for($i=0;$i<50;$i++){
            $back =imagecolorallocate($this->_im,mt_rand(100,250),mt_rand(100,250),mt_rand(100,250));
            imagesetpixel($this->_im,mt_rand(0,$this->_width),mt_rand(0,$this->_height),$back);
        }
        for($i=0;$i<3;$i++){
            $back2 =imagecolorallocate($this->_im,mt_rand(100,250),mt_rand(100,250),mt_rand(100,250));
            imageline($this->_im,mt_rand(10,$this->_width),mt_rand(10,$this->_height),mt_rand(10,$this->_width),mt_rand(10,$this->_height),$back2);
        }
    }
    /**
     * 生成随机验证码字符串
     *
     * @param integer $length  验证码的个数
     * @param integer $fontSize 字符串字体大小
     * @return void
     */
    public function string($length=4,$fontSize =15)
    {   
        $this->moll();
        $code =$this->_code;
        $captcha = '';
        for($i=0;$i<$length;$i++){
            $string =$code[mt_rand(0,strlen($code)-1)];
            $stringColor=imagecolorallocate($this->_im,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));
            // 测试发现字体无法加载
            // imagettftext($this->_im,$fontSize,mt_rand(-10,10),mt_rand(3,6)+$i*(($this->_width-10)/$length),($this->_height/3)*2,$stringColor,'',$string);
            // 使用默认字体
            // imagestring($this->_im,5,mt_rand(3,6)+$i*(($this->_width-10)/$length),mt_rand(10,100),$string,$stringColor);
            imagestring($this->_im,5,mt_rand(10,100),mt_rand(10,100),$string,$stringColor);
            $captcha .= $string;
        }
        $this->_captcha = $captcha;
        return $this;
    }
    /**
     * 把验证码存入session
     *
     * @return void
     */
    public function setSession()
    {
        if(!isset($_SESSION)){
            session_start();
        }
        $_SESSION['captcha_code'] =$this->_captcha;
    }
    
    /**
     * 逻辑运算符
     *
     * @return void
     */
    public function logic()
    {
        $this->moll();
        $codeArray =array(1=>1,2,3,4,5,6,7,8,9);
        $operatorArray =array('+'=>'+','-'=>'-','x'=>'*');
        list($first,$second) =array_rand($codeArray,2);
        $operator =array_rand($operatorArray);
        $captcha = 0;
        $string = '';
        switch($operator)
        {
            case '+':
                $captcha = $first+$second;
            break;
            case '-':
                //当第一个数小于第二个数时,交换位置
                if($first<$second){
                    list($first,$second) =array($second,$first);
                }
                $captcha = $first -$second;
            break;
            case 'x':
                $captcha =$first*$second;
            break;
        }
        $string =sprintf('%s%s%s=?',$first,$operator,$second);
        $stringColor=imagecolorallocate($this->_im,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));
        imagestring($this->_im,5,mt_rand(10,100),mt_rand(10,100),$string,$stringColor);
        $this->_captcha = $captcha;
        return $this;
    }
    /**
     * 输出验证码
     *
     * @return void
     */
    public function show()
    {
        $this->setSession();
        header('Content-type: image/png');
        imagepng($this->_im);
        imagedestroy($this->_im);
    }
}
?>


Image.php


<?php
namespace Imooc\Lib;
require_once 'GDBasic.php';
class Image extends GDBasic
{
    protected $_width;
    protected $_height;
    protected $_im;
    protected $_type;
    protected $_mime;
    protected $_real_path; 
    public function __construct($file)
    {
        // 检查GD库
        self::check();
        $imageInfo = $this->createImageByFile($file);
       
        $this->_width =$imageInfo['width'];
        $this->_height=$imageInfo['height'];
        $this->_im=$imageInfo['im'];
        $this->_type=$imageInfo['type'];
        $this->_real_path=$imageInfo['real_path'];
        $this->_mime=$imageInfo['mime'];
    }
    /**
     * 根据文件创建图像
     *
     * @param [type] $file
     * @return void
     */
    public function createImageByFile($file){
        //  检查文件是否存在
        if(!file_exists($file)){
            throw new \Exception('file is not exits!');
        }
        // 获取图像信息
        $imageInfo =getimagesize($file);
        $realPath=realpath($file);
        if(!$imageInfo){
            throw new \Exception('file is not image file');
        }
        switch($imageInfo[2]){
            case IMAGETYPE_GIF:
                $im =imagecreatefromgif($file);
            break;
            case IMAGETYPE_JPEG:
                $im=imagecreatefromjpeg($file);
            break;
            case IMAGETYPE_PNG:
                $im=imagecreatefrompng($file);
            break;
            default:
            throw new \Exception('image file must be png,jpeg,gif');
        }
        return array(
             'width'=>$imageInfo[0],
             'height'=>$imageInfo[1],
             'type'=>$imageInfo[2],
             'mime'=>$imageInfo['mime'],
             'im'=>$im,
             'real_path'=>$realPath
        );
    }
    /**
     * 缩略图
     *
     * @param [type] $width
     * @param [type] $height
     * @return void
     */
    public function resize($width,$height){
       
        if(!is_numeric($width) || !is_numeric($height)){
            throw new \Exception('image width or height must be number ');
        }
        // 根据传参的宽高获取最终图像的宽高
        $srcW=$this->_width;
        $srcH=$this->_height;
        // var_dump($this);exit;
        if($width<=0 || $height <=0){
            
            $desW=$srcW; //缩略图高度
            $desH=$srcH; //缩略图宽度
        }else{
            $srcP=$srcW / $srcH; //宽高比
            
             $desP=$width /$height; //宽高比
            //  var_dump($width /$height);exit;
            if($width>$srcW){
                if($height>$srcH){
                    $desW=$srcW;
                    $desH=$srcH;
                }else{
                    $desH =$height;
                    $desW =round($desH*$srcP);
                }
            }else{
                if($desP>$secP){
                    $desW =$width;
                    $desH=round($desW/$srcP);
                }else{
                    $desH=$height;
                    $desW=round($desH*$srcP);
                }
            }
        }
        
        // php版本小于5.5
        if(version_compare(PHP_VERSION,'5.5.0','<'))
        {
            $desIm =imagecreatetruecolor($desW,$desH);
            if(imagecopyresample($desIm,$this->_im,0,0,0,0,$desW,$desH,$srcW,$srcH)){
                imagedestory($this->_im);
                $this->_im=$desIm;
                $this->_width =imagesx($desIm);
                $this->_height =imagesy($desIm);
            }
        }else{
            // imagescale使用给定的新宽度和高度缩放图像
          if($desIm=imagescale($this->_im,$desW,$desH)){
            $this->_im =$desIm;
            $this->_width =imagesx($desIm);
            $this->_height =imagesy($desIm);
          }
           
        }
        return $this;
    }
    /**
     * 百分比生成缩略图
     *
     * @param [type] $precent
     * @return void
     */
    public function resizeByPercent($percent){
        if(intval($percent)<=0){
            throw new \Exception('percent must be get 0 ');
        }
        $percent =intval($precent)>100?100:intval($precent);
        $percent =$precent/100;
        $desW =$this->_width*$precent;
        $desH=$this->_height*$precent;
        return $this->resize($desW,$desH);
    }
    /**
     * 生成水印
     *
     * @param string $water 水印图片
     * @param [type] $per 透明度
     * @return void
     */
    public function waterMask($water = '',$pct =60)
    {
        // 根据水印图像文件生成图像资源
        $waterInfo =$this->createImageByFile($water);
        imagecopymerge();
        // 销毁
        $this->_im =$waterInfo['im'];
        $this->_width=imagesx($this->_im);
        $this->_height=imagesy($this->_im);
        return $this;
    }
    /**
     * 旋转图片
     *
     * @param [type] $degree
     * @return void
     */
    public function rotate($degree)
    {
        $degree=360-intval($degree);
        $back=imagecolorallocatealpha($this->_im,0,0,0,127);
        $im=imagerotate($this->_im,$degree,$back,1);
        imagesavealpha($im,true);
        imagedestroy($this->_im);
        $this->_im =$im;
        $this->_width=imagesx($this->_im);
        $this->_height=imagesy($this->_im);
        return $this;
    }
    
    /**
     * 保存文件
     *
     * @param [type] $file
     * @param boolean $quality
     * @return void
     */
    public function save($file, $quality = true)
    {
        // 获取保存目的文件的扩展名
        $ext =pathinfo($file,PATHINFO_EXTENSION);
        $ext =strtolower($ext);
        if(!$ext||!in_array($ext,array('jpg','jpeg','png','gif'))){
            throw new \Exception('image save file must be jpg ,png,gif');
        }
        if($ext==='gif'){
            imagegif($this->_im,$file);
            return true;
        }
        if($ext==='jpeg' ||$ext==='jpg'){
            if($quality>0){
                if($quality<1){
                    $quality =1;
                }
                if($quality>100){
                    $quality =100;
                }
                imagejpeg($this->_im,$file,$quality);
            }else{
                imagejpeg($this->_im,$quality);
            }
           
            return true;
        }
        if($ext==='png'){
            imagepng($this->_im,$file);
            return true;
        }
    }
    
    /**
     * 图片输出
     *
     * @return void
     */
    public function show()
    {
        header('Content-Type:'.$this->_mime);
        // var_dump($this->_mime);exit;
        if($this->_type === 1){
            imagegif($this->_im);
            return true;
        }
        if($this->_type === 2){
            imagejpeg($this->_im,null,80);
            return true;
        }
        if($this->_type === 3){
            imagepng($this->_im);
            return true;
        }
    }
}
?>


index.php

<?php
// var_dump(gd_info());
require_once './lib/Image.php';
$image = new \Imooc\Lib\Image('../3.png');
// var_dump(gd_info());exit;
// var_dump($image->resize(200,200));exit;  
// $captcha->string(5,14)->show();
// $image->resize(200,200)->save('../3_200.png');
$image->resizeByPercent(78)->rotate(90)->show();
?>


标签: php
分享给朋友:

相关文章

实现PHPCMS里提交表单发送邮件功能

实现PHPCMS里提交表单发送邮件功能

使用phpcms自带的邮件发送功能实现前台页面表单提交时发送邮件1、首先在phpcms后台找到邮箱配置2、修改相关配置信息。我这里建议使用163的邮件服务器,因为我刚开始用的就是QQ,但是不好用。记得...

使用火车头采集文章并发布在PHPCMS里(新手看完即会)

使用火车头采集文章并发布在PHPCMS里(新手看完即会)

网上其实有免登录的方法 https://www.gwygd.com/rRz6bMWRO.html但是我用过,发现不能用,所以只好用了登录的方法,所幸成功了。首先下载火车头,里面有phpcms采集文章的...

 PHP入门基础之会话控制基础和实战

PHP入门基础之会话控制基础和实战

1、会话控制基础会话是具有逻辑关联的多个简单交互的集合简单交互模型逻辑关联http是无状态协议每个请求都是单独处理的,协议无法识别当前用户。有状态vs无状态  (跟朋友吃饭【不用二次介绍】...

使用PHPExcel函数对Excel表格数据进行操作并通过接口上传万条数据

使用PHPExcel函数对Excel表格数据进行操作并通过接口上传万条数据

PHPExcel函数下载地址:https://gitee.com/bin012/phpexcel-1.8 PHPOffice函数github地址:https://github.com/PHPOffic...

 PHP入门基础之PHP操作MySQL数据库

PHP入门基础之PHP操作MySQL数据库

1、PHP操作MySQL数据库的三种方式1.PHP mysql扩展PHP2.0版本开始引入,仅提供面向过程的接口通过调用函数实现例子:<?php     ...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

分享:

支付宝

微信