文档章节

php图像处理类--php培训

 刘景刘恒
发布于 2017/06/01 17:35
字数 683
阅读 3
收藏 0

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,共同进步

© 著作权归作者所有

粉丝 1
博文 172
码字总数 139067
作品 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
590
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
727
10
应用程序框架--ModPHP

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

Ayon-Lee
2017/01/26
2.1K
4

没有更多内容

加载失败,请刷新页面

加载更多

kibana汉化

kibana5 / 6 需要下载补丁包,https://github.com/anbai-inc/Kibana_Hanization 其中 v6 版本原生支持国际化,只需要添加资源文件并且配置即可 kibana7 v7版本官方内置汉化资源,在配置文件 ...

细肉云吞
23分钟前
5
0
spring boot 自定义日志 log4j2

使用默认的日志在实际开发中会存在很多问题,比如备份文件名称无法自动重命名、各个等级的日志被放在一个文件中等,所以实际开发中为了更好满足我们的需求,我们一般都会自定义采用配置的方式...

雷开你的门
27分钟前
7
0
PCB设计-Allegro软件入门系列-设计参数配置(上)

前言 经历了导入网表,和放置器件后,我们就要画板子了,但是必要的设计参数也要先准备好,磨刀不误砍柴工。 《一》显示参数 这里主要设置DRC报错标志大小和飞线显示类型 (1)DRC标志可以适当...

demyar
28分钟前
7
0
js实现微博、微信分享

html <!-- 分享 --><div class="share-box"> <b style="vertical-align: middle;">分享到:</b> <a title="分享到新浪微博" class="shareSina"><span class="share-icon"></span><......

张兴华ZHero
44分钟前
7
0
创龙TMS320DM8168浮点DSP C674x + ARM Cortex-A8的CPU、NAND FLASH、NOR FLASH

TL6678-EasyEVM是广州创龙基于SOM-TL6678核心板而研发的一款多核高性能DSP开发板。开发板采用核心板+底板方式,底板采用沉金无铅工艺的四层板设计,尺寸为200mm*106.65mm,它为用户提供了SOM...

Tronlong创龙
47分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部