文章目录

  • 前提条件
    • 在PHP中加载GD库
    • GD的图像处理函数
  • 图像信息
    • 获取图像信息
  • 图像绘制
    • 创建画布
    • 定义颜色
    • 绘制图形
    • 绘制文字
  • 图像处理
    • 复制图像
    • 旋转图像
  • 应用实例
    • 图像水印
    • 图像验证码
  • 扩展——Jpgraph库的使用
    • Jpgraph库的安装配置
    • 使用Jpgraph创建图形的一般姿势

PHP能做很多事情,用于web开发只是冰山一角,如果你愿意或者你对PHP足够了解,你甚至可以用PHP来开发一条PS系统,是的,没错,PHP可以创建和处理包括GIF、PNG、JPEG、WBMP以及XPM在内的多种格式的图像。比PS等软件更加方便的是,PHP可以直接将图像数据流输出到浏览器。

前提条件

要在PHP中使用图像处理功能,需要加载GD库,或者安装其他的第三方图形库。

在PHP中加载GD库

一下内容引用自官方手册:

要激活 GD 支持,配置 PHP 时加上 –with-gd[=DIR] ,DIR 是 GD 的基本安装目录。要使用推荐的绑定的 GD 库版本(首次绑定于 PHP 4.3.0),使用 –with-gd 。要编译 GD 库,需要libpng 和 libjpeg。

在 Windows 中,需要将 GD2 的 DLL 文件 php_gd2.dll 作为一个扩展包含在 php.ini 中。GD1 的 DLL 文件 php_gd.dll 在 PHP 4.3.2 中被删除了。此外要注意首选的真彩色图像函数,例如imagecreatetruecolor(),需要 GD2。

自PHP5.0开始,就自带GD库了。

启用GD库,只需要将php.ini中extension=php_gd2.dll前面的“;”去掉即可。

GD的图像处理函数

函数 功能
gd_info 获得当前安装的GD库的信息,返回一个关联数组描述了安装的 GD 库的版本和性能。
getimagesize 取得图像大小
getimagesizefromstring 从字符串中获取图像尺寸信息
image_type_to_extension 取得图像类型的文件后缀
image_type_to_mime_type 取得getimagesize、exif_read_data、exif_thumbnail、exif_imagetype所返回的图像类型的MIME类型
image2wbmp 以WBMP格式将图像输出到浏览器或文件
imageaffine 返回经过仿射变换后的图像,剪切区域可选
imageaffinematrixconcat 连接两个仿射变换矩阵
imageaffinematrixget 得到一个仿射变换矩阵
imagealphablending 设定图像的混色模式
imageantialias 是否使用antialias(抗锯齿)功能
imageearc 画椭圆弧
imagechar 水平地画一个字符
imagecharup 垂直地画一个字符
imagecolorallocate 为一幅图像分配颜色
imagecolorallocatealpha 为一幅图像分配颜色+alpha
imagecolorat 取得某像素的颜色索引值
imagecolorclosest 取得指定的颜色最进阶的颜色索引值
imageclolorclosetalpha 取得与指定的颜色加透明度最接近的颜色
imagecolorclosesthwb 取得与给定颜色最仅仅的色度的黑白色的索引
imagecolordeallocate 取消图像颜色的分配
imagecolorexact 取得指定颜色的索引值
imagecolorexactalpha 取得指定的颜色加透明度的索引值
imagecolormatch 是一个图像中调色板版本的颜色与真彩色版本更能匹配
imagecolorresolve 取得指定颜色的索引值或有可能得到的最接近的替代值
imagecolorresolvealpha 取得指定颜色 + alpha 的索引值或有可能得到的最接近的替代值
imagecolorset 给指定调色板索引设定颜色
imagecolorsforindex 取得某索引的颜色
imagecolorstotal 取得一幅图像的调色板中颜色的数目
imagecolortransparent 将某个颜色定义为透明色
imageconvolution 用系数 div 和 offset 申请一个 3x3 的卷积矩阵
imagecopy 复制图像的一部分
imagecopymerge 复制并合并图像的一部分
imagecopymergegray 用灰度拷贝并合并图像的一部分
imagecopyresampled 重采样复制部分图像并调整大小
imagecopyresized 复制部分图像并调整大小
imagecreate 新建一个基于调色板的图像
imagecreatefrombmp 由BMP文件或 URL 创建一个新图象。
imagecreatefromgd2 从GD2文件或URL新建一个图像
imagecreatefromgd2part 从给定的GD2文件或URL中的部分新建一个图像
imagecreatefromgd 从GD文件或URL新建一个图像
imagecreatefromgif 从gif文件或URL新建一个图像
imagecreatefromjpeg 从JPEG文件或URL新建一个图像
imagecreatefrompng 从PNG文件或URL新建一个图像
imagecreatefromstring 从字符串中的图像流新建一图像
imagecreatefromwbmp 从WBMP文件或URL新建一个图像
imagecreatefromxbm 从XBM文件或URL新建一个图像
imagecreatefromxpm 从XPM文件或URL新建一个图像
imagecreatetruecolor 新建一个真彩色图像
imagecrop 剪裁图像到给定的矩形
imagecropauto 使用一种模式自动剪裁图像到给定矩形
iamgedashedline 画一虚线
imagedestroy 销毁一图像
imageellipse 画一个椭圆
imagefill 区域填充
imagefilledarp 画一椭圆弧且填充
imagefilledellipse 画一椭圆并填充
imagefilledpolygon 画一多边形并填充
imagefilledrectangle 画一矩形并填充
imagefilltoborder 区域填充到指定颜色的边界为止
imagefilter 对图像使用过滤器
imageflip 使用给定模式翻转图像
imagefontheight 取得字体高度
imagefontwidth 得字体宽度
imageftbbox 给出一个使用 FreeType 2 字体的文本框
imagefttext 使用 FreeType 2 字体将文本写入图像
imagegammacorrect 对 GD 图像应用 gamma 修正
imagegd 将 GD 图像输出到浏览器或文件
imagegd2 将 GD2 图像输出到浏览器或文件
imagegetclip 得到剪裁矩形
imagegif 以GIF格式将图像输出到浏览器或文件
imagegrabscreen 捕获整个屏幕
imagegrabwindow 捕获一个窗口
imageinterlace 激活或禁止隔行扫描
imageistruecolor 检查图像是否为真彩色图像
imagejpeg 以JPEG格式将图像输出到浏览器或文件
imagelayereffect 设定alpha混色标志以使用绑定的libgd分层效果
imageline 画一条直线
imageloadfont 载入一个新字体
imagepalettecopy 将调色板从一幅图像拷贝到另一幅
imagepalettetotruecolor 将基于调色板的文件转换为真彩色
imageopenpolygon 画一个开放多边形
imagepng 以PNGF格式将图像输出到浏览器或文件
imagepolygon 画一个多边形
imagerectangle 画一个矩形
imagerotate 用给定角度旋转图像
imagesetstyle 设定画线的风格
imagesetthickness 设定画线的宽度
imagesx 取得图像宽度
imagesy 取得图像高度
imagetruecolortopalette 将真彩色图像转换为调色板图像
imagettfbbox 取得使用 TrueType 字体的文本的范围
imagettftext 用 TrueType 字体向图像写入文本

