文章目錄
一、生成效果圖
二、使用注意事項
- 上下聯之間使用英文空格隔開;
- 上下聯文字數量保持一致(對聯的基本要求);
- 理論上聯數沒有限制,可以生成單聯圖片;
- 此代碼還是有我不滿意的地方,但是勉強可以使用,如有更簡潔高效的代碼,歡迎提出修改意見;
- 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);
}
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",'加油');
五、對聯背景圖
六、感謝
受到天元浪子老師的啓發 感謝!
七、寫在最後
武漢加油,中國加油!
向所有奮鬥在疫情一線的同胞們致敬!
願大家都平安歸來!