文档章节

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
私信 提问
基于web的android图像处理示例(Win7+Apache+PHP+Matlab+Android)

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

长平狐
2012/10/08
556
0
2014 年 10 个最佳的 PHP 图像操作库

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

oschina
2014/05/06
8.1K
36
一言不合就学习:PHP优秀学习文章资料汇总整理

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

FrancisSoung
2016/08/25
0
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

没有更多内容

加载失败,请刷新页面

加载更多

js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
17
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
27
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
昨天
31
0
MYSQL索引

索引的作用 索引类似书籍目录,查找数据,先查找目录,定位页码 性能影响 索引能大大减少查询数据时需要扫描的数据量,提高查询速度, 避免排序和使用临时表 将随机I/O变顺序I/O 降低写速度,占用磁...

关元
昨天
14
0
撬动世界的支点——《引爆点》读书笔记2900字优秀范文

撬动世界的支点——《引爆点》读书笔记2900字优秀范文: 作者:挽弓如月。因为加入火种协会的读书活动,最近我连续阅读了两本论述流行的大作,格拉德威尔的《引爆点》和乔纳伯杰的《疯传》。...

原创小博客
昨天
35
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部