文章目录
一、生成效果图
二、使用注意事项
- 上下联之间使用英文空格隔开;
- 上下联文字数量保持一致(对联的基本要求);
- 理论上联数没有限制,可以生成单联图片;
- 此代码还是有我不满意的地方,但是勉强可以使用,如有更简洁高效的代码,欢迎提出修改意见;
- PHP是最好的语言;
- 看完别忘了点赞评论加转发,谢谢。
三、代码如下
<?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);
}
$file_name = "对联";
create_couplet("瑞雪兆丰年 爆竹辞旧岁","h",$file_name);
?>
<img src="<?=$file_name.'.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",'加油');
五、对联背景图
六、感谢
受到天元浪子老师的启发 感谢!
七、写在最后
武汉加油,中国加油!
向所有奋斗在疫情一线的同胞们致敬!
愿大家都平安归来!