PHP如何制作支持添加水印和生成缩略图的图片处理工具?

更新于
2026-09-24 15:35:08
1阅读来源:SEO资源
  • 内容介绍
  • 相关推荐

本文共计1138个文字,预计阅读时间需要5分钟。

PHP如何制作支持添加水印和生成缩略图的图片处理工具?

PHP实现可添加水印与生成缩略图的图片处理工具类示例:

phpclass ImageTool { private $imagePath; private $outputDir;

public function __construct($imagePath, $outputDir) { $this->imagePath=$imagePath; $this->outputDir=$outputDir; }

// 添加水印 public function addWatermark($watermarkPath, $position='bottom-right') { $image=$this->loadImage(); $watermark=$this->loadImage($watermarkPath);

$watermarkWidth=imagesx($watermark); $watermarkHeight=imagesy($watermark);

switch ($position) { case 'top-left': $x=0; $y=0; break; case 'top-right': $x=imagesx($image) - $watermarkWidth; $y=0; break; case 'bottom-left': $x=0; $y=imagesy($image) - $watermarkHeight; break; case 'bottom-right': $x=imagesx($image) - $watermarkWidth; $y=imagesy($image) - $watermarkHeight; break; default: $x=(imagesx($image) - $watermarkWidth) / 2; $y=(imagesy($image) - $watermarkHeight) / 2; break; }

imagecopy($image, $watermark, $x, $y, 0, 0, $watermarkWidth, $watermarkHeight);

imagedestroy($watermark); $this->saveImage($image); }

// 生成缩略图 public function createThumbnail($maxWidth, $maxHeight) { $image=$this->loadImage(); $originalWidth=imagesx($image); $originalHeight=imagesy($image);

$ratio=min($maxWidth / $originalWidth, $maxHeight / $originalHeight); $newWidth=$originalWidth * $ratio; $newHeight=$originalHeight * $ratio;

$thumbnail=imagecreatetruecolor($maxWidth, $maxHeight); imagecopyresampled($thumbnail, $image, 0, 0, 0, 0, $newWidth, $newHeight, $originalWidth, $originalHeight);

imagedestroy($image); $this->saveImage($thumbnail); }

private function loadImage($path=null) { if ($path) { $this->imagePath=$path; } $imageInfo=getimagesize($this->imagePath); switch ($imageInfo[2]) { case IMAGETYPE_JPEG: $image=imagecreatefromjpeg($this->imagePath); break; case IMAGETYPE_PNG: $image=imagecreatefrompng($this->imagePath); break; case IMAGETYPE_GIF: $image=imagecreatefromgif($this->imagePath); break; default: $image=false; break; } return $image; }

private function saveImage($image) { $outputPath=$this->outputDir . '/' . basename($this->imagePath); switch (getimagesize($this->imagePath)[2]) { case IMAGETYPE_JPEG: imagejpeg($image, $outputPath); break; case IMAGETYPE_PNG: imagepng($image, $outputPath); break; case IMAGETYPE_GIF: imagegif($image, $outputPath); break; } imagedestroy($image); }}

本文实例讲述了PHP实现可添加水印与生成缩略图的图片处理工具类。分享给大家供大家参考,具体如下:

ImageTool.class.php

