欢迎访问宙启技术站
智能推送

PHP函数之图片处理的使用

发布时间:2023-06-11 14:20:24

PHP中常用的操作图片的扩展有多种,比如GD库、ImageMagick和Imagick等。这篇文章将主要介绍GD库的使用方法,包括生成验证码、裁切、缩放和水印等基本功能。

1. 生成验证码

验证码是常用于防止恶意攻击和自动化爬虫的技术,常见的验证码形式有数字、字母、滑块验证等。使用GD库可以轻松生成常见的数字和字母验证码。

首先,需要创建一个空白的画布,并在画布上随机生成4个数字和字母,然后将其输出为图片。

$width = 100;  //验证码图片宽度

$height = 30;   //验证码图片高度

$font_size = 16;    //字体大小

//创建画布

$image = imagecreatetruecolor($width, $height);

//随机背景颜色

$bg_color = imagecolorallocate($image, rand(200, 255), rand(200, 255), rand(200, 255));

imagefill($image, 0, 0, $bg_color);

//随机生成4个数字和字母

$code = '';

for($i=0; $i < 4; $i++){

    $code .= chr(rand(48, 57) | rand(65, 90) | rand(97, 122));

}

//字体颜色

$font_color = imagecolorallocate($image, rand(0, 150), rand(0, 150), rand(0, 150));

//将数字和字母输出到画布

for ($i = 0; $i < strlen($code); $i++) {

    $x = $i * $font_size + rand(0, 5);

    $y = rand(0, $height-$font_size) + 5;

    imagechar($image, $font_size, $x, $y, $code[$i], $font_color);

}

//输出图片

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

imagepng($image);

imagedestroy($image);

可以通过调整画布大小来改变验证码的大小,通过调整字体大小和输出位置来改变数字和字母的大小和位置。对于字体选择,可以使用GD库提供的默认字体或加载自定义的字体文件。

2. 图片裁切

裁剪图片可以通过GD库的imagecopyresampled()函数进行实现。该函数可以根据指定的目标尺寸和源尺寸,将图像的一部分复制并缩放到目标尺寸。

需要指定裁切后的目标尺寸、源图像、目标图像以及源图像的裁切起始位置。

//裁切参数

$dst_width = 200;

$dst_height = 150;

$dst_x = 0;

$dst_y = 0;

$src_x = 100;

$src_y = 100;

$src_width = 300;

$src_height = 200;

//源图像

$src_image = imagecreatefromjpeg('source.jpeg');

//目标图像

$dst_image = imagecreatetruecolor($dst_width, $dst_height);

//裁切并缩放

imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_width, $dst_height, $src_width, $src_height);

//输出图片

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

imagejpeg($dst_image);

imagedestroy($dst_image);

3. 图片缩放

图片缩放功能可以通过GD库的imagecopyresampled()函数实现,与裁切相比,只需要调整目标尺寸即可。

//目标尺寸

$dst_width = 400;

$dst_height = 300;

//源图像

$src_image = imagecreatefromjpeg('source.jpeg');

$src_width = imagesx($src_image);

$src_height = imagesy($src_image);

//比例缩放

$scale = min($dst_width/$src_width, $dst_height/$src_height);

$dst_width = $src_width * $scale;

$dst_height = $src_height * $scale;

//目标图像

$dst_image = imagecreatetruecolor($dst_width, $dst_height);

//缩放

imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $dst_width, $dst_height, $src_width, $src_height);

//输出图片

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

imagejpeg($dst_image);

imagedestroy($dst_image);

4. 图片水印

在图片上添加水印可以通过GD库的imagecopymerge()函数实现。可以通过指定水印图片和位置、透明度和缩放等参数进行水印的添加。

//源图像

$src_image = imagecreatefromjpeg('source.jpeg');

//水印图片

$watermark_image = imagecreatefrompng('watermark.png');

$watermark_alpha = 50;  //水印透明度

$watermark_scale = 0.5; //水印缩放比例

//水印位置

$watermark_x = imagesx($src_image) - imagesx($watermark_image) * $watermark_scale - 10;

$watermark_y = imagesy($src_image) - imagesy($watermark_image) * $watermark_scale - 10;

//调整水印大小

$watermark_width = imagesx($watermark_image) * $watermark_scale;

$watermark_height = imagesy($watermark_image) * $watermark_scale;

$watermark_resized = imagecreatetruecolor($watermark_width, $watermark_height);

imagecopyresampled($watermark_resized, $watermark_image, 0, 0, 0, 0, $watermark_width, $watermark_height, imagesx($watermark_image), imagesy($watermark_image));

//水印添加

imagecopymerge($src_image, $watermark_resized, $watermark_x, $watermark_y, 0, 0, $watermark_width, $watermark_height, $watermark_alpha);

//输出图片

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

imagejpeg($src_image);

imagedestroy($src_image);

总结

通过GD库的使用,可以轻松实现图片处理功能,包括生成验证码、裁剪、缩放和水印等。不同的应用场景需要适配不同的参数和参数取值,需要开发者根据具体的业务需求进行相应的调整和修改。