在 PHP 中,处理图片(如生成缩略图)是常见的需求。以下是一个完整的图片处理类封装实例,支持生成缩略图、调整图片大小、添加水印等功能。
1. 图片处理类
示例代码
<?phpclass ImageProcessor { private $image; // 图片资源 private $imageType; // 图片类型 /** * 加载图片 * * @param string $file 图片文件路径 */ public function load($file) { if (!file_exists($file)) { throw new Exception("图片文件不存在: $file"); } $info = getimagesize($file); $this->imageType = $info[2]; switch ($this->imageType) { case IMAGETYPE_JPEG: $this->image = imagecreatefromjpeg($file); break; case IMAGETYPE_PNG: $this->image = imagecreatefrompng($file); break; case IMAGETYPE_GIF: $this->image = imagecreatefromgif($file); break; default: throw new Exception("不支持的图片类型: $file"); } } /** * 保存图片 * * @param string $file 保存路径 * @param int $quality 图片质量(仅适用于 JPEG) */ public function save($file, $quality = 90) { switch ($this->imageType) { case IMAGETYPE_JPEG: imagejpeg($this->image, $file, $quality); break; case IMAGETYPE_PNG: imagepng($this->image, $file); break; case IMAGETYPE_GIF: imagegif($this->image, $file); break; default: throw new Exception("不支持的图片类型"); } } /** * 调整图片大小 * * @param int $width 目标宽度 * @param int $height 目标高度 * @param bool $crop 是否裁剪图片 */ public function resize($width, $height, $crop = false) { $srcWidth = imagesx($this->image); $srcHeight = imagesy($this->image); if ($crop) { // 裁剪模式 $ratio = max($width / $srcWidth, $height / $srcHeight); $newWidth = $srcWidth * $ratio; $newHeight = $srcHeight * $ratio; $tmpImage = imagecreatetruecolor($width, $height); imagecopyresampled($tmpImage, $this->image, 0, 0, ($newWidth - $width) / 2, ($newHeight - $height) / 2, $width, $height, $width, $height); } else { // 非裁剪模式 $ratio = min($width / $srcWidth, $height / $srcHeight); $newWidth = $srcWidth * $ratio; $newHeight = $srcHeight * $ratio; $tmpImage = imagecreatetruecolor($newWidth, $newHeight); imagecopyresampled($tmpImage, $this->image, 0, 0, 0, 0, $newWidth, $newHeight, $srcWidth, $srcHeight); } $this->image = $tmpImage; } /** * 添加水印 * * @param string $watermarkFile 水印图片路径 * @param string $position 水印位置(top-left, top-right, bottom-left, bottom-right, center) * @param int $margin 水印边距 */ public function addWatermark($watermarkFile, $position = 'bottom-right', $margin = 10) { if (!file_exists($watermarkFile)) { throw new Exception("水印图片不存在: $watermarkFile"); } $watermark = imagecreatefrompng($watermarkFile); $watermarkWidth = imagesx($watermark); $watermarkHeight = imagesy($watermark); $imageWidth = imagesx($this->image); $imageHeight = imagesy($this->image); switch ($position) { case 'top-left': $x = $margin; $y = $margin; break; case 'top-right': $x = $imageWidth - $watermarkWidth - $margin; $y = $margin; break; case 'bottom-left': $x = $margin; $y = $imageHeight - $watermarkHeight - $margin; break; case 'bottom-right': $x = $imageWidth - $watermarkWidth - $margin; $y = $imageHeight - $watermarkHeight - $margin; break; case 'center': $x = ($imageWidth - $watermarkWidth) / 2; $y = ($imageHeight - $watermarkHeight) / 2; break; default: throw new Exception("无效的水印位置: $position"); } imagecopy($this->image, $watermark, $x, $y, 0, 0, $watermarkWidth, $watermarkHeight); imagedestroy($watermark); } /** * 释放图片资源 */ public function __destruct() { if ($this->image) { imagedestroy($this->image); } }}// 示例用法try { // 创建图片处理对象 $processor = new ImageProcessor(); // 加载图片 $processor->load('input.jpg'); // 生成缩略图 $processor->resize(200, 200, true); // 添加水印 $processor->addWatermark('watermark.png', 'bottom-right'); // 保存图片 $processor->save('output.jpg');} catch (Exception $e) { echo "错误: " . $e->getMessage();}?>
2. 代码说明
ImageProcessor
类:load()
:加载图片文件。save()
:保存图片文件。resize()
:调整图片大小,支持裁剪模式。addWatermark()
:添加水印,支持多种位置。__destruct()
:释放图片资源。图片处理功能:
支持 JPEG、PNG、GIF 格式的图片。
支持生成缩略图,并可选是否裁剪。
支持添加水印,水印位置可自定义。
异常处理:
使用
try-catch
捕获异常,确保代码健壮性。
3. 使用步骤
加载图片:
调用
$processor->load('input.jpg')
加载图片文件。调整图片大小:
调用
$processor->resize(200, 200, true)
生成缩略图。添加水印:
调用
$processor->addWatermark('watermark.png', 'bottom-right')
添加水印。保存图片:
调用
$processor->save('output.jpg')
保存处理后的图片。
4. 注意事项
图片格式:
支持 JPEG、PNG、GIF 格式的图片。
水印图片必须是 PNG 格式,支持透明背景。
性能优化:
对于大图片,调整大小和添加水印可能会消耗较多内存,建议对图片进行压缩或分块处理。
水印位置:
水印位置支持
top-left
、top-right
、bottom-left
、bottom-right
和center
。异常处理:
确保捕获并处理异常,避免程序崩溃。
5. 总结
功能 | 说明 |
---|---|
加载图片 | 支持 JPEG、PNG、GIF 格式 |
调整图片大小 | 支持裁剪模式 |
添加水印 | 支持多种位置 |
保存图片 | 支持 JPEG、PNG、GIF 格式 |
通过封装图片处理类,可以方便地在 PHP 项目中实现图片处理功能,如生成缩略图、添加水印等。
本文关键词: php 装的 图片 略图 处理 完整
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。