<?php class ImageTool { private $imagePath;//图片路径 private $outputDir;//输出文件夹 private $memoryImg;//内存图像 public function __construct($imagePath, $outputDir = null) { $this->imagePath = $imagePath; $this->outputDir = $outputDir; $this->memoryImg = null; } /** * 显示内存中的图片 * @param $image */ public function showImage() { if ($this->memoryImg != null) { $info = getimagesize($this->imagePath); $type = image_type_to_extension($info[2], false); header('Content-type:' . $info['mime']); $funs = "image{$type}"; $funs($this->memoryImg); imagedestroy($this->memoryImg); $this->memoryImg = null; } } /**将图片以文件形式保存 * @param $image */ private function saveImage($image) { $info = getimagesize($this->imagePath); $type = image_type_to_extension($info[2], false); $funs = "image{$type}"; if (empty($this->outputDir)) { $funs($image, md5($this->imagePath) . '.' . $type); } else { $funs($image, $this->outputDir . md5($this->imagePath) . '.' . $type); } } /** * 压缩图片 * @param $width 压缩后宽度 * @param $height 压缩后高度 * @param bool $output 是否输出文件 * @return resource */ public function compressImage($width, $height, $output = false) { $image = null; $info = getimagesize($this->imagePath); $type = image_type_to_extension($info[2], false); $fun = "imagecreatefrom{$type}"; $image = $fun($this->imagePath); $thumbnail = imagecreatetruecolor($width, $height); imagecopyresampled($thumbnail, $image, 0, 0, 0, 0, $width, $height, $info[0], $info[1]); imagedestroy($image); if ($output) { $this->saveImage($thumbnail); } $this->memoryImg = $thumbnail; return $this; } /** * 为图像添加文字标记 * * @param $content 文本内容 * @param $size 字体大小 * @param $font 字体样式 * @param bool $output 是否输出文件 * @return $this */ public function addTextmark($content, $size, $font, $output = false) { $info = getimagesize($this->imagePath); $type = image_type_to_extension($info[2], false); $fun = "imagecreatefrom{$type}"; $image = $fun($this->imagePath); $color = imagecolorallocatealpha($image, 0, 0, 0, 80); $posX = imagesx($image) - strlen($content) * $size / 2; $posY = imagesy($image) - $size / 1.5; imagettftext($image, $size, 0, $posX, $posY, $color, $font, $content); if ($output) { $this->saveImage($image); } $this->memoryImg = $image; return $this; } /** * 为图片添加水印 * * @param $watermark 水印图片路径 * @param $alpha 水印透明度(0-100) * @param bool $output 是否输出文件 * @return $this */ public function addWatermark($watermark, $alpha, $output = false) { $image_info = getimagesize($this->imagePath); $image_type = image_type_to_extension($image_info[2], false); $image_fun = "imagecreatefrom{$image_type}"; $image = $image_fun($this->imagePath); $mark_info = getimagesize($watermark); $mark_type = image_type_to_extension($mark_info[2], false); $mark_fun = "imagecreatefrom{$mark_type}"; $mark = $mark_fun($watermark); $posX = imagesx($image) - imagesx($mark); $posY = imagesy($image) - imagesy($mark); imagecopymerge($image, $mark, $posX, $posY, 0, 0, $mark_info[0], $mark_info[1], $alpha); if ($output) { $this->saveImage($image); } $this->memoryImg = $image; return $this; } }

ImageTool使用

首先导入ImageTool工具:

require_once 'ImageTool.class.php';

然后实例化ImageTool对象:

$imageTool = new ImageTool('img/oppman.jpeg', 'out/');//图片路径、输出文件夹

一、生成压缩图片

$imageTool->compressImage(350, 250, true);//压缩宽度、压缩高度、是否保存 $imageTool->showImage();

二、添加文字水印

$imageTool->addTextmark('一拳超人', 50, 'res/micro.ttf', true);//内容、尺寸、字体、是否保存 $imageTool->showImage();

三、添加图片水印

$imageTool->addWatermark('res/logo.jpeg', 100, true);//水印路径、透明度、是否保存 $imageTool->showImage();

仅当做临时图像输出:

$imageTool->addTextmark('快捷输出', 50, 'res/micro.ttf')->showImage();

PS:这里再为大家推荐几款比较实用的图片处理工具供大家参考使用:

在线图片裁剪/生成工具:
tools.jb51.net/aideddesign/imgcut

在线图片转换BASE64工具:
tools.jb51.net/transcoding/img2base64

ICO图标在线生成工具:
tools.jb51.net/aideddesign/ico_img

PHP如何制作支持添加水印和生成缩略图的图片处理工具?

在线Email邮箱图标制作工具:
tools.jb51.net/email/emaillogo

在线图片格式转换(jpg/bmp/gif/png)工具:
tools.jb51.net/aideddesign/picext

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

本文共计1138个文字,预计阅读时间需要5分钟。

PHP如何制作支持添加水印和生成缩略图的图片处理工具?

PHP实现可添加水印与生成缩略图的图片处理工具类示例:

phpclass ImageTool { private $imagePath; private $outputDir;

public function __construct($imagePath, $outputDir) { $this->imagePath=$imagePath; $this->outputDir=$outputDir; }

// 添加水印 public function addWatermark($watermarkPath, $position='bottom-right') { $image=$this->loadImage(); $watermark=$this->loadImage($watermarkPath);

$watermarkWidth=imagesx($watermark); $watermarkHeight=imagesy($watermark);

switch ($position) { case 'top-left': $x=0; $y=0; break; case 'top-right': $x=imagesx($image) - $watermarkWidth; $y=0; break; case 'bottom-left': $x=0; $y=imagesy($image) - $watermarkHeight; break; case 'bottom-right': $x=imagesx($image) - $watermarkWidth; $y=imagesy($image) - $watermarkHeight; break; default: $x=(imagesx($image) - $watermarkWidth) / 2; $y=(imagesy($image) - $watermarkHeight) / 2; break; }

imagecopy($image, $watermark, $x, $y, 0, 0, $watermarkWidth, $watermarkHeight);

imagedestroy($watermark); $this->saveImage($image); }

// 生成缩略图 public function createThumbnail($maxWidth, $maxHeight) { $image=$this->loadImage(); $originalWidth=imagesx($image); $originalHeight=imagesy($image);

$ratio=min($maxWidth / $originalWidth, $maxHeight / $originalHeight); $newWidth=$originalWidth * $ratio; $newHeight=$originalHeight * $ratio;

$thumbnail=imagecreatetruecolor($maxWidth, $maxHeight); imagecopyresampled($thumbnail, $image, 0, 0, 0, 0, $newWidth, $newHeight, $originalWidth, $originalHeight);

imagedestroy($image); $this->saveImage($thumbnail); }

