文档章节

php图像处理类

w
 wb123456
发布于 2017/05/31 09:24
字数 722
阅读 1
收藏 1

class Image
{
//保存目录
protected $savePath;
//随机名字
protected $randName;
//图片后缀
protected $extension;
//保存文件名
protected $saveFileName;


public function __construct(
$savePath='./',
$randName=true,
$extension='png'
)
{
$this->savePath = $savePath;
$this->randName = $randName;
$this->extension = $extension;
}


public function setOption($name,$value=null)
{
if (is_array($name)) {
foreach ($name as $k => $v) {
$this->$k = $v;
}
} else {
$this->$name = $value;
}
}


public function getSaveFile()
{
return $this->saveFileName;
}


public function waterMark($dstPath,$srcPath,$pos=9,$pct=100)
{
//1、文件目录检测
if (!is_file($dstPath)) {
return '目标大图不存在';
} else if (!is_file($srcPath)) {
return '水印小图不存在';
} else if (!is_dir($this->savePath)) {
return '保存路径不存在';
} else if (!is_writable($this->savePath)) {
return '保存路径不可写';
}
//2、判断图片尺寸
list($dstWidth,$dstHeight) = getimagesize($dstPath);
list($srcWidth,$srcHeight) = getimagesize($srcPath);
if ($srcWidth > $dstWidth || $srcHeight > $dstHeight) {
return '水印图片尺寸过大';
}
//3、计算水印在目标图片上的位置
if ($pos>=1 && $pos<=9) {
$offsetX = ($pos-1)%3 * ceil(($dstWidth-$srcWidth)/2);
$offsetY = floor(($pos-1)/3) * ceil(($dstHeight-$srcHeight)/2);
} else {
$offsetX = mt_rand(0,$dstWidth-$srcWidth);
$offsetY = mt_rand(0,$dstHeight-$srcHeight);
}
//4、将水印图片合并到目标图片上
$dstImg = $this->openImage($dstPath);
$srcImg = $this->openImage($srcPath);
imagecopymerge($dstImg, $srcImg, $offsetX, $offsetY, 0, 0, $srcWidth, $srcHeight, $pct);
//5、保存图片
$this->saveImage($dstImg,$dstPath);
//6、释放资源
imagedestroy($dstImg);
imagedestroy($srcImg);
//7、返回保存文件的路径
return $this->saveFileName;
}


protected function openImage($imagePath)
{
$info = getimagesize($imagePath);
$extension = image_type_to_extension($info[2],false);
$openFunc = 'imagecreatefrom' . $extension;
return $openFunc($imagePath);
}


protected function saveImage($image,$path)
{
//路径
$this->saveFileName = rtrim($this->savePath,'/') . '/';


$info = pathinfo($path);
//名字
if ($this->randName) {
$this->saveFileName .= uniqid();
} else {
$this->saveFileName .= $info['filename'];
}
//后缀
if (empty($this->extension)) {
$this->extension = $info['extension'];
} else {
$this->extension = ltrim($this->extension,'.');
}
//完整路径名
$this->saveFileName .= '.' . $this->extension;
//保存图片
if ($this->extension == 'jpg') {
$this->extension = 'jpeg';
}
$saveFunc = 'image' . $this->extension;
$saveFunc($image,$this->saveFileName);
//返回保存的文件路径名
return $this->saveFileName;
}


public function zoomImage($imgPath,$width,$height)
{
//1、检查文件目录
if (!file_exists($imgPath)) {
return '图片路径不存在';
} else if (!is_dir($this->savePath)) {
return '保存路径不存在';
} else if (!is_writable($this->savePath)) {
return '保存路径不可写';
}
//2、计算尺寸
list($srcWidth,$srcHeight) = getimagesize($imgPath);
$size = $this->getSize($width,$height,$srcWidth,$srcHeight);
//3、合并图片
$dstImg = imagecreatetruecolor($width,$height);
$srcImg = $this->openImage($imgPath);
$this->mergeImage($dstImg,$srcImg,$size);
//4、保存图片
$this->saveImage($dstImg,$imgPath);
//5、释放资源
imagedestroy($dstImg);
imagedestroy($srcImg);
//6、返回保存的文件路径名
return $this->saveFileName;
}


protected function mergeImage($dstImg,$srcImg,$size)
{
//获取原始图片的透明色
$lucidColor = imagecolortransparent($srcImg);
if ($lucidColor == -1) {
//如果没有透明色,默认设置黑色为透明色
$lucidColor = imagecolorallocate($dstImg, 0, 0, 0);
}
//用透明色填充图片
imagefill($dstImg, 0, 0, $lucidColor);
//设置透明色
imagecolortransparent($dstImg,$lucidColor);
//合并图片
imagecopyresampled($dstImg, $srcImg, $size['offsetX'], $size['offsetY'], 0, 0, $size['newWidth'], $size['newHeight'], $size['srcWidth'], $size['srcHeight']);
}


protected function getSize($width,$height,$srcWidth,$srcHeight)
{
//保存原始尺寸
$size['srcWidth'] = $srcWidth;
$size['srcHeight'] = $srcHeight;
//计算缩放比例
$scaleWidth = $width / $srcWidth;
$scaleHeight = $height / $srcHeight;
$scaleFinal = min($scaleWidth,$scaleHeight);
//保存实际尺寸
$size['newWidth'] = $srcWidth * $scaleFinal;
$size['newHeight'] = $srcHeight * $scaleFinal;
//计算偏移尺寸
if ($scaleWidth < $scaleHeight) { 
$size['offsetX'] = 0;
$size['offsetY'] = round(($height - $size['newHeight'])/2);
} else {
$size['offsetY'] = 0;
$size['offsetX'] = round(($width - $size['newWidth'])/2);
}
return $size;
}

}

 

 

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。互联网+时代,时刻要保持学习,携手千锋PHP,Dream It Possible。

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
w
粉丝 0
博文 77
码字总数 62434
作品 0
私信 提问
2014 年 10 个最佳的 PHP 图像操作库

