PHP使用GD庫在圖片上編寫自定義文字

PHP使用GD庫在圖片上編寫自定義文字(代碼可直接複製使用)

一、準備工作

  1. 準備一張背景圖片(.jpg、.png、.gif任意格式即可);
  2. 準備一個字體文件(.ttf格式),如果你只是想在背景圖片寫入純英文字符串則可以忽略此步驟。

二、基礎代碼展示

	/**
     * 使用GD庫在圖片上寫文字
     */
    public function createImage()
    {
        //header('Content-Type: image/png');#如果你先在瀏覽器上展示圖片的合成好的圖片請打開此註釋。
        $img = $back = 'space/backgroundImage.png';//背景圖本地路徑
        $str = '我被打印在圖片上拉';//需要打印在背景圖上的文字
        $text = preg_split('/(?<!^)(?!$)/u', $str);//將文字拆分爲數組(中文,需要字體庫才能正常顯示,若字體庫引入錯誤或當前使用的字體庫本身就不支持中文,最後生成圖片後都將無法顯示你打印出的中文)注意:字符串需要是UTF-8 編碼的文本字符串。
        $code = preg_split('/(?<!^)(?!$)/u', 'IM-1592797913-7EBC0DF3-872B');//將值拆分爲數組(英文,英文無需字體庫即可直接打印在背景圖上。)注意:字符串需要是UTF-8 編碼的文本字符串。
        $size = 20;//字體大小
        $font = "./font/msyh.ttf";//加載字體ttf(換成你自己的字體庫路徑)

        $img = imagecreatefrompng($img);// 加載背景圖

        #imagecolorallocate(參數A:背景圖的路徑,參數B:RGB顏色參數1,參數C:RGB顏色參數2,參數D:RGB顏色參數3)
        #藍色的RGB值爲:(24, 165, 234)
        $color = imagecolorallocate($img, 24, 165, 234);//設置字體顏色,給你想打印在圖片上的文字設置一個你喜歡的字體顏色
        $x = 0;//首個字的x軸橫座標
        $y = 30;//首個字的y軸縱座標

        //將指定中文字符寫在背景圖片上
        foreach ($text as $k => $v) {
            #imagettftext(參數A:背景圖路徑,參數B:字體大小,參數C:文字角度0標識從左到右讀的文本,參數D:首個文字在背景圖上的橫座標,參數E:首個文字在背景圖上的縱座標,參數F:文字的顏色值,參數G:字體庫路徑,參數H:需要寫在圖上的文字,)
            imagettftext($img, $size, 0, $x, $y, $color, $font, $v);//在背景圖上循環添加文字
            $x = $x + 50;//增加橫座標來做到間距的效果,沒有這個參數打印出來的字會重疊在一起!
        }

        //將指定英文字符寫在背景圖片上
        $x1 = 0;
        $y1 = 60;
        foreach ($code as $k => $v) {
            imagettftext($img, 20, 0, $x1, $y1, $color, $font, $v);//循環添加文字
            $x1 = $x1 + 30;//增加橫座標來做到間距的效果
        }

        $fileName = rand(111, 222) . time() . ".png";//定義圖片名
        print_r('https://xcx.xxx.com/test/' . $fileName);

        #imagepng() 注意這個函數,我的背景圖是.png格式且我最後想的到的也是.png格式的圖,所以
        #我使用這個函數,如果你想要其他格式的圖片你還可以參見 imagegif(),imagejpeg()等
        $url = imagepng($img, "test/" . $fileName);//保存生成好的圖片到本地

        //拓展:圖片的旋轉
        $img2 = imagecreatefrompng('test/' . $fileName);// 加載已有圖像
        $rotate = imagerotate($img2, 90, 0);
        imagepng($rotate, 'test/' . mt_rand(333, 555) . 'rotate.png');//保存生成好的圖片到本地
        print_r([$rotate, $url]);
    }

三、代碼運行後的效果展示

在這裏插入圖片描述

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