PHP使用imagecreatefromstring(), imagecolorallocate() imagettftext() 给图片添加文字描述

首先了解这三个php图片处理函数的作用及用法

1、imagecreatefromstring() -- 从字符串中的图像流新建一图像
说明 : resource imagecreatefromstring ( string image )
imagecreatefromstring() 返回一个图像标识符,其表达了从给定字符串得来的图像。图像格式将自动检测,只要 PHP 支持:JPEG,PNG,GIF,WBMP 和 GD2。
返回值: 成功则返回图像资源,如果图像格式不支持,数据不是认可的格式,或者图像已损坏则返回 FALSE。
示例:

  imagecreatefromstring(file_get_contents('./img.jpg')); //从当前目录下img.jpg为准新建一图像

2、imagecolorallocate()   int imagecolorallocate(resource image,intred,int green,intblue) //为一幅图分配颜色
示例:

$white = imagecolorallocate($im,255,255,255);//返回由十进制整数设置为白色的标识符
$black = imagecolorallocate($im,0,0,0);//返回由十进制参数设置为黑色的标识符

3、imagettftext()
说明:array imagettftext ( resource image , floatsize , float angle , intx , int y , intcolor , string fontfile , stringtext )
参数:


image 由图象创建函数(例如imagecreatetruecolor())返回的图象资源。
size 字体的尺寸。根据 GD 的版本,为像素尺寸(GD1)或点(磅)尺寸(GD2)。
angle 角度制表示的角度,0 度为从左向右读的文本。更高数值表示逆时针旋转。例如 90 度表示从下向上读的文本。
x 由 xy 所表示的坐标定义了第一个字符的基本点(大概是字符的左下角)。这和 imagestring() 不同,其 xy 定义了第一个字符的左上角。例如 "top left" 为 0, 0。
y Y 坐标。它设定了字体基线的位置,不是字符的最底端。
color 颜色索引。使用负的颜色索引值具有关闭防锯齿的效果。见 imagecolorallocate()
fontfile 是想要使用的 TrueType 字体的路径。

根据 PHP 所使用的 GD 库的不同,当 fontfile 没有以 / 开头时则 .ttf 将被加到文件名之后并且会在库定义字体路径中尝试搜索该文件名。

当使用的 GD 库版本低于 2.0.18 时,一个空格字符 而不是分号将被用来作为不同字体文件的“路径分隔符”。不小心使用了此特性将会导致一条警告信息:Warning: Could not find/open font。对受影响的版本来说唯一解决方案就是将字体移动到不包含空格的路径中去。

很多情况下字体都放在脚本的同一个目录下。下面的小技巧可以减轻包含的问题。


<?php
// Set the enviroment variable for GD
putenv('GDFONTPATH=' . realpath('.'));

// Name the font to be used (note the lack of the .ttf extension)
$font = 'SomeFont';
?>

text :

UTF-8 编码的文本字符串。

可以包含十进制数字化字符表示(形式为:€)来访问字体中超过位置 127 的字符。UTF-8 编码的字符串可以直接传递。

命名实体,比如 © 是不支持的。可以考虑使用 html_entity_decode() 来解码命名实体为 UTF-8 字符。 (自 PHP 5.0.0 开始 html_entity_decode() 开始支持)

如果字符串中使用的某个字符不被字体支持,一个空心矩形将替换该字符。

返回值: 返回一个含有 8 个单元的数组表示了文本外框的四个角,顺序为坐下角,右下角,右上角,左上角。这些点是相对于文本的而和角度无关,因此“左上角”指的是以水平方向看文字时其左上角。

以上就是php向图片添加文字必须三个函数,下面看代码:

原图


2015070581208537.JPG

方法

/**
     * 给图片添加文字
     * 
     * @param string $strImg 图片文件名
     * @param string $strText 字符串内容
     * @param array $arrOpt ['r','g','b','x','y','fontsize','angle','savepath','ttf']
     */