图像信息

获取图像信息

  1. getimagesize()
    函数定义:

    getimagesize(string $filename[, array &$imageinfo]):array
    

    该函数将测定任何JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通HTML 文件中 IMG 标记中的 height/width 文本字符串。如果filename指定的图像不能访问或者不是一个有效的图像文件,该函数将返回FALSE并产生一条E_WARNING级别的错误。

    参数:

    • filename:待测定的图像文件路径。
    • imageinfo:可选参数imageinfo允许从图像文件中提取一些扩展信息。它将以关联数组返回不同的JPG文件的APP标识。一些程序用这些APP标识来在图像中嵌入文本信息。一个非常常见的是在APP13标识中嵌入IPTC信息。可以用iptcparse()函数来将二进制的APP13标识解析为可读的信息。

    返回值:

    该函数返回一个具有四个元素的数组。索引 0 包含图像宽度的像素值,索引 1 包含图像高度的像素值。索引 2 是图像类型的标记:1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。这些标记与 PHP 4.3.0 新加的 IMAGETYPE 常量对应。索引 3 是文本字符串,内容为"height=“yyy” width=“xxx”",可直接用于 IMG 标记。

    该函数还会返回额外的参数mime,符合该图像的MIME类型。此信息可以用来在HTTP Content-type头信息中发送正确的信息。对于JPG图像,还会多返回两个索引:channels和bits。对于RGB图像,channels值为3;对于CMYK图像,channels值为4。bits是每种颜色的位数。

    【示例】

    <?php
    echo "<pre>";
    // 查看gd库信息
    print_r(gd_info());$imageinfo = array();// 获取图像信息
    print_r(getimagesize('1.jpg', $imageinfo));
    echo "<br />";
    var_dump($imageinfo);
    echo "</pre>";
    

    程序输出结果: 在这里插入图片描述

    通过以上打印结果可知,该图像的宽度为650,高度为344,索引值为2的值为2说明图像是jpg图像,除此之外,还获得了图像的channels、bits以及mime类型。

  2. getimagesizeformstring()
    该函数与getimagesize()函数相同。不同之处在于该函数第一个参数是图像数据的字符串表达,而不是文件名。该函数定义如下:

    getimagesizefromstring(string $imagedata[, array &$imageinfo]):array
    

    参数:

    • imagedata:图像数据的字符串表示。
    • imageinfo:与getimagesize()函数的imageinfo参数相同。

    返回值:

    getimagesize()函数返回值相同。

    【示例】

    <?php
    // 以文件名方式打开
    $img = '1.jpg';
    $img_info1 = getimagesize($img);// 以字符串格式打开
    // 首先将图片读入到流中
    $img_data = file_get_contents($img);
    $img_info2 = getimagesizefromstring($img_data);// 输出图片信息
    echo "<pre>";
    print_r($img_info1);
    print_r($img_info2);
    echo "</pre>";
    

    程序输出结果:

    在这里插入图片描述

    从输出可以看到,两个函数返回的结果是一致的,只是使用函数时图像文件的打开方式不同。

  3. imagesx()imagesy()
    这两个函数分别获取图像的宽度和高度,先来看一下函数定义:

    imagesx(resource $img):int
    imagesy(resource $img):int
    

    这两个函数都接收一个img资源作为参数,分别返回所代表的图像的宽度和高度。

    这两个函数没什么可说,使用起来也很简单,没什么可说的。

    【示例】

    <?php
    // 创建一个resource
    $img = imagecreatetruecolor(300, 200);
    echo imagesx($img) . "<br />";
    echo imagesy($img) . "<br />";
    

    以上代码会分别输出300和200。

图像绘制

PHP中的GD库可用于创建和处理图片,一般通过以下4个步骤对图像进行操作。

  1. 创建画布
  2. 在画布上绘制图形
  3. 保存并输出结果图像
  4. 销毁图像资源

创建画布

使用imagecreate()函数可以创建一个基于调色板的图像。语法如下:

imagecreate(int $x_size, int $y_size):resource

该函数返回一个图像资源,代表了一幅大小为x_sizey_size的空白图像。

【示例】

<?php
// 设置mime类型
header("Content-type: image/png");// 第一步:创建画布
$im = @imagecreate(100, 50) or die("无法初始化新的GD图像流");
// 第二步:在画布上创建图像
// 设置背景色
$background_color = imagecolorallocate($im, 255, 255, 255);
// 设置文字颜色
$text_color = imagecolorallocate($im, 233, 14, 91);
// 在画布上画一个字符串
imagestring($im, 1, 5, 5, "A Simple Text String", $text_color);
// 第三步:保存并输出图像
imagepng($im);
// 第四步:销毁图像资源
imagedestroy($im);

程序输出结果:

在这里插入图片描述

也可以使用imagecreatetruecolor()创建画布资源。并且系统推荐使用此函数。其函数定义如下:

imagecreatetruecolor(int $width, int $height):resource

该函数创建一个基于真彩色的图像。也返回一个图像资源,代表了一幅大小为widthheight的黑色图像。

【示例】