private function loadImage($path=null) { if ($path) { $this->imagePath=$path; } $imageInfo=getimagesize($this->imagePath); switch ($imageInfo[2]) { case IMAGETYPE_JPEG: $image=imagecreatefromjpeg($this->imagePath); break; case IMAGETYPE_PNG: $image=imagecreatefrompng($this->imagePath); break; case IMAGETYPE_GIF: $image=imagecreatefromgif($this->imagePath); break; default: $image=false; break; } return $image; }

private function saveImage($image) { $outputPath=$this->outputDir . '/' . basename($this->imagePath); switch (getimagesize($this->imagePath)[2]) { case IMAGETYPE_JPEG: imagejpeg($image, $outputPath); break; case IMAGETYPE_PNG: imagepng($image, $outputPath); break; case IMAGETYPE_GIF: imagegif($image, $outputPath); break; } imagedestroy($image); }}

本文实例讲述了PHP实现可添加水印与生成缩略图的图片处理工具类。分享给大家供大家参考,具体如下:

ImageTool.class.php

<?php class ImageTool { private $imagePath;//图片路径 private $outputDir;//输出文件夹 private $memoryImg;//内存图像 public function __construct($imagePath, $outputDir = null) { $this->imagePath = $imagePath; $this->outputDir = $outputDir; $this->memoryImg = null; } /** * 显示内存中的图片 * @param $image */ public function showImage() { if ($this->memoryImg != null) { $info = getimagesize($this->imagePath); $type = image_type_to_extension($info[2], false); header('Content-type:' . $info['mime']); $funs = "image{$type}"; $funs($this->memoryImg); imagedestroy($this->memoryImg); $this->memoryImg = null; } } /**将图片以文件形式保存 * @param $image */ private function saveImage($image) { $info = getimagesize($this->imagePath); $type = image_type_to_extension($info[2], false); $funs = "image{$type}"; if (empty($this->outputDir)) { $funs($image, md5($this->imagePath) . '.' . $type); } else { $funs($image, $this->outputDir . md5($this->imagePath) . '.' . $type); } } /** * 压缩图片 * @param $width 压缩后宽度 * @param $height 压缩后高度 * @param bool $output 是否输出文件 * @return resource */ public function compressImage($width, $height, $output = false) { $image = null; $info = getimagesize($this->imagePath); $type = image_type_to_extension($info[2], false); $fun = "imagecreatefrom{$type}"; $image = $fun($this->imagePath); $thumbnail = imagecreatetruecolor($width, $height); imagecopyresampled($thumbnail, $image, 0, 0, 0, 0, $width, $height, $info[0], $info[1]); imagedestroy($image); if ($output) { $this->saveImage($thumbnail); } $this->memoryImg = $thumbnail; return $this; } /** * 为图像添加文字标记 * * @param $content 文本内容 * @param $size 字体大小 * @param $font 字体样式 * @param bool $output 是否输出文件 * @return $this */ public function addTextmark($content, $size, $font, $output = false) { $info = getimagesize($this->imagePath); $type = image_type_to_extension($info[2], false); $fun = "imagecreatefrom{$type}"; $image = $fun($this->imagePath); $color = imagecolorallocatealpha($image, 0, 0, 0, 80); $posX = imagesx($image) - strlen($content) * $size / 2; $posY = imagesy($image) - $size / 1.5; imagettftext($image, $size, 0, $posX, $posY, $color, $font, $content); if ($output) { $this->saveImage($image); } $this->memoryImg = $image; return $this; } /** * 为图片添加水印 * * @param $watermark 水印图片路径 * @param $alpha 水印透明度(0-100) * @param bool $output 是否输出文件 * @return $this */ public function addWatermark($watermark, $alpha, $output = false) { $image_info = getimagesize($this->imagePath); $image_type = image_type_to_extension($image_info[2], false); $image_fun = "imagecreatefrom{$image_type}"; $image = $image_fun($this->imagePath); $mark_info = getimagesize($watermark); $mark_type = image_type_to_extension($mark_info[2], false); $mark_fun = "imagecreatefrom{$mark_type}"; $mark = $mark_fun($watermark); $posX = imagesx($image) - imagesx($mark); $posY = imagesy($image) - imagesy($mark); imagecopymerge($image, $mark, $posX, $posY, 0, 0, $mark_info[0], $mark_info[1], $alpha); if ($output) { $this->saveImage($image); } $this->memoryImg = $image; return $this; } }

ImageTool使用

首先导入ImageTool工具:

require_once 'ImageTool.class.php';

然后实例化ImageTool对象:

$imageTool = new ImageTool('img/oppman.jpeg', 'out/');//图片路径、输出文件夹

一、生成压缩图片

$imageTool->compressImage(350, 250, true);//压缩宽度、压缩高度、是否保存 $imageTool->showImage();

二、添加文字水印

$imageTool->addTextmark('一拳超人', 50, 'res/micro.ttf', true);//内容、尺寸、字体、是否保存 $imageTool->showImage();

三、添加图片水印

$imageTool->addWatermark('res/logo.jpeg', 100, true);//水印路径、透明度、是否保存 $imageTool->showImage();

仅当做临时图像输出:

$imageTool->addTextmark('快捷输出', 50, 'res/micro.ttf')->showImage();

PS:这里再为大家推荐几款比较实用的图片处理工具供大家参考使用:

在线图片裁剪/生成工具:
tools.jb51.net/aideddesign/imgcut

在线图片转换BASE64工具:
tools.jb51.net/transcoding/img2base64

ICO图标在线生成工具:
tools.jb51.net/aideddesign/ico_img

PHP如何制作支持添加水印和生成缩略图的图片处理工具?

在线Email邮箱图标制作工具:
tools.jb51.net/email/emaillogo

在线图片格式转换(jpg/bmp/gif/png)工具:
tools.jb51.net/aideddesign/picext

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。