文档章节

PHP培训之php图像处理类

c
 czk19900520
发布于 2017/06/04 16:30
字数 742
阅读 1
收藏 0

//转载请著名出处,千锋PHP-PHP培训的实力派

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。

本文转载自:

共有 人打赏支持
c
粉丝 0
博文 10
码字总数 0
作品 0
一言不合就学习:PHP优秀学习文章资料汇总整理

发现一个不错的网站,DevStore,移动互联网企业运营解决方案整合平台,产品前期-设计阶段-开发测试-推广阶段-运维运营,各个阶段都有涉及。 下面整理一些针对包括程序员、运营、设计师等在内...

FrancisSoung
2016/08/25
0
0
基于web的android图像处理示例(Win7+Apache+PHP+Matlab+Android)

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

长平狐
2012/10/08
407
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软件裁出来...

AOWANA
2017/09/10
394
10
应用程序框架--ModPHP

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

Ayon-Lee
2017/01/26
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

可爱的python测试开发库(python测试开发工具库汇总)

欢迎转载,转载请注明来源: github地址 谢谢点赞 本文地址 相关书籍下载 测试开发 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装。 链接 selenium - web UI自动化测试。 链...

python测试开发人工智能安全
50分钟前
2
0
Shiro | 实现权限验证完整版

写在前面的话 提及权限,就会想到安全,是一个十分棘手的话题。这里只是作为学校Shiro的一个记录,而不是,权限就应该这样设计之类的。 Shiro框架 1、Shiro是基于Apache开源的强大灵活的开源...

冯文议
今天
1
0
linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
3
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部