<?php
// 假设图片已上传至临时目录,并且我们通过$_FILES获取了文件信息
$sourceFile = $_FILES['uploaded_image']['tmp_name']; // 上传文件的临时路径
$targetDir = 'uploads/'; // 目标存储目录
$targetFile = $targetDir . basename($_FILES['uploaded_image']['name']); // 目标文件名
// 移动文件到目标目录
if (move_uploaded_file($sourceFile, $targetFile)) {
// 图片等比缩放
$maxWidth = 800; // 最大宽度
$maxHeight = 600; // 最大高度
list($width, $height, $type) = getimagesize($targetFile);
// 计算缩放比例
$scale = min($maxWidth / $width, $maxHeight / $height);
$newWidth = floor($width * $scale);
$newHeight = floor($height * $scale);
// 创建新的图像资源
switch ($type) {
case IMAGETYPE_GIF:
$srcImage = imagecreatefromgif($targetFile);
break;
case IMAGETYPE_JPEG:
$srcImage = imagecreatefromjpeg($targetFile);
break;
case IMAGETYPE_PNG:
$srcImage = imagecreatefrompng($targetFile);
break;
default:
exit('Unsupported image format');
}
$dstImage = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($dstImage, $srcImage, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
// 添加水印
$watermarkFile = 'watermark.png'; // 水印图片路径
list($wWidth, $wHeight, $wType) = getimagesize($watermarkFile);
$watermarkImage = imagecreatefrompng($watermarkFile);
// 水印位置
$x = $newWidth - $wWidth - 10;
$y = $newHeight - $wHeight - 10;
// 将水印合并到图片上
imagecopy($dstImage, $watermarkImage, $x, $y, 0, 0, $wWidth, $wHeight);
// 保存图片
switch ($type) {
case IMAGETYPE_GIF:
imagegif($dstImage, $targetFile);
break;
case IMAGETYPE_JPEG:
imagejpeg($dstImage, $targetFile, 90); // 90% 压缩质量
break;
case IMAGETYPE_PNG:
imagepng($dstImage, $targetFile, 9); // 0 (完全无损) 到 9 (完全有损)
break;
}
// 释放内存
imagedestroy($srcImage);
imagedestroy($dstImage);
imagedestroy($watermarkImage);
echo "图片上传并处理成功!";
} else {
echo "图片上传失败!";
}
?>
这段代码实现了PHP中上传图片、进行等比缩放并添加水印的功能。首先,它检查图片是否成功上传,然后基于原图尺寸和设定的最大尺寸计算缩放比例,接着创建新的图像资源并进行缩放。之后,加载水印图片并将其添加到缩放后的图片上,最后保存处理后的图片并释放图像资源。