使用PHP绘制对联--书写最美的祝福

一、生成效果图

在这里插入图片描述

二、使用注意事项

  1. 上下联之间使用英文空格隔开;
  2. 上下联文字数量保持一致(对联的基本要求);
  3. 理论上联数没有限制,可以生成单联图片;
  4. 此代码还是有我不满意的地方,但是勉强可以使用,如有更简洁高效的代码,欢迎提出修改意见;
  5. PHP是最好的语言;
  6. 看完别忘了点赞评论加转发,谢谢。

三、代码如下

<?php
/**
 * Desc:
 * Created by: Joker
 * Date: 2020/2/27
 * Time: 17:03
 * @param $coupleContent: 对联内容
 * @param $LayDir: 排版方向 W为横排 H为竖排
 * @param $fileName: 生成的对联图片名
 */
function create_couplet($coupleContent="四海升平 安居乐业",$LayDir="H",$fileName="对联"){
    $dlArr = explode(" ",$coupleContent);
    // 背景图的宽,高都为250px  10为我设定的每联之间的间隔  10为首尾联靠底图的总间隔,所以首联距离底图为5px;
    if (strtoupper($LayDir)=="W"){
        $h = 250*count($dlArr) + 10 * (count($dlArr) - 1)+10;
        $w = count(mb_str_split($dlArr[0])) * 250 + 10;
    }else{
        $w = 250*count($dlArr) + 10 * (count($dlArr) - 1)+10;
        $h = count(mb_str_split($dlArr[0])) * 250 + 10;
    }
    
    $m = imagecreate($w,$h);
    // 设置画布的背景颜色
    imagecolorallocate($m,255,255,255);
    // 输出底图图像
    Imagejpeg($m,'temp.jpg');
    $bigImg = imagecreatefromstring(file_get_contents("temp.jpg"));
    create_jpg($bigImg,$dlArr,$fileName,$LayDir);
}

/**
 * Desc:
 * Created by: Joker
 * Date: 2020/2/27
 * Time: 17:51
 * @param $bigImg: 底图
 * @param $dlArr: 对联内容上下联组成的数组
 * @param $fileName: 输入的图片名
 * @param $LayDir: 排列方式
 */
function create_jpg($bigImg,$dlArr,$fileName,$LayDir){
    foreach($dlArr as $kl=>$vl){
        $array = mb_str_split($vl);
        foreach($array as $k=>$v){
            // 字体的大小,这里不是px,而是磅,具体的计算方式可以指定百度
            $size = 120;
            // 字体文件,这里就不提供下载了,担忧引起纠纷,如果想做测试可以使用window直通自带的fonts文件,文件所在目录: C:\Windows\Fonts\
            $font = "FZXKFW.TTF";
            // 加载已有图像
            $img = imagecreatefromjpeg("duilian.jpg");
            // 设置字体颜色
            $black = imagecolorallocate($img, 0, 0, 0);
            // imagefttext("Image", "字体大小", "旋转", "左边距","上边距", "字体颜色", "字体文件名称", "插入文本内容");
            imagettftext($img, $size, 0, 50,185, $black, $font, $v);
            $qCodeImg = $img;
            if (strtoupper($LayDir)=="W"){
                $up = 5 + 10 * $kl + $kl * 250 ;
                $left =  5+(250*$k);
            }else{
                $left = 5 + 10*(count($dlArr)-$kl-1) + (count($dlArr)-$kl-1) * 250 ;
                $up =  5+(250*$k);
            }
            imagecopymerge($bigImg, $qCodeImg,$left,$up, 0, 0, 250, 250, 100);
        }
    }
    unlink("temp.jpg");
    imagejpeg($bigImg,str_replace('+', '%20', iconv('UTF-8', 'GB18030',$fileName.".jpg")));
}

/**
 * Desc: 将单联内容分解为数组
 * Created by: Joker
 * Date: 2020/2/27
 * Time: 17:07
 * @param $content: 上联或者下联的内容
 * @return array[]|false|string[]
 */
function mb_str_split($content){
    return preg_split('/(?<!^)(?!$)/u', $content);
}
create_couplet("瑞雪兆丰年 爆竹辞旧岁","h",'对联');
?>
<img src="<?='对联.jpg'?>" alt="">

四、使用测试

4.1 瑞雪兆丰年 爆竹辞旧岁

create_couplet("瑞雪兆丰年 爆竹辞旧岁","h",'对联');

在这里插入图片描述

4.2 普天同庆 欢度春节

create_couplet("普天同庆 欢度春节","w",'春节');

在这里插入图片描述

4.3 单联—你是我最美的期待

create_couplet("你是我最美的期待","w",'最美');

在这里插入图片描述

4.4 多联 --《送瘟神》

4.4.1 其一

create_couplet("绿水青山枉自多 华佗无奈小虫何 千村薜荔人遗矢 万户萧疏鬼唱歌 坐地日行八万里 巡天遥看一千河 牛郎欲问瘟神事 一样悲欢逐逝波","h",'送瘟神其一');

在这里插入图片描述

4.4.2 其二

create_couplet("春风杨柳万千条 六亿神州尽舜尧 红雨随心翻作浪 青山着意化为桥 天连五岭银锄落 地动三河铁臂摇 借问瘟君欲何往 纸船明烛照天烧","h",'送瘟神其二');

在这里插入图片描述

4.4 武汉加油 中国加油

create_couplet("武汉加油 中国加油","w",'加油');

在这里插入图片描述

五、对联背景图

在这里插入图片描述

六、感谢

受到天元浪子老师的启发 感谢!

七、写在最后

武汉加油,中国加油!
向所有奋斗在疫情一线的同胞们致敬!
愿大家都平安归来!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章