使用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",'加油');

在這裏插入圖片描述

五、對聯背景圖

在這裏插入圖片描述

六、感謝

受到天元浪子老師的啓發 感謝!

七、寫在最後

武漢加油,中國加油!
向所有奮鬥在疫情一線的同胞們致敬!
願大家都平安歸來!

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