如何制作朋友圈搞笑证件图片(附源码实例)

最近一波波刷爆朋友圈的各种结婚证,采矿证,搞笑对话,提车清单等等是怎么做的呢?对于外行来说,可能会感觉很神奇,那么今天我就长话短说给大家介绍下这种图片是怎么自动生成的,感兴趣的可以搜索下相关资料详细了解。首先,需要会一门后端开发语言例如PHP等,然后利用一张姓名部分空白的底图作为模板,在姓名空白处利用PHP的GD库,把用户通过表单提交过来的数据PS到图片上,再把处理后的图片返回给浏览器展示。

如何制作朋友圈搞笑证件图片(附源码实例)

例如这张图片,姓名部分是用户表单提交的数据,合格证编号是当前的时间戳,签发日期是当前的格式化时间,底图模板这三个部分是空白的,方便系统把相关信息画上去。

开发类似功能的关键在于合理利用例如GD图形处理库,在WEB开发领域GD库的应用是非常广泛的,生成缩略图,图片加水印,各种图形验证码都有GD的功劳,搞笑图片的生成主要用到GD库的imagefttext函数(在图片指定位置画上文字)和imagejpeg函数(创建jpeg格式的图片)。


需要的条件:

一,一个支持PHP语言的计算机环境,例如SAE

二,支持并开启PHP图形处理库如GD,SAE默认开启

三,一张原始图片,方便系统画图

四,一种合适的字体,看起来不突兀

五,有个基础的WEB开发知识


三个案例源码:

链接: http://pan.baidu.com/s/1pJXDnkB 密码: qhvj


GD库函数举例:

PHP
<?php  

/* GD库的函数举例 * 2016.03.07 *实际应用请看案例     */

	$font_file = 'msyhbd.ttf'; //字体文件
	$text = $_REQUEST['text'];  //收集用户发送过来的文本信息
	
    $img_file = 'fjz.jpg';  //引用图片模板
  	$imgpic = imagecreatefromjpeg($img_file); //创建画布

  	//颜色
	$text_color = imagecolorallocate($imgpic, 200, 200, 204);  //数字是颜色代码

	//添加文字
	imagefttext("画布", "文字大小", "方位", "X轴", "Y轴", "颜色", "字体文件", "文本信息");

    //告诉浏览器用jpeg图片形式显示		
  	header('Content-Type: image/jpeg');  		
  	header('Cache-control: no-chace');

    //利用函数 imagejpeg() 输出jpeg格式图片
  	imagejpeg($this->img);

  	// 释放图片资源

  	imagedestroy($this->img);
?>

写在前面
SAE真是个好东西,只要有创意,用SAE基本上都可以实现。比如利用SAE做个搞笑图片自动生成器,先上图看看效果。

图片1:臣妾做不到
zbd.jpg 

图片2:妈妈再打我一次
munv.jpg 


图片3:王宝强-泰囧
wbq.jpg 

原理说明
选取一张搞笑的图片作为模板,比如“妈妈再打我一次”,在三行空白处利用SAE中PHP的GD库,画出前台用户提交过来的搞笑段子,返回给前台浏览器进行展示。
GD库是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以创建图片、处理图片。在网站上GD库通常用来生成缩略图,或者用来给图片添加水印,或者用来生成验证码等。幸运的是,SAE默认是对GD库支持的,非常感谢 
本地开发php默认是不支持GD库的,需要自己开启,开启的方式是:在本地PHP安装目录下找到php.ini文件,去掉extension=php_gd2.dll前面的分号(;)即开启对GD库的支持。

图片4:开启gd库 gd.jpg 


需要用到的GD库函数如下
imagecreatefromjpeg:创建一张图片
imagecolorallocate:给图片分配颜色
imagefttext:给图片在指定位置上添加文字
imagejpeg:创建格式为jpeg的图片
imagedestroy:销毁图片,释放资源


开发步骤
以“妈妈再打我一次”举例。

1. 准备1张原始图片
* 原图,空白处准备写字
2. 用户在浏览器中输入三句话
* 将文字提交到服务端让php页面进行处理
3. 输出结果
* 服务器处理完,返回结果,将生成后的图片放回给浏览器展示。

原理很简单,下面贴一些重要的代码:

1. 前端Html

HTML代码 
  1. <html>
  2. <head>
  3. <title>“妈妈再打我一次”图片生成器</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <style type="text/css">
  6. .wrapper{
  7.     width: 960px;
  8. }
  9. .left{
  10.     margin-top: 50px;
  11.     width: 670px;
  12.     float: left;
  13. }
  14. .right{
  15.     width: 290px;
  16.     float: left;
  17. }
  18. </style>
  19. <head>
  20. <body>
  21. <form action="munv.php" method="get">
  22. <div id="wrapper" class="wrapper">    
  23.     <div id="left" class="left">
  24.       <h2 align="center"><span>“妈妈再打我一次”图片生成器</span></h2>
  25.       <table align="center">
  26.       
  27.       <tr>
  28.         <td>第一行文字</td>
  29.         <td><input type="text" name="text1" size="50"></td>
  30.       </tr>
  31.       <tr>
  32.         <td>第二行文字</td>
  33.         <td><input type="text" name="text2" size="50"></td>
  34.       </tr>
  35.       <tr>
  36.         <td>第三行文字</td>
  37.         <td><input type="text" name="text3" size="50"></td>
  38.       </tr>
  39.       
  40.       <tr>
  41.         <td>操作</td>
  42.         <td>
  43.             <input type="submit" value="生成图片">
  44.         </td>
  45.       </tr>
  46.       
  47.     </table>
  48.     </div>
  49.     
  50.     <div id="right" class="right">
  51.       <img src="../images/munv.jpg" />
  52.     </div>
  53. </div>    
  54. </form>
  55. </body>
  56. </html>
