文档章节

PHP培训之php图像处理类

c
 czk19900520
发布于 2017/06/04 16:30
字数 742
阅读 1
收藏 0
点赞 0
评论 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 ⋅ 0

yaf 工程结构

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

skinglzw ⋅ 2017/08/31 ⋅ 0

PHP有哪些图片处理类库,要能处理人像生成美女封面图

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

AOWANA ⋅ 2017/09/10 ⋅ 10

应用程序框架--ModPHP

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

Ayon-Lee ⋅ 2017/01/26 ⋅ 3

PHP学习的难点、精髓在哪?

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

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

php函数method_exists()与is_callable()的区别

php函数methodexists()与iscallable()的区别在哪?在php面相对象设计过程中,往往我们需要在调用某一个方法是 否属于某一个类的时候做出判断,常用的方法有methodexists()和iscallable(),相...

网络营销 ⋅ 2012/02/10 ⋅ 0

15个PHP库,你值得拥有!(上)

最几年,PHP已经成为最受欢迎的一种有效服务器端编程语言。据2013年发布的一份调查报告显示,PHP语言已经被安装在全球超过2.4亿个网站以及210万台Web服务器之上。PHP代表超文本预处理器,它主...

Miss_Hello_World ⋅ 2015/09/02 ⋅ 0

php中非常有用的库

Mink Mink可以让你测试你的Web应用程序与浏览器中正常交互。它消除了两种浏览器仿真器之间的API的差异,给你一个更精确的测试环境。Mink自带的PHPUnit,Behat和Symfony2的支持开箱即用。 Fa...

renew ⋅ 2014/09/28 ⋅ 0

现货!《PHP7实践指南:o2o网站与App后台开发》京东天猫有售

终于发售了,啥也不想说了,喜欢的或需要的就点击 链接 进去购买吧。 另外此书将作为 2017 PHP全球开发者大会 现场活动用书 天猫购书 包邮 PHP7实践指南:O2O网站与App后台开发 数据库设计 PH...

szxy1234 ⋅ 2017/11/02 ⋅ 0

TP5 安装第三方类库

自T5升级到5.0以后,取消了自带的Image类 如果要使用图片上传 需要加载Image类 那么官方给出文档了 使用Composer安装ThinkPHP5的图像处理类库: 也没有具体说怎么弄,此方法甚是麻烦 本人现已...

gutaotao1989 ⋅ 2017/11/07 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

C++难点解析之const修饰符

C++难点解析之const修饰符 c++ 相比于其他编程语言,可能是最为难掌握,概念最为复杂的。结合自己平时的C++使用经验,这里将会列举出一些常见的难点并给出相应的解释。 const修饰符 const在c...

jackie8tao ⋅ 昨天 ⋅ 0

聊聊spring cloud netflix的HystrixCommands

序 本文主要研究一下spring cloud netflix的HystrixCommands。 maven <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-clo......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部