<?php
// 设置mime类型
header("Content-type: image/png");// 第一步:创建画布
$im = @imagecreatetruecolor(100, 50) or die("无法初始化新的GD图像流");
// 第二步:在画布上创建图像
// 设置文字颜色
$text_color = imagecolorallocate($im, 233, 14, 91);
// 在画布上画一个字符串
imagestring($im, 1, 5, 5, "A Simple Text String", $text_color);
// 第三步:保存并输出图像
imagepng($im);
// 第四步:销毁图像资源
imagedestroy($im);

程序输出结果:

在这里插入图片描述

注意:以上函数中在图像中输出的字符串为英文,如果是中文字符串将显示乱码,要输出中文最好使用imagettftext()函数。

定义颜色

既然要处理图像,自然少不了和颜色打交道,在PHP中可以使用imagecolorallocate()函数来指定颜色,其函数定义如下:

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

该函数返回一个标识符,代表了由给定的RGB成分组成的颜色。redgreenblue分别是所需要的颜色的红、绿、蓝成分。这些参数是0到255的整数或者十六进制的0x00到0xFF。

PHP中还有一个imagecolorallocatealpha()函数,可以给图像分配颜色,同时还能指定透明度。其函数定义如下:

imagecolorallocatealpha(resource $image, int $red, int $green, int $blue, int $alpha):int

该函数的行为同imagecolorallocate()相同,只是多了一个额外的透明度参数alpha,其值从0到127。0表示完全不透明,127表示完全透明。

以上两个函数在颜色分配失败时都返回FALSE。

【示例】

<?php
// 不要忘记设置mime类型,否则无法输出图像
header("Content-type: image/png");// 第一步:创建画布
$size = 300;
// 创建一个300×300的画布
$im = imagecreatetruecolor($size, $size);
// 第二步:在画布上创建图像
// 用白色背景加黑色边框画个方框
// 设置白色背景
$back = imagecolorallocate($im, 255,255,255);
// 设置黑色边框
$border = imagecolorallocate($im, 0, 0, 0);
// 用白色背景填充一个矩形
imagefilledrectangle($im, 0, 0, $size - 1, $size - 1, $back);
// 画一个矩形不填充颜色,设置边框颜色为黑色
imagerectangle($im, 0, 0, $size-1, $size - 1, $border);
// 在矩形中绘制三个圆
// 指定圆的坐标
$yellow_x = 100;
$yellow_y = 75;
$red_x = 120;
$red_y = 165;
$blue_x = 187;
$blue_y = 125;
// 设置圆的半径
$radius = 150;// 用alpha值分配一些颜色
$yellow = imagecolorallocatealpha($im, 255, 255, 0, 75);
$red = imagecolorallocatealpha($im, 255, 0, 0, 75);
$blue = imagecolorallocatealpha($im, 0, 0, 255, 75);// 在矩形中画出三个交迭的圆
imagefilledellipse($im, $yellow_x, $yellow_y, $radius, $radius, $yellow);
imagefilledellipse($im, $red_x, $red_y, $radius, $radius, $red);
imagefilledellipse($im, $blue_x, $blue_y, $radius, $radius, $blue);// 第三步:保存并输出图像
imagepng($im);// 第四步:销毁图像资源
imagedestroy($im);

程序输出结果:

在这里插入图片描述

绘制图形

