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.class.php
===================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();
PHP 图片处理工具类(添加水印与生成缩略图)的更多相关文章
- 图片处理工具类 - ImageUtils.java
		纯JAVA实现的图片处理工具类,提供图片的裁剪.压缩.获取尺寸.制作圆角等方法. 源码如下:(点击下载 -ImageUtils.java .FolderUtils.java .commons-io-2 ... 
- 图片水印工具类java
		关于jar包的导入我就不多说了,我会把引入的jar包显示出来,大家自行Google package com.net.util; import java.awt.AlphaComposite; impo ... 
- Java操作图片的工具类
		操作图片的工具类: import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.a ... 
- java图片处理工具类
		直接上代码: package com.zxd.tool; /** * Created by zhang on 14-3-1. * 图片的常用操作类 */ import java.awt.AlphaCo ... 
- Java的图片处理工具类
		import Java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ... 
- 【转】java缩放图片、java裁剪图片代码工具类
		一首先看下效果 二工具类 三测试类 在系统的上传图片功能中,我们无法控制用户上传图片的大小,用户可能会上传大到几十M小到1k的的图片,一方面图片太大占据了太多的空间,另一方面,我们没办法在页面上显示统 ... 
- JavaUtil_03_图片处理工具类
		一.源码 功能:缩放图像.切割图像.图像类型转换.彩色转黑白.文字水印.图片水印等 package com.ray.dingtalk.util; import java.awt.AlphaCompos ... 
- Java常用工具类---image图片处理工具类、Json工具类
		package com.jarvis.base.util; import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStre ... 
- android -------- 压缩图片文件工具类
		项目中常常遇到文件压缩问题,上传文件大小限制 今天简单的分享一点干货,文件压缩,图片压缩,压缩Bitmap 主要通过尺寸压缩和质量压缩,以达到清晰度最优 效果图 源码地址: https://githu ... 
- android ImageLoader加载本地图片的工具类
		import android.widget.ImageView; import com.nostra13.universalimageloader.core.ImageLoader; /** * 异步 ... 
随机推荐
- Linux编译安装源码包的流程
			流程: 1. 下载并解压源码包2. 运行:configure3. 编译:make4. 安装:make install 编译时需要注意一个原则:不要在解压的包中直接执行./configure.m ... 
- BZOJ 3505 【Cqoi2014】 数三角形
			Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m ... 
- (转载)SQL删除重复数据方法
			本文转载自http://www.cnblogs.com/sunxiaonan/archive/2009/11/24/1609439.html 例如: id name ... 
- void 0作用
			undefine 是可以被赋值的. 但是void 操作符 通过 计算 void 后面的变量名后还是会返回一个undefined ,这样就保证了你的undefined即使被定义了,采用void 表达式, ... 
- IO(七)----转换流
			输入字节流的转换流:InputStreamReader 是字节流通向字符流的桥梁. 输出字节流的转换流:OutputStreamWriter 可以把输出字节流转换成输出字符流 . 是符流通向字节流 ... 
- 20145315&20145307《信息安全系统设计基础》实验五
			20145315&20145307<信息安全系统设计基础>实验五 北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1453 1452 姓名:陈俊达 ... 
- WPF中RadioButton绑定数据的正确方法
			RadioButton一般用于单选的时候,也就是从一组值中选择一个值. 比如性别有“男”和“女”两种取值,而对于一个员工的实例来说,性别的取值要么是男,要么是女. 这种时候一般就会用到RadioBut ... 
- C3P0数据源的使用
			1.C3P0数据源的使用 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.C3P0有自己的格式文件,如下 <?xml version= ... 
- 未封装的js放大镜特效
			<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>j ... 
- 【转】Java面试题全集2.2(上)
			146.什么是IoC和DI?DI是如何实现的? 答:IoC叫控制反转,是Inversion of Control的缩写,DI(Dependency Injection)叫依赖注入,是对IoC更简单的诠 ... 
