之前碰到一个项目里,用到了图片处理技术。类似于下面这个图一样
图片分为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!