前言
本文已收录于PHP全栈系列专栏:PHP快速入门与实战
一、PHP的图像处理
PHP是一种服务器端脚本语言,可用于创建动态 Web 页面。PHP的图像处理能力强大,可以使用各种函数和扩展来编辑、创建和合成图像。
1.1 图像处理函数
以下是一些常用的图像处理函数:
imagecreatetruecolor()
创建一个真彩色图像。imagecreatefromjpeg()
从 JPEG 文件或 URL 创建一个新的图像。imagecreatefrompng()
从 PNG 文件或 URL 创建一个新的图像。imagecreatefromgif()
从 GIF 文件或 URL 创建一个新的图像。imagecopyresampled()
重采样拷贝部分图像并调整大小。imagecopymerge()
将一幅图像中的一块区域与另一幅图像进行合并。imagepng()
输出 PNG 图像到浏览器或文件。imagejpeg()
输出 JPEG 图像到浏览器或文件。imagegif()
输出 GIF 图像到浏览器或文件。
二、 图像处理示例
以下是15个示例代码,演示了PHP图像处理的不同方面:
2.1 创建一个空白的图像
// 创建一个宽为200,高为100的空白png图像
$im = imagecreatetruecolor(200, 100);
// 把背景设置为白色
$white = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $white);
// 输出图像
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
2.2 从文件创建一个新的图像
// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');
// 输出图像
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
2.3 从URL创建一个新的图像
// 从URL中创建一个png图像
$im = imagecreatefrompng('http://example.com/image.png');
// 输出图像
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
2.4 调整图像大小
// 创建一个宽为200,高为100的空白png图像
$im = imagecreatetruecolor(200, 100);
// 把背景设置为白色
$white = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $white);
// 调整图像大小为宽为400,高为200
$new_im = imagecreatetruecolor(400, 200);
imagecopyresampled($new_im, $im, 0, 0, 0, 0, 400, 200, 200, 100);
// 输出图像
header('Content-type: image/png');
imagepng($new_im);
imagedestroy($im);
imagedestroy($new_im);
2.5 对比度和亮度调整
// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');
// 增加对比度和亮度
imagefilter($im, IMG_FILTER_CONTRAST, 50);
imagefilter($im, IMG_FILTER_BRIGHTNESS, 50);
// 输出图像
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
2.6 度数旋转
// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');
// 顺时针旋转45度
$im = imagerotate($im, 45, 0);
// 输出图像
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
2.7 模糊滤镜
// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');
// 应用高斯模糊滤镜
imagefilter($im, IMG_FILTER_GAUSSIAN_BLUR);
// 输出图像
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
2.8 获取图像的颜色信息
// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');
// 获取像素点(10,10)的颜色
$rgb = imagecolorat($im, 10, 10);
$colors = imagecolorsforindex($im, $rgb);
// 输出颜色信息
echo 'Red: ' . $colors['red'] . '<br>';
echo 'Green: ' . $colors['green'] . '<br>';
echo 'Blue: ' . $colors['blue'] . '<br>';
imagedestroy($im);
2.9. 图像合并
// 创建一个宽为200,高为100的空白png图像
$im = imagecreatetruecolor(200, 100);
// 把背景设置为白色
$white = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $white);
// 从文件中创建一个jpg图像
$overlay = imagecreatefromjpeg('myphoto.jpg');
// 将图像合并
imagecopymerge($im, $overlay, 50, 25, 0, 0, 100, 50, 80);
// 输出图像
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
imagedestroy($overlay);
2.10 图像旋转和裁剪
// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');
// 顺时针旋转45度
$im = imagerotate($im, 45, 0);
// 裁剪图像
$im = imagecrop($im, ['x' => 50, 'y' => 50, 'width' => 150, 'height' => 75]);
// 输出图像
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
2.11 图像的灰度化
// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');
// 变成灰度图像
imagefilter($im, IMG_FILTER_GRAYSCALE);
// 输出图像
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
2.12 图像的反色处理
// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');
// 变成反色
imagefilter($im, IMG_FILTER_NEGATE);
// 输出图像
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
2.13 图像的锐化处理
// 从文件中创建一个jpg图像
$im = imagecreatefromjpeg('myphoto.jpg');
// 锐化图像
imagefilter($im, IMG_FILTER_CONTRAST, -255);
imagefilter($im, IMG_FILTER_SMOOTH, -10);
// 输出图像
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
2.14 图像的马赛克处理
// 创建一个宽为200,高为100的空白png图像
$im = imagecreatetruecolor(200, 100);
// 把背景设置为白色
$white = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $white);
// 在图像中绘制一条红线
$red = imagecolorallocate($im, 255, 0, 0);
imageline($im, 0, 50, 200, 50, $red);
// 马赛克处理
imagefilter($im, IMG_FILTER_PIXELATE, 10);
// 输出图像
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
2.15 图像的透明度调整
// 原始图片路径
$srcImgPath = 'path/to/source/image.jpg';
// 目标图片路径
$dstImgPath = 'path/to/destination/image.jpg';
// 透明度值(0~100,0表示完全透明,100表示不透明)
$alpha = 50;
// 创建原始图片资源
$srcImg = imagecreatefromjpeg($srcImgPath);
// 获取原始图片宽高
$srcWidth = imagesx($srcImg);
$srcHeight = imagesy($srcImg);
// 创建目标图片资源
$dstImg = imagecreatetruecolor($srcWidth, $srcHeight);
// 设置目标图片透明度
imagefill($dstImg, 0, 0, imagecolorallocatealpha($dstImg, 0, 0, 0, 127));
imagesavealpha($dstImg, true);
// 复制原始图片到目标图片,并设置透明度
imagecopymerge($dstImg, $srcImg, 0, 0, 0, 0, $srcWidth, $srcHeight, $alpha);
// 输出目标图片
header('Content-Type: image/jpeg');
imagejpeg($dstImg, $dstImgPath);
// 销毁资源
imagedestroy($srcImg);
imagedestroy($dstImg);
以上代码实现的功能是给一张图片添加透明度并输出到浏览器或保存到文件中。具体实现步骤为:
- 获取原始图片和目标图片的路径和透明度值。
- 使用
imagecreatefromjpeg()
函数创建原始图片资源。 - 获取原始图片的宽高。
- 使用
imagecreatetruecolor()
函数创建目标图片资源。 - 设置目标图片的透明度,使用
imagefill()
函数填充一个半透明的背景,并使用imagesavealpha()
函数保存透明度信息。 - 使用
imagecopymerge()
函数复制原始图片到目标图片,并设置透明度。 - 输出目标图片到浏览器或保存到文件中,使用
header()
函数设置输出类型和imagejpeg()
函数输出图片。 - 销毁资源,使用
imagedestroy()
函数。
注意事项:
- 本示例代码仅适用于处理JPEG格式的图片,如果是其他格式的图片则需要使用对应的函数创建资源和输出图片。
- 在使用
imagecopymerge()
函数设置透明度时,第9个参数表示透明度,取值在0~100之间,0表示完全透明,100表示不透明。 - 如果需要在原始图片上添加透明度而不是创建一个新的图片,则可以直接在原始图片上操作,去掉创建目标图片的步骤。
总结
以上就是关于本篇文章介绍的内容,图像处理,后续更多内容将收录在专栏PHP快速入门与实战中,感谢大家支持。