php实现图片添加描边字和马赛克的方法


Posted in PHP onDecember 10, 2014

本文实例讲述了php实现图片添加描边字和马赛克的方法。分享给大家供大家参考。具体实现方法如下:

马赛克:void imagemask ( resource image, int x1, int y1, int x2, int y2, int deep)

imagemask() 把坐标 x1,y1 到 x2,y2(图像左上角为 0, 0)的矩形区域加上马赛克。

deep为模糊程度,数字越大越模糊。

描边:void imagetextouter ( resource image, int size, int x, int y, string color, string fontfile, string text, string outercolor)

imagetextouter() 将字符串 text 画到 image 所代表的图像上,从坐标 x,y(左上角为 0, 0)开始,颜色为 color,边框所使用的颜色为 outercolor,使用 fontfile 所指定的 truetype 字体文件。

如果不指定字体文件,则使用gd的内部字体。根据 php 所使用的 gd 库的不同,如果 fontfile 没有以 ‘/'开头,则 ‘.ttf' 将被加到文件名之后并且会搜索库定义字体路径。

如果指定了字体文件,由 x,y 所表示的坐标定义了第一个字符的基本点(大概是字符的左下角)。否则 x,y 定义了第一个字符的右上角。

fontfile 是想要使用的 truetype 字体的文件名。

