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 相关文章推荐
用php将任何格式视频转为flv的代码
Sep 03 PHP
php页面消耗内存过大的处理办法
Mar 18 PHP
php set_time_limit()函数的使用详解
Jun 05 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
php 流程控制switch的简单实例
Jun 07 PHP
php插入含有特殊符号数据的处理方法
Nov 24 PHP
php四种定界符详解
Feb 16 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
Jun 16 PHP
php实现的错误处理封装类实例
Jun 20 PHP
Laravel中前端js上传图片到七牛云的示例代码
Sep 04 PHP
PHP 记录访客的浏览信息方法
Jan 29 PHP
PHP手机短信验证码实现流程详解
May 17 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
php使用CURL伪造IP和来源实例详解
2015/01/15 PHP
php计算整个目录大小的方法
2015/06/19 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
jQuery中toggleClass()方法用法实例
2015/01/05 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
2015/12/07 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
AngularJS实现表格的增删改查(仅限前端)
2017/07/04 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
2019/06/10 jQuery
Javascript模拟实现new原理解析
2020/03/03 Javascript
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
Python中splitlines()方法的使用简介
2015/05/20 Python
Python import与from import使用及区别介绍
2018/09/06 Python
Python基础教程之异常详解
2019/01/10 Python
python实现植物大战僵尸游戏实例代码
2019/06/10 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
python实现图片转字符画的完整代码
2021/02/21 Python
巴基斯坦购物网站:Goto
2019/03/11 全球购物
MYSQL基础面试题
2012/05/13 面试题
高中化学教学反思
2014/01/13 职场文书
大家检讨书5000字
2014/02/03 职场文书
品质管理部岗位职责范文
2014/03/01 职场文书
销售个人求职信范文
2014/04/28 职场文书
生日宴会策划方案
2014/06/03 职场文书
喝酒驾驶检讨书
2014/10/01 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
婚礼双方父亲致辞
2015/07/27 职场文书
外出听课学习心得体会
2016/01/15 职场文书