php实现图片局部打马赛克的方法


Posted in PHP onFebruary 11, 2015

本文实例讲述了php实现图片局部打马赛克的方法。分享给大家供大家参考。具体分析如下:

原理:

对图片中选定区域的每一像素,增加若干宽度及高度,生成矩型。而每一像素的矩型重叠在一起,就形成了马赛克效果。
本例使用GD库的imagecolorat获取像素颜色,使用imagefilledrectangle画矩型。

效果图如下所示:

php实现图片局部打马赛克的方法

代码如下:

<?php  

/** 图片局部打马赛克 

* @param  String  $source 原图 

* @param  Stirng  $dest   生成的图片 

* @param  int     $x1     起点横坐标 

* @param  int     $y1     起点纵坐标 

* @param  int     $x2     终点横坐标 

* @param  int     $y2     终点纵坐标 

* @param  int     $deep   深度,数字越大越模糊 

* @return boolean 

*/  

function imageMosaics($source, $dest, $x1, $y1, $x2, $y2, $deep){  

  

    // 判断原图是否存在  

    if(!file_exists($source)){  

        return false;  

    }  

  

    // 获取原图信息  

    list($owidth, $oheight, $otype) = getimagesize($source);  

  

    // 判断区域是否超出图片  

    if($x1>$owidth || $x1<0 || $x2>$owidth || $x2<0 || $y1>$oheight || $y1<0 || $y2>$oheight || $y2<0){  

        return false;  

    }  

  

    switch($otype){  

        case 1: $source_img = imagecreatefromgif($source); break;  

        case 2: $source_img = imagecreatefromjpeg($source); break;  

        case 3: $source_img = imagecreatefrompng($source); break;  

        default:  

            return false;  

    }  

  

    // 打马赛克  

    for($x=$x1; $x<$x2; $x=$x+$deep){  

        for($y=$y1; $y<$y2; $y=$y+$deep){  

            $color = imagecolorat($source_img, $x+round($deep/2), $y+round($deep/2));  

            imagefilledrectangle($source_img, $x, $y, $x+$deep, $y+$deep, $color);  

        }  

    }  

  

    // 生成图片  

    switch($otype){  

        case 1: imagegif($source_img, $dest); break;  

        case 2: imagejpeg($source_img, $dest); break;  

        case 3: imagepng($source_img, $dest); break;  

    }  

  

    return is_file($dest)? true : false;  

  

}  

  

$source = 'source.jpg';  

$dest = 'dest.jpg';  

  

$flag = imageMosaics($source, $dest, 176, 98, 273, 197, 4);  

echo '<img src="'.$source.'">';  

echo '<img src="'.$dest.'">';  

?>

完整实例代码点击此处本站下载。

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP4实际应用经验篇(1)
Oct 09 PHP
需要发散思维学习PHP
Jun 29 PHP
PHP 图像尺寸调整代码
May 26 PHP
ajax取消挂起请求的处理方法
Mar 18 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 PHP
php中in_array函数用法分析
Nov 15 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
Dec 24 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 PHP
php文件上传后端处理小技巧
May 22 PHP
Yii框架中jquery表单验证插件用法示例
Oct 18 PHP
PHP命令行与定时任务
Apr 01 PHP
PHP实现两种排课方式
Jun 26 PHP
php实现获取文件mime类型的方法
Feb 11 #PHP
php强制更新图片缓存的方法
Feb 11 #PHP
Laravel中使用自己编写类库的3种方法
Feb 10 #PHP
Laravel中使用阿里云OSS Composer包分享
Feb 10 #PHP
PHP实现Javascript中的escape及unescape函数代码分享
Feb 10 #PHP
PHP实现获取FLV文件的时间
Feb 10 #PHP
PHP中实现获取IP和地理位置类分享
Feb 10 #PHP
You might like
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
PHP积分兑换接口实例
2015/02/09 PHP
php 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
Node.js中的缓冲与流模块详细介绍
2015/02/11 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
详解vue2.0 资源文件assets和static的区别
2018/11/27 Javascript
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python使用百度翻译进行中翻英示例
2014/04/14 Python
从零学Python之入门(三)序列
2014/05/25 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
python字符串判断密码强弱
2020/03/18 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
数学系个人求职信范文
2014/01/30 职场文书
高三政治教学反思
2014/02/06 职场文书
2014教师党员自我评议总结
2014/09/19 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
Python selenium的这三种等待方式一定要会!
2021/06/10 Python
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js