2. 服务端接受请求的php
PHP代码 
  1. <?php
  2. /**
  3. * 使用php操作GD库,完成图片生成
  4. */
  5. //用面向对象的方式编程,引入类定义文件
  6. require 'Munv.class.php';
  7. $pic = new Munv; //实例化对象
  8. $pic->generate(); //调用生成图片的方法
  9. ?>
3.真正实现功能的php类
PHP代码 
  1. <?php  
  2. /**
  3. * 制作图片“妈妈再打我一次”的类
  4. */
  5. class Munv{
  6.     //参数变量
  7.     private $text1 = ''//文字1
  8.     private $text2 = ''//文字2
  9.     private $text3 = ''//文字3
  10.     
  11.     /* 写php赚钱,因为php中到处都是$  */
  12.     private $img//画布
  13.     private $font_file = '../images/msyhbd.ttf'//微软雅黑粗体字体文件
  14.     /**
  15.     * 生成图片的方法
  16.     */
  17.     public function generate(){
  18.       //1.初始化请求数据
  19.       $this->initText();
  20.       //2.创建图片画布
  21.       $this->mkImg();
  22.       
  23.       //3.将文字打印到图片的固定位置
  24.       $this->addText();
  25.       
  26.       //4.返回图片内容
  27.       $this->outputImg();
  28.       //5.释放画布资源
  29.       $this->destroyImg();
  30.     }
  31.     /**
  32.     * 初始化参数
  33.     */
  34.     private function initText(){
  35.       $this->text1 = $_REQUEST['text1'];
  36.       $this->text2 = $_REQUEST['text2'];
  37.       $this->text3 = $_REQUEST['text3'];
  38.     }
  39.     /**
  40.     * 创建画布
  41.     */
  42.     private function mkImg(){
  43.       $img_file = '../images/munv.jpg';
  44.       $this->img = imagecreatefromjpeg($img_file); //通过jpeg格式图片创建画布
  45.     }
  46.     /**
  47.     * 给图片添加文字
  48.     */
  49.     private function addText(){
  50.       //使用imagefttext()方法添加文字
  51.       //imagefttext( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text)
  52.       //imagefttext(画布,字体大小,书写方向,文字基准位置x,文字基准位置y,颜色,字体文件,文本内容)
  53.       //颜色处理必须使用RGB形式表示
  54.       //颜色首先要分配到图片画布上,才能在画布上使用,利用函数imagecolorallocate来分配
  55.       //字体文件,采用微软雅黑粗体字体 msyhbd.ttf
  56.       //颜色
  57.       $text1_color = imagecolorallocate($this->img, 63, 72, 204);
  58.       $text2_color = imagecolorallocate($this->img, 63, 72, 204);
  59.       $text3_color = imagecolorallocate($this->img, 63, 72, 204);
  60.       //文字1
  61.       imagefttext($this->img, 16, 0, 50, 186, $text1_color$this->font_file, $this->text1);
  62.       //文字2
  63.       imagefttext($this->img, 16, 0, 50, 366, $text2_color$this->font_file, $this->text2);
  64.       //文字3
  65.       imagefttext($this->img, 16, 0, 50, 560, $text3_color$this->font_file, $this->text3);
  66.     }
  67.     /**
  68.     * 输出图片到浏览器进行展示
  69.     */
  70.     private function outputImg(){
  71.   //告诉浏览器已jpeg图片形式显示&不要缓存      
  72.       header('Content-Type: image/jpeg');      
  73.       header('Cache-control: no-chace');
  74.       //利用函数 imagejpeg() 将图片已jpeg格式进行输出
  75.       imagejpeg($this->img);
  76.     }
  77.     /**
  78.     * 释放图片资源
  79.     */
  80.     private function destroyImg(){
  81.   //销毁图片
  82.       imagedestroy($this->img);
  83.     }
  84. }
  85. ?>
源代码
上述几种搞笑图片都已经存放在SAE上了,可以直接访问使用,地址是:

清单
http://fanyong.sinaapp.com/img/

源代码托管在github上,地址是: https://github.com/FrankFan/PictureBuilder
欢迎批评指正。

原理基本都一样,剩下的就是发挥自己的想象力,好好利用SAE进行创作,祝大家开心。

这种图片生成器的原理和开发都是非常简单的,关键在于创意。

来源:http://cloudbbs.org/forum.php?mod=viewthread&tid=22413

http://www.huceo.com/post/430.html

虚拟主机:www.xzhuji.com  演示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值