引言
环境准备
在开始之前,请确保您的服务器已安装PHP环境,并且已启用GD库。GD库是PHP中用于处理图像的一个扩展库,它支持多种图像格式,如JPEG、PNG等。
图片上传与保存
<?php
// 检查是否有文件被上传
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['image'])) {
// 获取上传的文件信息
$file = $_FILES['image'];
$file_name = $file['name'];
$file_tmp_name = $file['tmp_name'];
$file_size = $file['size'];
$file_error = $file['error'];
$file_type = $file['type'];
// 定义允许的图片格式
$allowed_types = array('image/jpeg', 'image/png', 'image/gif');
// 检查文件类型是否合法
if (!in_array($file_type, $allowed_types)) {
die('非法文件格式');
}
// 检查是否有错误发生
if ($file_error !== 0) {
die('文件上传错误');
}
// 设置图片保存路径
$upload_dir = 'uploads/';
$upload_path = $upload_dir . basename($file_name);
// 检查目录是否存在,不存在则创建
if (!file_exists($upload_dir)) {
mkdir($upload_dir, 0777, true);
}
// 移动文件到指定路径
if (move_uploaded_file($file_tmp_name, $upload_path)) {
echo '文件上传成功!';
} else {
echo '文件上传失败!';
}
}
?>
图片处理
缩放图片
<?php
// 加载图片
$image = imagecreatefromjpeg('uploads/image.jpg');
// 获取图片宽度和高度
$width = imagesx($image);
$height = imagesy($image);
// 设置缩放比例
$scale = 0.5;
// 计算缩放后的宽度和高度
$new_width = $width * $scale;
$new_height = $height * $scale;
// 创建新图片
$new_image = imagecreatetruecolor($new_width, $new_height);
// 复制图片内容到新图片
imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// 保存新图片
imagejpeg($new_image, 'uploads/resized_image.jpg');
// 释放内存
imagedestroy($image);
imagedestroy($new_image);
?>
裁剪图片
<?php
// 加载图片
$image = imagecreatefromjpeg('uploads/image.jpg');
// 获取图片宽度和高度
$width = imagesx($image);
$height = imagesy($image);
// 设置裁剪区域
$x = 100;
$y = 100;
$width = 200;
$height = 200;
// 创建新图片
$new_image = imagecreatetruecolor($width, $height);
// 复制裁剪区域到新图片
imagecopyresampled($new_image, $image, 0, 0, $x, $y, $width, $height, $width, $height);
// 保存新图片
imagejpeg($new_image, 'uploads/cropped_image.jpg');
// 释放内存
imagedestroy($image);
imagedestroy($new_image);
?>
添加水印
<?php
// 加载原图
$image = imagecreatefromjpeg('uploads/image.jpg');
// 加载水印图片
$watermark = imagecreatefrompng('uploads/watermark.png');
// 获取水印图片宽度和高度
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
// 设置水印位置
$x = $width - $watermark_width - 10;
$y = $height - $watermark_height - 10;
// 合并图片
imagecopy($image, $watermark, $x, $y, 0, 0, $watermark_width, $watermark_height);
// 保存新图片
imagejpeg($image, 'uploads/watermarked_image.jpg');
// 释放内存
imagedestroy($image);
imagedestroy($watermark);
?>