php文本轉圖片自動換行的方法

來源:互聯網
上載者:User

今天無意中瀏覽網面的時候發現一個長微博,它可以將文本轉成png圖片,於是乎就研究一下PHP文本轉圖片的方式,其實只要是用到了PHP的擴充庫,GD庫來產生圖片,再通過映像函數產生,代碼寫出來後,發現如果文字太多了,圖片就會超過螢幕的寬度,導致瀏覽器右拉條的出現,於是,想想有沒有什麼辦法可以使圖片能夠自動換行,通過GG,發現了一篇文章,通過判斷字串和截取字串再拼接起來實現文本圖片自動換行,以下貼出此代碼,以學習之中:

複製代碼 代碼如下:<?php
header ("Content-type: image/png");
mb_internal_encoding("UTF-8"); // 設定編碼

function autowrap($fontsize, $angle, $fontface, $string, $width) {
// 這幾個變數分別是 字型大小, 角度, 字型名稱, 字串, 預設寬度
$content = "";

// 將字串拆分成一個個單字 儲存到數組 letter 中
for ($i=0;$i<mb_strlen($string);$i++) {
$letter[] = mb_substr($string, $i, 1);
}

foreach ($letter as $l) {
$teststr = $content." ".$l;
$testbox = imagettfbbox($fontsize, $angle, $fontface, $teststr);
// 判斷拼接後的字串是否超過預設的寬度
if (($testbox[2] > $width) && ($content !== "")) {
$content .= "\n";
}
$content .= $l;
}
return $content;
}

$bg = imagecreatetruecolor(300, 290); // 建立畫布
$white = imagecolorallocate($bg, 255, 255, 255); // 建立白色
$text = "前段時間練習使用 PHP 的 GD 庫時,為了文本的自動換行糾結了很久。雖然可以通過插入 \n 實現換行,但考慮到文本中既有中文又有英文,強制限定每多少個文字就換行的效果很差。後來終於找到了一個英文下的自動換行的方法,其大概原理是將空格作為分隔字元,將字串分割為一個個單詞,然後再一個接一個地拼接在一起,判斷其長度是否超過畫布,若超過則換行再拼接,否則繼續拼接。考慮到中文需要將每個文字都拆開,所以我進行了一點修改,完整代碼如下。";
$text = autowrap(12, 0, "simsun.ttc", $text, 280); // 自動換行處理

// 若檔案編碼為 GB2312 請將下行的注釋去掉
// $text = iconv("GB2312", "UTF-8", $text);

imagettftext($bg, 12, 0, 10, 30, $white, "simsun.ttc", $text);
imagepng($bg);
imagedestroy($bg);
?>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.