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

本文实例讲述了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:这里再为大家推荐几款比较实用的图片处理工具供大家参考使用:

在线图片裁剪/生成工具:

http://tools.jb51.net/aideddesign/imgcut

在线图片转换BASE64工具:

http://tools.jb51.net/transcoding/img2base64

ICO图标在线生成工具:

http://tools.jb51.net/aideddesign/ico_img

在线Email邮箱图标制作工具:

http://tools.jb51.net/email/emaillogo

在线图片格式转换(jpg/bmp/gif/png)工具:

http://tools.jb51.net/aideddesign/picext

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

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

以上是 PHP实现可添加水印与生成缩略图的图片处理工具类 的全部内容, 来源链接: utcz.com/p/221529.html

回到顶部