PHP的GD库提供了许多绘制图像的函数,可以像画图工具一样,绘制一些简单的形状图形。

  1. 绘制椭圆
    使用imageellipse()函数可以绘制一个椭圆,其函数定义如下:

    imageellipse(resource $image, int $cx, int $cy, int $width, int $height, int $color):bool
    

    该函数在指定坐标上画一个椭圆。成功时返回TRUE,否则返回FALSE。

    参数:

    • image:由图像创建函数返回的图像资源。
    • cx:圆心的X坐标。
    • cy:圆心的Y坐标。
    • width:椭圆的宽度。
    • height:椭圆的高度。
    • color:椭圆的颜色。

    【示例】

    <?php
    // 新建一个画布
    $im = imagecreatetruecolor(400, 300);
    // 填充背景色
    $bg = imagecolorallocate($im, 0, 0, 0);
    // 选择椭圆的颜色
    $color_ellipse = imagecolorallocate($im, 255, 255, 255);
    // 在画布上画出椭圆
    imageellipse($im, 200, 150, 300, 200, $color_ellipse);
    // 输出图像
    header("Content-type: image/png");
    imagepng($im);
    // 关闭图像资源
    imagedestroy($im);
    

    程序输出结果:

    在这里插入图片描述

    还有一个函数imagefilledellipse()也是绘制一个椭圆,区别是它会为椭圆填充指定的color颜色。

  2. 绘制多边形
    PHP中使用imagepolygon()imagefilledpolygon()函数绘制多边形,函数定义如下:

    imagepolygon(resource $image, array $points, int $num_points, int $color):bool
    imagefilledpolygon(resource $image, array $points, int $numn_points, int $color):bool
    

    以上两个函数都是用来创建多边形的。参数points是一个PHP数组,包含了多边形的各个顶点坐标,参数num_points是顶点的总数。两个函数的区别在于一个用color作为边框颜色,一个用color作为填充颜色。

    【示例】

    <?php
    // 新建一个画布
    $im = imagecreatetruecolor(800, 600);
    // 填充背景色
    $bg = imagecolorallocate($im, 0, 0, 0);
    // 为多边形设置边框或填充的颜色
    $color_polygon = imagecolorallocate($im, 255, 255, 255);
    // 在画布上画出无填充的多边形
    imagepolygon($im,array(0, 0,100, 200,300, 200),3,$color_polygon);
    // 在画布上画出填充的多边形
    imagefilledpolygon($im,array(300, 400,200, 600,500, 500),3,$color_polygon);
    // 输出图像
    header("Content-type: image/png");
    imagepng($im);
    // 关闭图像资源
    imagedestroy($im);
    

    程序输出结果:

    在这里插入图片描述

  3. 绘制矩形
    在PHP中使用imagerectangle()imagefilledrectangle()函数来绘制矩形,函数语法格式如下:

    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):bool
    

    以上两个函数用col颜色在image图像资源中画一个矩形,其左上角坐标为x1, y1, 右下角坐标为x2, y2.图像的左上角坐标为0,0。

    【示例】

    <?php
    // 新建一个画布
    $im = imagecreatetruecolor(250, 250);
    // 填充背景色
    $bg = imagecolorallocate($im, 10, 110, 25);
    // 设置矩形填充色
    $color_rectangle = imagecolorallocate($im, 0, 0, 255);
    // 在画布上画出填充矩形
    imagefilledrectangle($im, 100, 200, 50, 50, $color_rectangle);
    // 输出图像
    header("Content-type: image/png");
    imagepng($im);
    // 关闭图像资源
    imagedestroy($im);
    

    程序输出结果:

    在这里插入图片描述

  4. 绘制椭圆弧
    在PHP中使用imagearc()imagefilledarc()绘制椭圆弧,其函数定义如下:

    imagearc(resource $image, int $cx, int $cy, int $w, int $h, int $s, int $e, int $color):bool
    imagefilledarc(resource $image, int $cx, int, $cy, int $w, int $h, int $s, int $e, int color, int $style):bool
    

    以上两个函数以cxcy(图像左上角为0,0)为中心在image所代表的图像中画一个椭圆弧。wh分别制定了椭圆的宽度和高度,起始和结束点以se参数为角度指定。0°位于三点钟位置,以顺时针方向绘制。

    【示例】

    <?php
    // 新建一个画布
    $im = imagecreatetruecolor(200, 200);
    // 填充背景色
    $bg = imagecolorallocate($im, 0, 0, 0);
    // 设置圆弧填充色
    $color_arc = imagecolorallocate($im, 255, 255, 255);
    // 在画布上画出图像
    imagearc($im, 100, 100, 150, 150, 0, 360, $color_arc);
    // 输出图像
    header("Content-type: image/png");
    imagepng($im);
    // 关闭图像资源
    imagedestroy($im);
    

    程序输出结果:

    在这里插入图片描述

    绘制文字

    PHP中还提供了多个绘制文字的函数。

    1. imagechar水平地画一个字符
      该函数定义如下:

      imagechar(resource $image, int $font, int $x, int $y, string $c, int $color):bool
      

      该函数将字符串c的第一个字符画在image指定的图像中,其左上角位于xy(图像左上角为0,0),颜色为color。如果font是1,2,3,4,5,则使用内置字体(更大的数字对应于更大的子图。)

      【示例】

      <?php
      // 第一步:创建画布
      $im = imagecreate(100, 100);// 第二步:绘制图像
      $string = 'PHP';
      // 定义背景色
      $bg = imagecolorallocate($im, 255, 255,255);
      // 定义字体颜色
      $font_color = imagecolorallocate($im, 0, 0, 0);
      // 在图像的左上角打印一个黑色的P
      imagechar($im, 1, 40, 40, $string, $font_color);// 第三步:输出图像
      header('Content-type: image/png');
      imagepng($im);
      // 第四步:关闭图像资源
      imagedestroy($im);
      

      程序输出结果:

      在这里插入图片描述

    2. imagecharup()垂直地画一个字符
      该函数语法格式与imagechar()相同,区别只是字符的方向不同,这里不再累述。

    3. imagefttext()将文本写入图像
      该函数定义如下:

      imagefttext(resource $image, float $size, float $angle, int $x, int $y, int $color, string $fontfile, string $text[, array $extrainfo]):array
      

      该函数使用FreeType2字体将文本写入图像。

      参数:

      • image:由图像穿件函数返回的图像资源。
      • size:以像素点位点位的字体大小。
      • angle:角度(以度为单位),0度表示从左向右输出文本。较高的值表示逆时针旋转。例如,值为90将导致自下而上的输出文本。
      • x,y:x和y给出的坐标将定义第一个字符的基点(大致是字符的左下角)。这与imagestring()不同,后者中x和y定义第一个字符的左上角。
      • color:字体颜色。
      • fontfile:字体路径。
      • text:输出文本。

      【示例】

      <?php
      // 第一步:创建画布
      $im = imagecreatetruecolor(300, 100);// 第二步:绘制图像
      // 定义背景色
      $red = imagecolorallocate($im, 0xFF, 0x00, 0x00);
      // 定义字体颜色
      $black = imagecolorallocate($im, 0x00, 0x00, 0x00);
      // 画一个红色填充的矩形
      imagefilledrectangle($im, 0, 0, 299, 99, $red);
      // 定义字体路径,(这里的1.ttf与程序文件在同一目录下)
      $font_file = '1.ttf';
      // 使用13号字,画出字符串'I LOVE PHP'
      imagefttext($im, 30, 20, 55, 85, $black, realpath($font_file), "I LOVE PHP");// 第三步:输出图像
      header('Content-type: image/png');
      imagepng($im);
      // 第四步:关闭图像资源
      imagedestroy($im);

      程序输出结果:

      在这里插入图片描述

      注意:由于GD库版本更新后,字体路径需要使用绝对路径,所以以上代码中使用realpath()来获得1.ttf的绝对路径。

      同样的,想让该函数成功的输出中文,需要指定中文字体。

    4. 使用TrueType字体处理中文生成图片
      在PHP中有imagestring()imagefttext()等函数用来生成字符串图片,但是它们支持的默认字体是十分有限的。TrueType字体是字体中极其常用的格式。PHP使用GD2库,在windows环境下,需要给出TrueType字体所在的文件夹路径,可以在程序开头加入以下语句,引入系统字库:
      putenv('GDFONTPATH=c:\WINDOWS\Fonts');
      使用TrueType字体也可以直接使用imagettftext()函数,即使用ttf字体的imagestring()函数,其定义如下:

      imagettftext(resource $image, float $size, float $angle, int $x, int $y, int $color, string $fontfile, string $text):array
      

      该函数使用TrueType字体将指定的text写入图像,函数返回一个含有8个元素的数组,分别表示了文本外框的四个角的坐标,顺序为左下角、右下角、右上角、左上角。这些点相对于文本和角度无关,因此左上角指的是以水平方向看文字时其左上角。

      参数:

      • image:由图像创建函数返回的图像资源。
      • size:字体的尺寸。根据GD的版本,为像素尺寸(GD1)或点(磅)尺寸(GD2)。
      • angle:角度,0度为从左向右的文本。角度按逆时针旋转。
      • x,y:定义了第一个字符的基本点(大概是字符的左下角)。
      • color:字体颜色。
      • fontfile:TrueType字体的路径。
      • text:UTF-8编码的文本字符串。可以包含十进制数字化字符表示(形式为:&#8364;)来访问字体中超过位置 127 的字符。UTF-8 编码的字符串可以直接传递。 命名实体,比如&copy;是不支持的。可以考虑使用 html_entity_decode() 来解码命名实体为 UTF-8 字符。如果字符串中使用的某个字符不被字体支持,将使用一个空心矩形替换该字符。(也就是所谓的乱码)

      【示例】

      <?php
      // 引入系统字库
      putenv('GDFONTPATH=c:\WINDOWS\Fonts');
      // 定义画布尺寸
      $xsize = 300;
      $ysize = 200;
      // 创建画布
      $im = imagecreatetruecolor($xsize, $ysize);
      // 定义背景色
      $bg = imagecolorallocate($im, 8, 2, 133);
      // 定义字体颜色
      $font_color = imagecolorallocate($im, 230, 22, 22);
      // 填充画布
      imagefill($im, 0, 0, $bg);
      // 定义字体
      $font_file = 'simhei.ttf';
      // 定义字符串
      $text = "这是一个把中文用黑体显示的图片。";
      // 如果你的编辑器使用的不是UTF-8编码,则需要将中文编码转换为UTF-8
      // $text = iconv("GB2312", "UTF-8", $text);
      // 将字符串画到画布上
      imagettftext($im, 12, 0, 20, 100,$font_color, $font_file, $text);// 输出图像
      header('Content-type: image/png');
      imagepng($im);// 关闭图像资源
      imagedestroy($im);
      

      程序输出结果:

      在这里插入图片描述

图像处理

复制图像

imagecopy()可用来复制图像,其函数定义如下:

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

该函数将src_im图像中坐标从src_xsrc_y开始,宽度为src_w,高度为src_h的一部分拷贝到dst_im图像中坐标为dst_xdst_y的位置上。

【示例】

<?php
$imdst = imagecreatefromjpeg('2.jpg');
$imsrc = imagecreatefromjpeg('1.jpg');
imagecopy($imdst, $imsrc, 40, 50, 40, 50, 160, 100);
header('Content-type: image/jpeg');
imagejpeg($imdst);
imagedestroy($imdst);
imagedestroy($imsrc);

程序输出结果:

原图如下:1.jpg

在这里插入图片描述

2.jpg

在这里插入图片描述

程序输出图:

在这里插入图片描述

旋转图像

函数imagerotate()可将图像旋转一个给定的角度。函数定义如下:

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

该函数返回将src_im图像用给定的angle角度旋转后的图像资源。bgd_color指定了旋转后没有覆盖到的部分的颜色。旋转的中心是图像的中心,旋转后的图像会按比例缩小以适合目标图像的大小——边缘不会被剪去。

参数:

  • image:由图像创建函数返回的图像资源。
  • angle:旋转角度,以逆时针方向旋转图像。
  • bgd_color:指定旋转后覆盖区域的颜色。
  • ignore_transparent:如果被设为非零值,则透明色会被忽略(否则会被保留)。

【示例】

<?php
// 待旋转的图片文件名
$filename = '1.jpg';
// 旋转角度
$degrees = 100;
// 定义HTTP头
header('Content-type: image/jpeg');
// 加载图像
$source = imagecreatefromjpeg($filename);
// 旋转图像
$rotate = imagerotate($source, $degrees, 0);
// 输出旋转后的图像
imagejpeg($rotate);// 关闭资源
imagedestroy($rotate);
imagedestroy($source);

程序输出结果:

在这里插入图片描述

应用实例

图像水印

图像水印的原理就是把一张图片复制到另一张背景图片上。GD库的imagecopymerge()函数,可以实现图片水印,该函数定义如下:

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

该函数将src_im图像中坐标从src_xsrc_y开始,宽度为src_w,高度src_h的一部分拷贝到dst_im图像中坐标为dst_xdst_y的位置上。两图像将根据pct来决定合并程度,其值范围从0到100。当pct=0时,实际上什么也没做,当为100时对于调色板图像本函数和imagecopy()完全一样,它对真彩色图像实现了alpha透明。

【示例】

<?php
// 加载待添加水印的图片
$imgdst = imagecreatefromjpeg('1.jpg');
// 创建水印图像
$water = imagecreate(200, 50);
// 设置透明背景
$bg = imagecolorallocatealpha($water, 0, 0, 0, 127);
// 设置水印文字
$text = 'I am water';
// 设置文字颜色
$black = imagecolorallocate($water,255, 255, 255);
// 设置字体路径
$font_file = '1.ttf';
// 关闭混合模式,以便透明颜色能覆盖原画板
imagealphablending($water, false);
// 用透明色填充背景
imagefill($water, 0, 0, $bg);
// 创建水印图像
imagefttext($water, 12, 20,10, 48, $black, realpath($font_file), $text);
// 将水印加入图片
imagecopymerge($imgdst, $water, 20, 200, 0, 0, 200, 50, 30);
// 输出图片
header('Content-type: image/jpeg');
imagepng($imgdst);// 关闭图像资源
imagedestroy($imgdst);
imagedestroy($water);

程序输出结果:

在这里插入图片描述

图像验证码

图像验证码的原理就是生成一张图片,然后在图片上写入字符,并辅之一些干扰元素(通常为像素点和斜线)。图像验证码经常用在用户登陆、发帖等验证场景中,其目的是为了防止机器人(程序)自动操作,验证此行为来自用户。

【示例】

<?php
function random($len) {// 组成验证码的字符集合,一般情况下会去掉01小写l等容易混淆的字符$srcstr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ23456789";// 设置随机数种子mt_srand();$captcha_text = "";// 循环生成验证码字符串for ($i = 0; $i < $len; $i++) {$captcha_text .= $srcstr[mt_rand(0, strlen($srcstr))];}// 返回验证码字符串return strtoupper($captcha_text);
}
// 生成验证码字符串
$captcha = random(4);
// 设置验证码宽度
$width = 50;
// 设置验证码高度
$height = 25;
@header("Content-type:image/png");// 创建验证码图像
$im = imagecreate($width, $height);
// 设置背景色
$back = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
// 模糊点颜色
$pix = imagecolorallocate($im, 187, 230, 247);
// 设置字体颜色
$font = imagecolorallocate($im, 41, 163, 238);
// 绘制模糊点
mt_srand();
for ($i = 0; $i < 1000; $i++) {imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $pix);
}
// 将验证码写入图片
imagestring($im, 5, 7, 5, $captcha, $font);
imagerectangle($im, 0, 0, $width-1, $height -1, $font);
imagepng($im);// 关闭图像资源
imagedestroy($im);

