Rumah >pembangunan bahagian belakang >tutorial php >PHP图片处理(上)- 基础

PHP图片处理(上)- 基础

齐天大圣
齐天大圣asal
2020-05-03 10:42:11201semak imbas

之前碰到一个项目里,用到了图片处理技术。类似于下面这个图一样

blog20043014183595668.png

图片分为3个部分组成,背景图,二维码图片,二维码图片下面的文字。其中,二维码图片以及文字是动态生成的,不一样的活动,二维码图片及文字描述都是不一样的。

如何完成该需求,我们需要用php的图片处理技术来实现。php的图片处理非常强大,可以做很多事。常见的有验证码图片、图片水印、缩略图等等。

基础知识

首先我们需要安装php的扩展GD库。有了他之后,才能继续进行下面的步骤。下面主要以代码为主,函数的具体用法亲们自行查阅文档。

创建画布

主要用到的函数imagecreatetruecolor— 新建一个真彩色图像。

imagecreatetruecolor    ( int $width   , int $height   ) : resource
<?php
// 创建一个100*100的画布
$im = imagecreatetruecolor(100, 100);
// 生成png图片
header("Content-type:image/png");
imagepng($im);
imagedestroy($im);

给画布设置颜色

主要函数

  • imagecolorallocate — 为一幅图像分配颜色

  • imagefilll — 区域填充

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

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

imagecolorallocate()    必须被调用以创建每一种用在 image 所代表的图像中的颜色。

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

imagefill() 在 image   图像的坐标 x,y(图像左上角为    0, 0)处用 color    颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)。

<?php
header("Content-type:image/png");
// 创建一个100*100的画布
$im = imagecreatetruecolor(100, 100);
// 设置红包
$color = imagecolorallocate($im, 255, 0, 0);
// 填充画布
imagefill($im, 0, 0, $color);
// 生成图片
imagepng($im);
// 销毁资源
imagedestroy($im);

该代码会生成一个100*100的红色背景图

绘制图像

绘制点和线

主要函数:

  • imagesetpixel — 画一个单一像素

  • imageline — 画一条线段

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

imagesetpixel() 在 image    图像中用 color    颜色在 x,y 坐标(图像左上角为    0,0)上画一个点。

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

imageline() 用 color    颜色在图像 image 中从坐标  x1,y1 到    x2,y2(图像左上角为    0, 0)画一条线段。

<?php
$imgHandler = imagecreatetruecolor(100,100);
// 填充背景
$bgColor = imagecolorallocate($imgHandler, 200, 30, 40);
imagefill($imgHandler,0, 0, $bgColor);
// 绘制点
for ($i = 0; $i < 100; $i++) {
   $pointColor = imagecolorallocate($imgHandler, rand(0,200), rand(0,200), rand(0,200));
   imagesetpixel($imgHandler, rand(0, 100), rand(0, 100), $pointColor);
}
// 绘制线
for ($i = 0; $i < 10; $i++) {
   $lineColor = imagecolorallocate($imgHandler, rand(100, 225), rand(100, 225), rand(0, 50));
   imageline($imgHandler, 
       rand(0, 100), 
       rand(0, 100),
       rand(0, 100),
       rand(0, 100), $lineColor);
}
header("Content-Type:image/png");
imagepng($imgHandler);
imagedestroy($imgHandler);

绘制矩形

<?php
$imgHandler = imagecreatetruecolor(100,100);
// 填充背景
$bgColor = imagecolorallocate($imgHandler, 200, 30, 40);
imagefill($imgHandler,0, 0, $bgColor);
// 绘制矩形边框
$borderCol = imagecolorallocate($imgHandler, 23, 32, 200);
imagerectangle($imgHandler, 0, 0, 99, 99, $borderCol);
header("Content-Type:image/png");
imagepng($imgHandler);
imagedestroy($imgHandler);

Atas ialah kandungan terperinci PHP图片处理(上)- 基础. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn