文档章节

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
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
PHP学习的难点、精髓在哪?

下面几点仅供参考(WHT361) 1.Ajax使用(HTML XHTML XML CSS JavaScript Jquery DOM Dhtml) 函数/数组/字符串 2.文件操作(生成html) 图像处理 3.数据库操作 4.类和对象 5.正则表达式 cookie...

万花筒创新创业
2017/03/27
367
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
0
0
spring EL 和资源调用

资源调用 import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.PropertySource;import org.springframework.core.io.Resource;......

Canaan_
今天
0
0
memcached命令行、memcached数据导出和导入

一、memcached命令行 yum装telnet yum install telent 进入memcached telnet 127.0.0.1 11211 命令最后的2表示,两位字节,30表示过期时间(秒) 查看key1 get key1 删除:ctrl+删除键 二、m...

Zhouliang6
今天
0
0
Linux定时备份MySQL数据库

做项目有时候要备份数据库,手动备份太麻烦,所以找了一下定时备份数据库的方法 Linux里有一个 crontab 命令被用来提交和管理用户的需要周期性执行的任务,就像Windows里的定时任务一样,用这...

月夜中徘徊
今天
1
1
shell-日志脚本小实验

1.查找日志2018-8-15,求得那一分钟访问量最大。 #/bin/bash#from cc#2018-8-15#2018-08-15.log 哪一分钟 访问量 最大for d in `ls /data/nginx/logs/`doif [ -a 2018-08-15...

chencheng-linux
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部