程序输出结果:

在这里插入图片描述

以上代码是为了理解验证码生成的原理,下面给出一个验证码类,用面向对象的方式再实现验证码的生成,也算是复习一下面向对象的知识。

tips:建议以类名+.class+.php的方式来命名类文件

<?php
/*** 文件名:captcha.class.php* 验证码类*/
class Captcha {private $width;     // 验证码宽度private $height;    // 验证码高度private $codeNum;   // 验证码中的字符数private $type;      // 验证码类型,0=数字,1=字母,2=字母+数字(默认值)private $font_file; // 验证码字体private $dot;       // 干扰点数量private $line;      // 干扰线数量private $image;     // 验证码图像private $chars;     // 验证码字符串/* 构造函数 */function __construct($width=100, $height=40, $codeNum=4, $type=2, $session='captcha', $font_file='1.ttf', $dot=50, $line=4){// 开启sessionsession_start();$this->width = $width;$this->height = $height;$this->codeNum = $codeNum;$this->type = $type;$this->session = $session;$this->font_file = $font_file;$this->dot = $dot;$this->line - $line;$this->image = $this->createCaptchaImage();$this->chars = $this->createCaptchaText();// 将生成的验证码放入session,以便用于验证$_SEESION[$this->session] = $this->chars;}// 穿件验证码画布private function createCaptchaImage(){$image = imagecreatetruecolor($this->width, $this->height);return $image;}// 生成随机验证码字符串private function createCaptchaText(){switch ($this->type){case 0:$chars = implode('', range(0, 9));break;case 1:$chars = implode('', array_merge(range('A', 'Z'), range('a', 'z')));break;case 2:$chars = implode('', array_merge(range(0, 9), range('A', 'Z'), range('a', 'z')));break;default:break;}if (!empty($chars)) {$chars = str_shuffle($chars);   // 打乱字符排列顺序}// 截取字符if ($this->codeNum > strlen($chars)) {exit('验证码长度超出限制!');}else {$chars = substr($chars, 0, $this->codeNum);}// 返回验证码字符串return $chars;}// 生成干扰元素private function interferon(){// 生成干扰线for ($i = 0; $i < $this->line; $i++) {// 生成随机颜色$color = imagecolorallocate($this->image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));imageline($this->image, mt_rand(0, $this->width - 1), mt_rand(0, $this->height - 1), mt_rand(0, $this->width - 1), mt_rand(0, $this->height - 1), $color);}// 生成干扰点for ($i = 0; $i < $this->dot; $i++) {$color = imagecolorallocate($this->image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));imagesetpixel($this->image, mt_rand(0, $this->width - 1), mt_rand(0, $this->height - 1), $color);}}// 生成并输出验证码图像public function captcha($red=232, $green=155, $blue=55) {$color = imagecolorallocate($this->image, $red, $green, $blue);imagefilledrectangle($this->image, 0, 0, $this->width, $this->height, $color);for($i = 0; $i < $this->codeNum; $i++) {$size = mt_rand(16, 18);$angle = mt_rand(-15, 15);$x = 10 + $i * $size;$y = mt_rand(20, 26);$color = imagecolorallocate($this->image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));$text = substr($this->chars, $i, 1);imagettftext($this->image, $size, $angle, $x, $y, $color, realpath($this->font_file), $text);}$this->interferon();header('Content-type:image/gif');imagegif($this->image);imagedestroy($this->image);}
}// 使用方法
$captcha = new Captcha();
$captcha->captcha();