text 是文本字符串,可以包含 utf-8 字符序列(形式为:{)来访问字体中超过前 255 个的字符。

color 是十六进制的#rrggbb格式的颜色,如#ff0000为红色。

outercolor 描边颜色,十六进制的#rrggbb格式。

<?php 

/** 

 * gd image mask 

 * 

 * @copyright ugia.cn 

 

 */ 

function imagemask(&$im, $x1, $y1, $x2, $y2, $deep) 

{

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

    { 

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

        { 

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

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

        } 

    } 

} 

//马赛克用法示例: 

header("content-type: image/png"); 

$im = imagecreatefromjpeg("test.jpg"); 

imagemask($im, 57, 22, 103, 40, 8); 

imagepng($im); 

imagedestroy($im); 

?>

运行效果如下图所示:

php实现图片添加描边字和马赛克的方法

<?php 

/** 

 * gd image text outer 

 * 

 * @copyright ugia.cn 

 

 */ 

function imagetextouter(&$im, $size, $x, $y, $color, $fontfile, $text, $outer) 

{ 

    if (!function_exists('imagecolorallocatehex')) 

    { 

        function imagecolorallocatehex($im, $s) 

        { 

           if($s{0} == "#") $s = substr($s,1); 

           $bg_dec = hexdec($s); 

           return imagecolorallocate($im, 

                       ($bg_dec & 0xff0000) >> 16, 

                       ($bg_dec & 0x00ff00) >>  8, 

                       ($bg_dec & 0x0000ff) 

                       ); 

        } 

    } 

    $ttf = false; 

    if (is_file($fontfile)) 

    { 

        $ttf = true; 

        $area = imagettfbbox($size, $angle, $fontfile, $text); 

        $width  = $area[2] - $area[0] + 2; 

        $height = $area[1] - $area[5] + 2; 

    } 

    else 

    { 

        $width  = strlen($text) * 10; 

        $height = 16; 

    } 

    $im_tmp = imagecreate($width, $height); 

    $white = imagecolorallocate($im_tmp, 255, 255, 255); 

    $black = imagecolorallocate($im_tmp, 0, 0, 0); 

    $color = imagecolorallocatehex($im, $color); 

    $outer = imagecolorallocatehex($im, $outer); 

    if ($ttf) 

    { 

        imagettftext($im_tmp, $size, 0, 0, $height - 2, $black, $fontfile, $text); 

        imagettftext($im, $size, 0, $x, $y, $color, $fontfile, $text); 

        $y = $y - $height + 2; 

    } 

    else 

    { 

        imagestring($im_tmp, $size, 0, 0, $text, $black); 

        imagestring($im, $size, $x, $y, $text, $color); 

    } 

    for ($i = 0; $i < $width; $i ++) 

    { 

        for ($j = 0; $j < $height; $j ++) 

        { 

            $c = imagecolorat($im_tmp, $i, $j); 

            if ($c !== $white) 

            { 

                imagecolorat ($im_tmp, $i, $j - 1) != $white || imagesetpixel($im, $x + $i, $y + $j - 1, $outer); 

                imagecolorat ($im_tmp, $i, $j + 1) != $white || imagesetpixel($im, $x + $i, $y + $j + 1, $outer); 

                imagecolorat ($im_tmp, $i - 1, $j) != $white || imagesetpixel($im, $x + $i - 1, $y + $j, $outer); 

                imagecolorat ($im_tmp, $i + 1, $j) != $white || imagesetpixel($im, $x + $i + 1, $y + $j, $outer); 

                // 取消注释,与fireworks的发光效果相同 

                /* 

                imagecolorat ($im_tmp, $i - 1, $j - 1) != $white || imagesetpixel($im, $x + $i - 1, $y + $j - 1, $outer); 

                imagecolorat ($im_tmp, $i + 1, $j - 1) != $white || imagesetpixel($im, $x + $i + 1, $y + $j - 1, $outer); 

                imagecolorat ($im_tmp, $i - 1, $j + 1) != $white || imagesetpixel($im, $x + $i - 1, $y + $j + 1, $outer); 

                imagecolorat ($im_tmp, $i + 1, $j + 1) != $white || imagesetpixel($im, $x + $i + 1, $y + $j + 1, $outer); 

                */ 

            } 

        } 

    } 

    imagedestroy($im_tmp); 

}
//用法示例: 

header("content-type: image/png"); 

$im = imagecreatefromjpeg("bluesky.jpg"); 

$white = imagecolorallocate($im, 255,255,255); 

imagetextouter($im, 9, 10, 20, '#000000', "simsun.ttc", '新年快乐', '#ffffff'); 

imagetextouter($im, 2, 10, 30, '#ffff00', "", 'hello, world!' , '#103993'); 

imagepng($im); 

imagedestroy($im); 

?>

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

PHP 相关文章推荐
用文本文件制作留言板提示(下)
Oct 09 PHP
PHP的FTP学习(三)
Oct 09 PHP
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 PHP
PHP判断远程url是否有效的几种方法小结
Oct 08 PHP
深入PHP FTP类的详解
Jun 13 PHP
php中用memcached实现页面防刷新功能
Aug 19 PHP
PHP @ at 记号的作用示例介绍
Oct 10 PHP
phpstorm编辑器乱码问题解决
Dec 01 PHP
php生成不重复随机数、数组的4种方法分享
Mar 30 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
Mar 15 PHP
PHP中递归的实现实例详解
Nov 14 PHP
PHP实现的数据对象映射模式详解
Mar 20 PHP
PHP生成条形图的方法
Dec 10 #PHP
php自定文件保存session的方法
Dec 10 #PHP
php通过session防url攻击方法
Dec 10 #PHP
php利用cookies实现购物车的方法
Dec 10 #PHP
php针对cookie操作的队列操作类实例
Dec 10 #PHP
php利用cookie实现自动登录的方法
Dec 10 #PHP
PHP使用header()输出图片缓存实例
Dec 09 #PHP
You might like
php 远程图片保存到本地的函数类
2008/12/08 PHP
PHP5 操作MySQL数据库基础代码
2009/09/29 PHP
php旋转图片90度的方法
2013/11/07 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
基于PHP实现短信验证码接口(容联运通讯)
2016/09/06 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
Bootstrap每天必学之标签与徽章
2015/11/27 Javascript
全面解析标签页的切换方式
2016/08/21 Javascript
Bootstrop实现多级下拉菜单功能
2016/11/24 Javascript
Angular组件化管理实现方法分析
2017/03/17 Javascript
webpack常用构建优化策略小结
2019/11/21 Javascript
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
Python中collections模块的基本使用教程
2018/12/07 Python
python矩阵的转置和逆转实例
2018/12/12 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
荷兰睡眠专家:Beter Bed
2020/11/23 全球购物
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
学生的自我鉴定范文
2013/10/24 职场文书
《草虫的村落》教学反思
2014/02/16 职场文书
社团2014年植树节活动总结
2014/03/11 职场文书
神龙架导游词
2015/02/11 职场文书
清洁员岗位职责
2015/02/15 职场文书
老人与海读书笔记
2015/06/26 职场文书
springboot临时文件存储目录配置方式
2021/07/01 Java/Android
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js
volatile保证可见性及重排序方法
2022/08/05 Java/Android
spring boot实现文件上传
2022/08/14 Java/Android