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

PHP 图像处理函数实现图片压缩、裁剪等操作

发布时间:2023-05-28 13:04:49

PHP为我们提供了许多用于处理图像的函数,包括压缩、裁剪、缩放、水印等。这些功能可以帮助我们优化网站的性能,并且提供更好的用户体验。本文将介绍如何使用PHP图像处理函数实现图片压缩、裁剪等操作。

一、图片压缩

图像的压缩是指通过压缩算法使图片体积减小,从而加快网页加载速度和减少带宽消耗。PHP提供了两个图像压缩函数:imagejpeg()和imagepng()。

imagejpeg()函数用于将图像转换为JPEG格式并压缩,该函数可以设置压缩质量,从而控制图像文件的大小。以下是使用imagejpeg()函数实现图片压缩的示例代码:

// 打开原始图片
$source_image = imagecreatefromjpeg('image.jpg');
// 创建新的 JPEG 文件并写入压缩后的图像
imagejpeg($source_image, 'compressed.jpg', 75);
// 释放内存
imagedestroy($source_image);

在上述代码中,75是一个0到100之间的整数,数值越大,表示压缩质量越高,但文件大小也会相应增加。建议将压缩质量设置在70到90之间。

同样,我们也可以使用imagepng()函数来压缩PNG格式的图像。imagepng()函数同样可以设置压缩质量,以下是示例代码:

// 打开原始图片
$source_image = imagecreatefrompng('image.png');
// 创建新的 PNG 文件并写入压缩后的图像
imagepng($source_image, 'compressed.png', 7);
// 释放内存
imagedestroy($source_image);

在上述代码中,7表示压缩质量,数值范围为0到9,数值越小,压缩质量越高,但文件大小也会相应增加。建议将压缩质量设置在7到9之间。

二、图片裁剪

图片裁剪是指在原始图片的基础上,按照指定的尺寸对图片进行剪切,从而获得所需的区域。PHP提供了imagecrop()函数来实现图片裁剪功能。

以下是示例代码:

// 打开原始图片
$source_image = imagecreatefromjpeg('image.jpg');
// 获取原始图片的宽度和高度
$source_width = imagesx($source_image);
$source_height = imagesy($source_image);
// 定义裁剪区域的起点坐标及宽高
$crop_start_x = 0;
$crop_start_y = 0;
$crop_width = $source_width * 0.5; // 裁剪宽度为原始图片宽度的一半
$crop_height = $source_height * 0.5; // 裁剪高度为原始图片高度的一半
// 调用 imagecrop() 函数进行裁剪
$cropped_image = imagecrop($source_image, ['x' => $crop_start_x, 'y' => $crop_start_y, 'width' => $crop_width, 'height' => $crop_height]);
// 保存裁剪后的图片
imagejpeg($cropped_image, 'cropped.jpg');
// 释放内存
imagedestroy($source_image);
imagedestroy($cropped_image);

在上述代码中,我们使用了imagecrop()函数来裁剪原始图片。该函数接受两个参数, 个参数是裁剪的源图像,第二个参数是包含裁剪区域信息的数组。

三、图片缩放

图片缩放是指将原始图片大小调整为指定的尺寸。PHP提供了imagecopyresampled()函数来实现图片缩放功能。

以下是示例代码:

// 打开原始图片
$source_image = imagecreatefromjpeg('image.jpg');
// 获取原始图片的宽度和高度
$source_width = imagesx($source_image);
$source_height = imagesy($source_image);
// 定义缩放后的宽度和高度
$target_width = $source_width * 0.5;
$target_height = $source_height * 0.5;
// 创建一个新的图片对象
$target_image = imagecreatetruecolor($target_width, $target_height);
// 使用 imagecopyresampled() 函数进行缩放
imagecopyresampled($target_image, $source_image, 0, 0, 0, 0, $target_width, $target_height, $source_width, $source_height);
// 保存目标图片
imagejpeg($target_image, 'resized.jpg');
// 释放内存
imagedestroy($source_image);
imagedestroy($target_image);

在上述代码中,我们使用了imagecopyresampled()函数将原始图片大小缩小为宽度和高度均为原始图片的一半。

四、添加水印

图片添加水印是一种通过在图片上叠加标识信息或者品牌标志,以增加图像可识别度、提高内容版权保护度的方法。PHP提供了imagecopy()函数来实现图片添加水印功能。

以下是示例代码:

// 打开原始图片和水印图片
$source_image = imagecreatefromjpeg('image.jpg');
$watermark_image = imagecreatefrompng('watermark.png');
// 获取水印图片的宽度和高度
$watermark_width = imagesx($watermark_image);
$watermark_height = imagesy($watermark_image);
// 将水印图片叠加到原始图片中
imagecopy($source_image, $watermark_image, 0, 0, 0, 0, $watermark_width, $watermark_height);
// 保存带有水印的图片
imagejpeg($source_image, 'watermarked.jpg');
// 释放内存
imagedestroy($source_image);
imagedestroy($watermark_image);

在上述代码中,我们使用了imagecopy()函数将水印图片叠加到原始图片中。该函数接受7个参数,前两个参数分别是目标图像和源图像,后面的5个参数表示水印图片在目标图像中的位置、大小等信息。

综上所述,PHP图像处理函数提供了许多功能强大的处理图像的函数,包括压缩、裁剪、缩放、水印等。我们可以根据自己的需求进行调用,提高网站的性能和用户体验。