程序输出结果:

在这里插入图片描述

扩展——Jpgraph库的使用

Jpgraph是一个功能强大且十分流行的PHP第三方图片处理库,其建立在内部库文件GD2基础之上。优点是建立了很多方便操作的对象和函数,能够大大简化使用GD库对图片进行处理的编码过程。

Jpgraph库的安装配置

  1. 登陆Jpgraph官网 下载最新的Jpgraph压缩包。
    在这里插入图片描述
  2. 将文件解压,(推荐放到你项目目录下)
  3. 修改php.ini文件:
    • 内存 memory_limit=X,至少为32M
    • 执行时间max_execution_time=X,对于复杂的图片加载时需要较多的时间,官方推荐为30秒,可以根据图片的复杂度做相应的修改
    • 在开发环境中注释掉缓存output_buffering,便于调试,生产环境关闭。

使用Jpgraph创建图形的一般姿势

  1. 包含所需的类库文件
    require_once();
  2. 初始化数据
    $data = array();
    这里的数据可以是静态的,也可以是动态的,也可以是通过GET或POST方法传递的。
  3. 创建Graph类实例
    $graph = new Graph();
    可以同时设置图形的尺寸
  4. 设置标题、X轴标题、Y轴标题的内容,以及字体、颜色、位置等
  5. 创建对应的图实例
    可以是折线图、柱形图、饼状图、3D图等
  6. 将数据添加到图形上
    $graph->Add();
  7. 显示图片
    $graph->Stroke();
  8. 解决中文乱码Gpgraph默认显示汉字时是把汉字编码认为gb2312,转化为utf-8以后再显示,如果文件的编码方式是gb2312,只需把SetFont()方法的第一个参数设置为FF_SIMSUN即可如果是utf-8编码的,需要先把汉字编码转化为gb2312,这样汉字才能正常显示转换编码方式可以使用: iconv("UTF-8","gb2312",$x);

