PHP 自定義圖片的生成與保存實(shí)例講解

背景

  • 最近在開(kāi)發(fā)小程序過(guò)程中,涉及到小程序分享功能的實(shí)現(xiàn),一般如果不作處理,基本就是默認(rèn)當(dāng)前頁(yè)面的部分截圖顯示而已,所以為了美觀,基本都會(huì)進(jìn)行自定義圖片
  • 而我們的要求是,拼團(tuán)功能中,對(duì)于開(kāi)團(tuán)成功的用戶提示分享操作,分享展示的圖片要顯示幾個(gè)重要元素,這樣一來(lái),就需要服務(wù)端生成一個(gè)符合要求的圖片...

框架:ThinkPHP3.2.3(版本而已,無(wú)所謂...)

? 前期準(zhǔn)備

  • 首先,對(duì)于靜態(tài)資源,請(qǐng)放置于自己代碼框架的對(duì)應(yīng)位置,要保證能夠順利訪問(wèn)
  • 比如,我的幾個(gè)靜態(tài)資源文件都是放在 Public/images下的
    2018092912303849.png

? function.php 核心處理方法

根據(jù)自己的框架需求,將提供的公共方法放置于正確位置,比如我的框架將其放在 Common/function.php

  • 使用的 createSharePng()即為核心處理方法,因?yàn)榇a太多,可到附錄中進(jìn)行源文件下載參考
    20180929122540354.png

注意一點(diǎn):測(cè)試發(fā)現(xiàn),代碼支持本地字體資源文件的讀取,但是網(wǎng)絡(luò)資源沒(méi)成功

? 方法調(diào)用

請(qǐng)參考我的調(diào)用方式,注意可以使用兩種方式哦

public function imgShareTest(){
        $confData = [
            'goods_img' => 'http://img.mp.itc.cn/upload/20170811/d2f47957e9054891a7c47482ad8c5ddf_th.jpg',
            'shop_price' => 78.50,
            'pt_price' => 56.50,
            'save_price' => '28%',
            'user_img' => 'https://wx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqXCNxwqzGzBvc7LibqmRtBqrxHdTtLpZafVsENVrHrHPyTQ9qEQe00XFlu6DFrKGFx6zZ5jIh4LdA/132',
            'who_img' => 'Public/images/share_pt_who.png'
        ];
        //第一種方法:TODO 直接輸出,可用于顯示測(cè)試效果
        createSharePng($confData); die;

        //第二種方法: TODO 輸出到圖片,傳入保存路徑進(jìn)行圖片保存
        createSharePng($confData, "Public/images/share_" . time() . ".png");
        echo 'Hello My Dear~';
    }

? 運(yùn)行效果:

? 附錄

1. 源代碼下載 >>>

2. 瞎扯閑扯

  • 個(gè)人認(rèn)為,這種圖片生成操作對(duì)于一個(gè)后臺(tái)PHPer 來(lái)說(shuō)太麻煩了,為了計(jì)算比例、取色,我使用了 PhotoShop、PicPick 這些前端設(shè)計(jì)工具,最后拼湊出這個(gè)效果,如果嫌丑,那應(yīng)該怨設(shè)計(jì)師去...

3. 拓展知識(shí)

補(bǔ)充幾個(gè)重點(diǎn)的 PHP繪圖函數(shù),不知道參數(shù)使用,自己怎么可能繪制出想要的效果
感覺(jué)看文檔,多改幾個(gè)值就知道咋用了...

  • (1) int imagecolorallocate ( resource image , intred , int green , intblue )`
imagecolorallocate() 返回一個(gè)標(biāo)識(shí)符,
代表了由給定的 RGB 成分組成的顏色。
red,green 和 blue 分別是所需要的顏色的紅,綠,藍(lán)成分
這些參數(shù)是 0 到 255 的整數(shù)或者十六進(jìn)制的 0x00 到 0xFF
imagecolorallocate() 必須被調(diào)用以創(chuàng)建每一種用在 image 所代表的圖像中的顏色。
  • (2) bool imagefilledrectangle( resource image, int x1, int y1, int x2, int y2, int color )
imagefilledrectangle() 在 image 圖像中畫一個(gè)用 color 顏色填充了的矩形,
其左上角坐標(biāo)為 x1,y1,右下角坐標(biāo)為 x2,y2。0, 0 是圖像的最左上角
  • (3) array imagettftext ( resource image , floatsize , float angle , intx , int y , intcolor , string fontfile , stringtext )
imagettftext — 用 TrueType 字體向圖像寫入文本
image : 由圖象創(chuàng)建函數(shù)(例如imagecreatetruecolor())返回的圖象資源。
size : 字體的尺寸。根據(jù) GD 的版本,為像素尺寸(GD1)或點(diǎn)(磅)尺寸(GD2)。
angle: 角度制表示的角度,0 度為從左向右讀的文本。更高數(shù)值表示逆時(shí)針旋轉(zhuǎn)。例如 90 度表示從下向上讀的文本。
x: 由 x,y 所表示的坐標(biāo)定義了第一個(gè)字符的基本點(diǎn)(大概是字符的左下角)。這和 imagestring() 不同,其 x,y 定義了第一個(gè)字符的左上角。例如 "top left" 為 0, 0。
y: Y 坐標(biāo)。它設(shè)定了字體基線的位置,不是字符的最底端。
color: 顏色索引。使用負(fù)的顏色索引值具有關(guān)閉防鋸齒的效果。見(jiàn) imagecolorallocate()。
fontfile: 是想要使用的 TrueType 字體的路徑。
根據(jù) PHP 所使用的 GD 庫(kù)的不同,當(dāng) fontfile 沒(méi)有以 / 開(kāi)頭時(shí)則 .ttf 將被加到文件名之后并且會(huì)在庫(kù)定義字體路徑中嘗試搜索該文件名。
  • (4) bool imageellipse ( resource image , intcx , int cy , intwidth , int height , intcolor )
在指定的坐標(biāo)上畫一個(gè)橢圓
image: 由圖象創(chuàng)建函數(shù)(例如imagecreatetruecolor())返回的圖象資源。
cx: 中間的 X 坐標(biāo)。
cy: 中間的 Y 坐標(biāo)。
width: 橢圓的寬度。
height: 橢圓的高度。
color: 橢圓的顏色。顏色標(biāo)識(shí)符由 imagecolorallocate() 創(chuàng)建。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容