public static function addText($strImg, $strText, $arrOpt = array()){
        
        $intR = isset($arrOpt['r']) ? $arrOpt['r'] : 255;
        $intG = isset($arrOpt['g']) ? $arrOpt['g'] : 255;
        $intB = isset($arrOpt['b']) ? $arrOpt['b'] : 255;
        $intX = isset($arrOpt['x']) ? $arrOpt['x'] : 24;
        $intY = isset($arrOpt['y']) ? $arrOpt['y'] : 24;
        $intSize = isset($arrOpt['fontsize']) ? $arrOpt['fontsize'] : 14;
        $intAngle = isset($arrOpt['angle']) ? $arrOpt['angle'] : 0;
        $strSave = isset($arrOpt['savepath']) ? $arrOpt['savepath'] : false;
        $strFont = isset($arrOpt['ttf']) ? $arrOpt['ttf'] : './simsun.ttf';
        
        $im = imagecreatefromstring(file_get_contents($strImg));

        $color = imagecolorallocate($im, $intR, $intG, $intB);
        imagettftext($im, $intSize, $intAngle, $intX, $intY, $color, $strFont, $strText);
        
        if (empty($strSave)) {
            header("Content-type: image/jpeg");
            imagejpeg($im);
        } else {
            imagejpeg($im, $strSave);
        }
        
        imagedestroy($im);
    }
    

效果


1536819784.JPG

改变字体颜色大小再来

1536824151.JPG

还可以添加垂直文字示例:

    /**
     * 给图片添加垂直文字
     *
     * @param string $strImg 图片文件名
     * @param string $strText 字符串内容
     * @param array $arrOpt ['r','g','b','x','y','fontsize','savepath','ttf']
     */
    public static function addVerticalText($strImg, $strText, $arrOpt = array()){
        
        $intR = isset($arrOpt['r']) ? $arrOpt['r'] : 255;
        $intG = isset($arrOpt['g']) ? $arrOpt['g'] : 255;
        $intB = isset($arrOpt['b']) ? $arrOpt['b'] : 255;
        $intX = isset($arrOpt['x']) ? $arrOpt['x'] : 24;
        $intY = isset($arrOpt['y']) ? $arrOpt['y'] : 24;
        $intSize = isset($arrOpt['fontsize']) ? $arrOpt['fontsize'] : 14;
        $intAngle = 0;
        $strSave = isset($arrOpt['savepath']) ? $arrOpt['savepath'] : false;
        $strFont = isset($arrOpt['ttf']) ? $arrOpt['ttf'] : './simsun.ttf';
        
        $im = imagecreatefromstring(file_get_contents($strImg));
        $color = imagecolorallocate($im, $intR, $intG, $intB);
        
        preg_match_all('/./u', $strText, $m);
        foreach ($m[0] as $text) {
            if (empty($text)) {
                continue;
            }
            imagettftext($im, $intSize, $intAngle, $intX, $intY, $color, $strFont, $text);
            $intY += intval($intSize * 1.5);
        }
        
        if (empty($strSave)) {
            header("Content-type: image/jpeg");
            imagejpeg($im);
        } else {
            imagejpeg($im, $strSave);
        }
        
        imagedestroy($im);
    }

效果:


1536824194.JPG

好的 ,下篇分享一下php图像处理函数添加水印的方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容

  • 本文讲解常用GD函数的应用 1.一个简单的图像 我们先看一个例子: 运行结果: 这段代码中我们用了一下几个函数: ...
    老马的春天阅读 1,560评论 2 8
  • 牺牲了周末两天,去兰溪培训。 自从读史明目明脑明心明精神之后,对一切我的阶层所能经历的事都能剥其外皮,见于内骨,抛...
    是捂脸怪呀阅读 345评论 5 1
  • 正式开营前的小游戏,再加上风铃老师带领的团队建设,让大家迅速记住了彼此的名字。 接下来的自由组合分组,三个女生和两...
    春喜百合阅读 710评论 0 5
  • 【瓜瓜,17-12-2016 小确幸】#如有神#进账感:还没有读书破万卷,却找到下笔如有神的感觉。这两日和朋友聊天...
    kaigua阅读 172评论 2 1