Jpgraph压缩包中自带了大量的demo,下面使用barlinealphaex1.php来说明其用法,该文件在Jpgraph库的src/Example目录下。其代码如下:

<?php
// 包含文件需要修改
// 加载jpgraph的基本类库
require_once ('jpgraph/src/jpgraph.php');
// 加载柱状图类库
require_once ('jpgraph/src/jpgraph_bar.php');
// 加载折线图类库
require_once ('jpgraph/src/jpgraph_line.php');// 定义柱状图和折线图在Y轴上的数据坐标,也是图形展示的主要信息
$ydata  = array(10,120,80,190,260,170,60,40,20,230);
$ydata2 = array(10,70,40,120,200,60,80,40,20,5);// 定义了月份使用短格式显示
$months = $gDateLocale->GetShortMonth();// 创建图形$graph,宽300,高200
$graph = new Graph(300,200);
// 设置刻度为自动生成的刻度形式
$graph->SetScale("textlin");
// 设置图形边框颜色为白色
$graph->SetMarginColor('white');// 调整边框宽度
$graph->SetMargin(30,1,20,5);// 在背景图上添加边框
$graph->SetBox();// 取消整个图片的边框
$graph->SetFrame(false);// 设置标题和字体
$graph->tabtitle->Set('Year 2003');
$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,10);// 设置x坐标,y坐标的颜色、字体和是否显示
$graph->ygrid->SetFill(true,'#DDDDDD@0.5','#BBBBBB@0.5');
$graph->ygrid->SetLineStyle('dashed');
$graph->ygrid->SetColor('gray');
$graph->xgrid->Show();
$graph->xgrid->SetLineStyle('dashed');
$graph->xgrid->SetColor('gray');// 使用$months变量中的数据设置X轴显示字体及角度
$graph->xaxis->SetTickLabels($months);
$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8);
$graph->xaxis->SetLabelAngle(45);// 使用$ydata数据生成柱状图,定义柱状图的宽度为0.6,
$bplot = new BarPlot($ydata);
$bplot->SetWidth(0.6);
$fcol='#440000';
$tcol='#FF9090';
// 填充柱状图,并且使用填充的渐变样式和两个渐变的颜色。
$bplot->SetFillGradient($fcol,$tcol,GRAD_LEFT_REFLECTION);// Set line weigth to 0 so that there are no border
// around each bar
$bplot->SetWeight(0);$graph->Add($bplot);// 使用$ydata2数据生成折线图
$lplot = new LinePlot($ydata2);
$lplot->SetFillColor('skyblue@0.5');
$lplot->SetColor('navy@0.7');
$lplot->SetBarCenter();$lplot->mark->SetType(MARK_SQUARE);
$lplot->mark->SetColor('blue@0.5');
$lplot->mark->SetFillColor('lightblue');
$lplot->mark->SetSize(6);$graph->Add($lplot);// 将图像输出到浏览器
$graph->Stroke();
?>

程序输出结果:

在这里插入图片描述

