PHP快速入门10-图像处理,附图像大小调整、旋转、获取颜色等15个常见示例

简介: PHP快速入门与实战,以上就是关于本篇文章介绍的内容,图像处理,后续更多内容将收录在专栏PHP快速入门与实战。

前言

本文已收录于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);

以上代码实现的功能是给一张图片添加透明度并输出到浏览器或保存到文件中。具体实现步骤为:

  1. 获取原始图片和目标图片的路径和透明度值。
  2. 使用imagecreatefromjpeg()函数创建原始图片资源。
  3. 获取原始图片的宽高。
  4. 使用imagecreatetruecolor()函数创建目标图片资源。
  5. 设置目标图片的透明度,使用imagefill()函数填充一个半透明的背景,并使用imagesavealpha()函数保存透明度信息。
  6. 使用imagecopymerge()函数复制原始图片到目标图片,并设置透明度。
  7. 输出目标图片到浏览器或保存到文件中,使用header()函数设置输出类型和imagejpeg()函数输出图片。
  8. 销毁资源,使用imagedestroy()函数。

注意事项:

  1. 本示例代码仅适用于处理JPEG格式的图片,如果是其他格式的图片则需要使用对应的函数创建资源和输出图片。
  2. 在使用imagecopymerge()函数设置透明度时,第9个参数表示透明度,取值在0~100之间,0表示完全透明,100表示不透明。
  3. 如果需要在原始图片上添加透明度而不是创建一个新的图片,则可以直接在原始图片上操作,去掉创建目标图片的步骤。

总结

以上就是关于本篇文章介绍的内容,图像处理,后续更多内容将收录在专栏PHP快速入门与实战中,感谢大家支持。

相关文章
|
14天前
|
PHP 计算机视觉 UED
Buzz库:PHP图像处理中的异步图像下载和保存
Buzz库:PHP图像处理中的异步图像下载和保存
|
6月前
|
存储 算法 安全
PHP AES加解密示例
PHP AES加解密示例
117 0
PHP AES加解密示例
|
1月前
|
PHP 计算机视觉 开发者
PHP中的图像处理:GD库与Imagick的应用比较
在PHP开发中,图像处理是一个常见的需求,尤其是在开发图像生成、编辑、缩放等功能时。PHP提供了两种主流的图像处理库——GD库和Imagick,它们各自具有不同的特点和适用场景。本文将对这两者进行比较,帮助开发者根据项目需求选择合适的图像处理工具。
|
3月前
|
缓存 NoSQL PHP
使用PHP-redis实现键空间通知监听key失效事件的技术与代码示例
通过上述方法,你可以有效地在PHP中使用Redis来监听键空间通知,特别是针对键失效事件。这可以帮助你更好地管理缓存策略,及时响应键的变化。
102 3
|
4月前
|
PHP
在 PHP 中将 WebP 转换为 GIF 图像格式
【8月更文挑战第27天】
83 2
|
4月前
|
SQL 安全 API
PHP代码审计示例(一)——淡然点图标系统SQL注入漏洞审计
PHP代码审计示例(一)——淡然点图标系统SQL注入漏洞审计
109 4
|
4月前
|
PHP
php使用方式示例
【8月更文挑战第2天】php使用方式示例
37 2
|
4月前
|
PHP
【Azure Developer】PHP网站使用AAD授权登录的参考示例
【Azure Developer】PHP网站使用AAD授权登录的参考示例
|
5月前
|
测试技术 PHP 开发者
原生php单元测试示例
通过上面的示例,我们可以看到,即使在缺乏专门测试框架的情况下,使用原生PHP代码进行基本的单元测试也是完全可行的。当然,对于更复杂的项目,利用像PHPUnit这样的专业工具将带来更多的便利和高级功能。不过,理解单元测试的基本概念和能够手工编写测试是每个PHP开发者的宝贵技能。
39 4
|
5月前
|
测试技术 PHP 开发者
原生php单元测试示例
通过上面的示例,我们可以看到,即使在缺乏专门测试框架的情况下,使用原生PHP代码进行基本的单元测试也是完全可行的。当然,对于更复杂的项目,利用像PHPUnit这样的专业工具将带来更多的便利和高级功能。不过,理解单元测试的基本概念和能够手工编写测试是每个PHP开发者的宝贵技能。
24 1