Thomas Boutell和众多的开发者发明了被称作GD图形库的图形软件库,它是用来动态处理图片的。GD提供了对众多编程语言的支持,例如C,Perl,Python,PHP,OCaml等。除了产生HTML输出之外,你也能用...

oschina
2014/05/06
8.1K
36
基于web的android图像处理示例(Win7+Apache+PHP+Matlab+Android)

本文将介绍C/S模式的图像处理系统。C/S的框架已经在[1]中作了简单的介绍。[2]中介绍了如何搭建基于android和WAMP5的B/S模式的本机测试平台。本系统是在[4]中介绍的基础上开发的,有关图像显示...

长平狐
2012/10/08
556
0
yaf 工程结构

根目录下新建一个public 目录 E:codeyaf_demopublicindex.php index.php移动到public 目录下 define('APPLICATIONPATH', dirname(DIR_)); E:codeyaf_demotesting 测试的入口(做单元测试时用......

skinglzw
2017/08/31
0
0
PHP有哪些图片处理类库,要能处理人像生成美女封面图

世界上最的编程语言PHP有哪些图片处理类库,要求能处理人物,能生成缩略图(包含完整人脸部分)。我业余搞了个美女写真图片(luolitu.com)的WEB站点,目前封面图都是自己手动用PS软件裁出来...

OSC老司机
2017/09/10
561
10
应用程序框架--ModPHP

ModPHP 应用程序框架充分继承 PHP 简单强大的特点,体积仅 200KB 多,但包含了丰富的函数库和类库,支持邮件事务、图像处理、编译模板引擎和 WebSocket 等流行和时兴的功能。 ModPHP 是按照 ...

Ayon-Lee
2017/01/26
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

KaliLinuxNetHunter教程下载相关资源

KaliLinuxNetHunter教程下载相关资源 当用户将刷机工具准备完后,则需要下载ROM包。ROM是ROM image(只读内存镜像)的简称,常用于手机定制系统。一般手机刷机的过程,就是将只读内存镜像(R...

大学霸
18分钟前
1
0
C# 字符串插值

字符串插值 据说是 C# 6.0 中引入的新特性. 字符串插值允许您以更简洁易读的方式将字符串拼凑在一起. 如果在字符串的左引号前添加$,则可以在字符串中的大括号里包含字符串值,如变量等. 一些示...

taadis
42分钟前
2
0
Navicat使用教程:接收MySQL/MariaDB问题通知

下载Navicat Monitor最新版本 Navicat Monitor 是一套安全、简单而且无代理的远程服务器监控工具。它具有强大的功能使你的监控发挥最大效用。受监控的服务器包括 MySQL、MariaDB 和 Percona ...

电池盒
43分钟前
3
0
我是怎样和Linux系统结缘并通过红帽RHCE认证的

我高考完当时就是选择的计算机科学与技术专业,上大学以后联想到的和计算机相关的就只有写代码,开发,网站,网页设计,就没有其他的了,当时学习写代码也都是在Windows上,什么C#、C++之类的...

Linux就该这么学
51分钟前
5
0
hbase的web页面访问

hbase1.1版本web页面默认不开放 在hbase-site.xml中加入一下内容即可 <!-- 新增的配置 --><property><name>hbase.master.info.port</name><value>60010</value></property> 借鉴htt......

你为什么不吃药
55分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部