该第三方库还有许多其他图形,请自行研究吧。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 更换eclipse[Version: 2019-03 (4.11.0)]颜色主题

    点击Help–>Eclipse Marketplace…–>Popular。在下面找到(我按网上有些人的说法并未搜到Eclipse Color Theme1.0.0,所以自己摸索了)DevStyle Theme,点击install进行安装。安装完成后,重启,点击window–>preferences–>General–>Appearance选中DevStyle…...

    2024/4/12 3:41:36
  2. js中递归函数的使用方法 小例子

    分享下js递归函数用法,所谓递归函数就是在函数体内调用本函数。 使用递归函数一定要注意,处理不当就会进入死循环。 例子,用js递归函数计算10以内的阶乘、<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/…...

    2024/4/18 5:48:13
  3. 如何修改eclipse的主题颜色、背景颜色、编辑框颜色

    用eclipse久了,白色背景让人眼疼。怎么修改背景像Android studio那样了,这是我设置好了的截图:大家看好了,我说的是更改整个eclipse页面的颜色的方法,需要下载插件,那么到哪里下载?下载后放到哪里,怎么配置呢?方案一:我3年前写的旧方法已经被封了之后,想开始写新方法…...

    2024/4/12 3:41:18
  4. RGB565部分常用颜色对照表

    /* some RGB565 color definitions */#define BLACK 0x0000 // 黑色 #define NAVY 0x000F // 深蓝色 #define DGREEN 0x03E0 // 深绿色 #define DCYAN 0x03EF // 深青色 #define MAROON 0x7800 …...

    2024/3/31 16:43:56
  5. js递归函数return结果

    最近刚做了一个项目,用到了递归,需要我自己用最底层的id一层一层的往上找,然后把找到的名字连成一个面包屑导航,我就想啊,写个递归还挺简单的嘛但是,当时我就想把递归的结果return出来,始终无法成功,结果取了个巧出来了,但是我不服啊!于是自己写了一个demo,特喵的居…...

    2024/4/12 3:41:42
  6. opencv3学习笔记(三)RGB HSV YUV相互转换

    一.知识点 1.RGB模式 RGB模式是基于自然界中3种基色光的混合原理,将红(Red)、绿(Green)和蓝(Blue)3中基色按照从0(黑)到255(白色)的亮度值在每个色阶中分配,从而指定其色彩。 3个字节 每个字节8位 表示0-255 黑色(0,0,0);白色(255,255,255);第一个字节B蓝…...

    2024/4/12 3:41:42
  7. js递归函数解析:阶乘示例

    递归程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可…...

    2024/4/12 3:42:54
  8. Eclipse在线安装color-theme主题

    添加入口: Eclipse --> Help --> Install New Software --> addName: color-theme Location: http://eclipse-color-theme.github.com/update全选 NEXT接受协议选择 Install anywayRestart Now 重启Window --> Preference --> General --> Appearance -->…...

    2024/4/12 14:55:44
  9. JAVA - 如何通过RGB值判断颜色深浅 , 并输出默认头像

    参考:通过编程的方法来判断生成的颜色是深还是浅,深就用白色显示文字,浅就用黑色,找了很久,下面的两个方案可选。 经大家讨论第一个方案,是把 RGB 的值求和,然后取一个值,当和大于等于此值就为浅色:if ($R + $G + $B >= 450) {// add shadow }这个算法很傻很简单,…...

    2024/4/23 1:17:03
  10. 微信小程序wx.request后台数据交互

    From:http://blog.csdn.net/a61595579/article/details/53404451记录微信小程序wx.request这个api在跟后台交互时遇上的问题。1、根据资料,完成第一步,请求发送,代码如下:[javascript] viewplain copy<span style="white-space:pre"> </span>wx.re…...

    2024/4/18 15:07:37
  11. JS中的递归函数调用实例

    1、什么是递归函数:递归函数是在一个函数通过名字调用自身情况下构成的;递归函数就函数内部调用函数本身。2、利用递归求100的阶乘。function factorial(n){if(n==1){return 1;}else{return n*factorial(--n);}}factorial(100);3、利用递归求斐波那契数列。斐波那契数列指的是…...

    2024/4/16 2:26:12
  12. 颜色空间:RGB,CMY,HSV,HSL,Lab详解

    颜色空间(彩色模型、色彩空间、 彩色系统etc)是对色彩的一种描述方式,定义有很多种,区别在于面向不同的应用背景。例如显示器中采用的RGB颜色空间是基于物体发光定义的(RGB正好对应光的三原色:Red,Green,Blue);工业印刷中常用的CMY颜色空间是基于光反射定义的(CMY对…...

    2024/4/12 3:42:18
  13. js中递归函数的使用方法例子

    转自:http://blog.csdn.net/jbxue123/article/details/38822907分享下js递归函数用法,所谓递归函数就是在函数体内调用本函数。 使用递归函数一定要注意,处理不当就会进入死循环。例子,用js递归函数计算10以内的阶乘、[javascript] view plaincopyprint?<!DOCTYPE html…...

    2024/4/12 3:42:48
  14. eclipse酷炫大法之设置主题、皮肤

    为什么80%的码农都做不了架构师?>>> eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如,下面这个安装之…...

    2024/4/12 13:58:08
  15. Java 的视频教程推荐

    这是小千2020最新整理的一套零基础Java学习视频教程,包含了基础、进阶、高级三个阶段的java内容学习,不管你是想要学习的小白,还是刚入门的萌新,还是有多年java开发的从业者,都值的一看。通过本视频的学习,你可以从零开始,一步步的掌握 Java 开发的各项相关技能,最终达…...

    2024/4/12 3:42:42
  16. PHP弱类型及一些绕过姿势

    前言: 做web题时经常会遇到各种php弱类型和一些函数的绕过方法,由于知识比较零碎,就总结一下我所遇到的,也方便自己以后观看。 0x00:弱类型介绍:弱类型是可以随意转换变量的类型,也就是说php并不会验证变量的类型,可以随时的转换类型,虽然提升了效率,但是引发了很多安全…...

    2024/4/21 10:32:35
  17. RGB颜色与16进制颜色的换算方法(转载)

    网页中表示颜色的常见方法有: 1.Color Name(颜色名称) 用颜色名称来指定颜色,这种方法简洁直观,一看就知道是什么颜色,但最大的缺点是颜色的名称太少,不能有效的表示一些较丰富的颜色 2.RGB(RGB记法) 3.HEX(十六进制记法) RGB记法和十六进制记法都能很好的表示出一些较为丰…...

    2024/4/12 3:42:42
  18. js递归函数使用介绍

    所谓的递归函数就是在函数体内调用本函数。使用递归函数一定要注意,处理不当就会进入死循环。递归函数只有在特定的情况下使用 ,比如阶乘问题 一个10以内的阶乘,js递归函数实例代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h…...

    2024/4/18 9:17:40
  19. 打造自己的Eclipse的主题

    1. 确保你的Eclipse是最新版本(Juno版),早先的版本可能不支持。2. 在下面所给的链接下载Dark Juno主题,它修改了Eclipse所有的视图的颜色,工具栏也变成了暗黑主题。当然,我们还需要修改编辑器的颜色主题。这个主题包下载完成后,请解压到Eclipse安装目录的dropins子目录下。…...

    2024/4/14 21:59:42
  20. 云客Drupal源码分析之音译转化Transliteration

    音译转化Transliteration服务用于依据发音将Unicode字符串转化为US-ASCII字符串,这和翻译是不同的概念,对于中国人来说最直观的理解就是将中文文字转变为拼音,Unicode涵盖世界所有语言的字符,因此该服务可转换所有的语言,而不仅仅用于中文;在drupal中通常用于依据用户输入…...

    2024/4/15 5:04:23

最新文章

  1. JS三级联动

    三级联动是指页面上有三个下拉框&#xff0c;第一个下拉框选定某个选项后&#xff0c;第二个下拉框会根据第一个下拉框的选项进行筛选&#xff0c;第三个下拉框会根据第二个下拉框的选项进行筛选。这种交互方式可以帮助用户快速定位到需要的选项。 下面是一个简单的三级联动的…...

    2024/4/27 13:35:33
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. audio_video_img图片音视频异步可视化加载

    最近在做即时消息&#xff0c;消息类型除了文字还有音频、视频、图片展示&#xff0c;如果消息很多&#xff0c;在切换聊天框时&#xff0c;会有明显卡顿&#xff0c;后续做了懒加载&#xff0c;方案是只加载用户能看到的资源&#xff0c;看不到的先不加载&#xff1b; LazyAud…...

    2024/4/27 13:10:31
  4. 实现窗口拖拽移动

    import Vue from "vue"; /* * 定义公共js里&#xff0c;在入口文件main.js中import&#xff1b; * 给elementUI的dialog上加上 v-dialogDrag 指令就可以实现弹窗的全屏和拉伸了。 */ // v-dialogDrag: 弹窗拖拽水平方向伸缩 Vue.directive(dialogDrag, { bind(e…...

    2024/4/21 18:20:44
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/26 20:12:18
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/25 18:39:22
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/25 18:39:22
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/26 21:56:58
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/26 16:00:35
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/25 18:39:16
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/26 22:01:59
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57