PHP實現(xiàn)文字寫入圖片功能
更新時間:2019年02月18日 12:10:11 作者:葉少翔
這篇文章主要為大家詳細介紹了PHP實現(xiàn)文字寫入圖片功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了PHP實現(xiàn)文字寫入圖片的具體代碼,供大家參考,具體內(nèi)容如下
/**
* PHP實現(xiàn)文字寫入圖片
*/
class wordsOnImg {
public $config = null;
/**
* @param $config 傳入?yún)?shù)
* @param $config['file'] 圖片文件
* @param $config['size'] 文字大小
* @param $config['angle'] 文字的水平角度
* @param $config['fontfile'] 字體文件路徑
* @param $config['width'] 預(yù)先設(shè)置的寬度
* @param $config['x'] 開始寫入時的橫坐標(biāo)
* @param $config['y'] 開始寫入時的縱坐標(biāo)
*/
public function __construct($config=null){
if(empty($config)){
return 'must be config';
}
$fileArr = explode(".",$config['file']);
$config['file_name'] = $fileArr[0];
$config['file_ext'] = $fileArr[1];
$this->config = $config;
}
/**
* PHP實現(xiàn)圖片上寫入實現(xiàn)文字自動換行
* @param $fontsize 字體大小
* @param $angle 角度
* @param $font 字體路徑
* @param $string 要寫在圖片上的文字
* @param $width 預(yù)先設(shè)置圖片上文字的寬度
* @param $flag 換行時單詞不折行
*/
public function wordWrap($fontsize,$angle,$font,$string,$width,$flag=true) {
$content = "";
if($flag){
$words = explode(" ",$string);
foreach ($words as $key=>$value) {
$teststr = $content." ".$value;
$testbox = imagettfbbox($fontsize, $angle, $font, $teststr);
//判斷拼接后的字符串是否超過預(yù)設(shè)的寬度
if(($testbox[2] > $width)) {
$content .= "\n";
}
$content .= $value." ";
}
}else{
//將字符串拆分成一個個單字 保存到數(shù)組 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, $font, $teststr);
// 判斷拼接后的字符串是否超過預(yù)設(shè)的寬度
if (($testbox[2] > $width) && ($content !== "")) {
$content .= "\n";
}
$content .= $l;
}
}
return $content;
}
/**
* 實現(xiàn)寫入圖片
* @param $text 要寫入的文字
* @param $flag 是否直接輸出到瀏覽器,默認是
*/
public function writeWordsToImg($text,$flag=true){
if(empty($this->config)){
return 'must be config';
}
//獲取圖片大小
$img_pathWH = getimagesize($this->config['file']);
//打開指定的圖片文件
$im = imagecreatefrompng($this->config['file']);
#設(shè)置水印字體顏色
$color = imagecolorallocatealpha($im,0, 0, 255, 75);//藍色
$have = false;
if(stripos($text,"<br/>")!== false){
$have = true;
}
if($have){
$words_text = explode("<br/>",$text);
$words_text[0] = $this->wordWrap($this->config['size'], $this->config['angle'], $this->config['fontfile'], $words_text[0], $this->config['width']); //自動換行處理
$words_text[1] = $this->wordWrap($this->config['size'], $this->config['angle'], $this->config['fontfile'], $words_text[1], $this->config['width']); //自動換行處理
$words_text[2] = $this->wordWrap($this->config['size'], $this->config['angle'], $this->config['fontfile'], $words_text[2], $this->config['width']); //自動換行處理
imagettftext($im, $this->config['size'], $this->config['angle'], $this->config['x'], $this->config['y'], $color, $this->config['fontfile'], $words_text[0]);
imagettftext($im, $this->config['size'], $this->config['angle'], $this->config['x'], $this->config['y']+30, $color, $this->config['fontfile'], " ".$words_text[1]);
imagettftext($im, $this->config['size'], $this->config['angle'], $img_pathWH[0]/2+70, $img_pathWH[1]-80, $color, $this->config['fontfile'], $words_text[2]);
if($flag){
header("content-type:image/png");
imagepng($im);
imagedestroy($im);
}
imagepng($im,$this->config['file_name'].'_1.'.$this->config['file_ext']);
imagedestroy($im);
}
$words_text = $this->wordWrap($this->config['size'], $this->config['angle'], $this->config['fontfile'], $text, $this->config['width']); //自動換行處理
imagettftext($im, $this->config['size'], $this->config['angle'], $this->config['x'], $this->config['y'], $color, $this->config['fontfile'], $words_text);
if($flag){
header("content-type:image/png");
imagepng($im);
imagedestroy($im);
}
imagepng($im,$this->config['file_name'].'_1.'.$this->config['file_ext']);
imagedestroy($im);
}
}
$text = "Dear Kang<br/>If you can hold something up and put it down, it is called weight lifting;if you can hold something up but can never put it down, it's called bueden bearing. Pitifully, most of people are bearing heavy burdens when they are in love.\n\nBeing nice to someone you dislike doesn't mean you're a hypocritical people. It means you're mature enough to tolerate your dislike towards them.<br/>Mr. Kang";
$data = array(
'file'=>'20171226152410.png',
'size'=>12,
'angle'=>0,
'fontfile'=>'./Font/ChalkboardSE.ttc',
'width'=>270,
'x'=>20,
'y'=>70
);
//使用
$wordsOnImgObj = new wordsOnImg($data);
$wordsOnImgObj->writeWordsToImg($text);
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
相關(guān)文章
PHP同時連接多個mysql數(shù)據(jù)庫示例代碼
這篇文章主要介紹了PHP同時連接多個mysql數(shù)據(jù)庫的具體實現(xiàn),需要的朋友可以參考下2014-03-03
THINKPHP在添加數(shù)據(jù)的時候獲取主鍵id的值方法
下面小編就為大家?guī)硪黄猅HINKPHP在添加數(shù)據(jù)的時候獲取主鍵id的值方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04
PHP實現(xiàn)將瀏覽歷史頁面網(wǎng)址保存到cookie的方法
這篇文章主要介紹了PHP實現(xiàn)將瀏覽歷史頁面網(wǎng)址保存到cookie的方法,涉及php對cookie的讀取、字符串轉(zhuǎn)化及保存等技巧,需要的朋友可以參考下2015-01-01

