Smarty中處理Jpgraph影像技術
Smarty是PHP最常使用也非常受開發者歡迎的模板引擎,因為要做的系統的原因,我們還要在系統中使用在影像處理方面很具優勢的Jpgraph外掛來進行影像的資料化查詢。因此,怎麼樣將兩者玩完美地結合應用,是這篇文章的重中之重,希望能對你有所幫助。 起初,我們為了讓系統有生機,我把一個已經寫好的Jpgraph檔案以HTML影像的形式導進模板:
當然,這樣直接顯示我們的靜態圖形即可,說它是靜態的,是因為還沒有進行資料庫的查詢,也就沒有資料傳遞了,此處用到的資料只是我在頁面中定義的一個陣列而已。 然後我們要和資料庫取得連線此處使用PDO的方式進行連線,最終取得的結果就是下面語句中的$conn。然後構造查詢語句,取得資料,也就是這句話:
$arrData['data']=$data->fetchAll();
下面的幾步是用來取其他資料的,總之呢,這個頁面就是處理獲取資料的://module_*_php.php
//查詢資料庫
//詳細資料 and 提交時間
$sql_graph="select data,submit_date from data
where node_id ='$node'";
$data=$conn->query($sql_graph);
$arrData['data']=$data->fetchAll();
//資料量的情況
$rows=$data->rowCount();
//獲取資料型別
$sql_type="select node.node_name,node.alert,data_type.data_type_title,data_type.unit from node
LEFT JOIN `data_type`
ON node.data_type_id=data_type.data_type_id
where node_id='$node'";
$type=$conn->query($sql_type)->fetchAll();
//資料型別
$_SESSION['type']=$type[0]['data_type_title'];
//資料單位 $_SESSION['u']=$type[0]['unit']; //節點名稱 $_SESSION['node']=$type[0]['node_name']; $_SESSION['alert']=$type[0]['alert'];//節點閾值
一般的情況,應該是將處理完的資料放在這個頁面,然後交由本頁面生成影像,但是這個地方因為SMARTY的原因,我是將處理結果通過SESSION的方式傳遞到了jpgraph的plotline.php進行處理並生成影像的。其實這個過程做起來不難,當時想的時候就有些問題了,上網查了好久還是沒能解決,足足熬了一天,才將這個問題想透徹:問題就在這裡,怎麼樣將查詢資料庫的結果傳遞到這個頁面,在smarty社群有這樣一位兄臺,他是自己寫了一個smarty自定義的函式,用來完成這樣一個自動生成影像的函式,直接在模板頁面呼叫,呼叫的時候當然還有引數之類的。但是方法是有了,他自己提問了1年之後自己有回覆了一下,說自己只是找到自己的DB類出現了個小問題,但還是不能成功我以為麻煩了,經過細心研究,發現我之前用的那個辦法其實就是最好的辦法,將資料通過SESSION傳遞到plotline.php,然後處理即可。
Plotline.php: //資料來自graph_model.php session_start(); $datay=$_SESSION['datay']; $date_original=$_SESSION['date_original']; // print_r($date_original); $type=$_SESSION['type']; $unit=$_SESSION['u']; $node=$_SESSION['node']; $alert=$_SESSION['alert']; //將獲取的資料處理成下面的陣列形式 // $datay=array(23,33,25,40,20,50,70); // Create the graph. $graph = new Graph(980,400,'auto'); $graph->SetScale("textlin"); $graph->SetMargin(50,20,50,70); $graph->SetShadow(); $graph->legend->SetPos(0.5,0.97,'center','bottom');
$graph->title->Set($node.'單站含閾值柱狀圖');//節點名稱 標註 // $graph->title->SetFont(FF_ARIAL,FS_BOLD,14); $graph->title->SetFont(FF_FONT1,FS_BOLD); $graph->title->SetFont(FF_SIMSUN,FS_BOLD,12);
$graph->subtitle->SetFont(FF_SIMSUN,FS_BOLD,10); $graph->subtitle->Set('(橫軸為資料入庫時間,縱軸為資料值)');
//x $graph->xaxis->title->Set("時間軸(入庫時間)"); $graph->xaxis->title->setfont(FF_SIMSUN,FS_BOLD,10); $graph->xaxis->SetFont(FF_SIMSUN,FS_BOLD); // $graph->xaxis->SetLabelAngle(90); //yaxis $graph->yaxis->title->Set($type."/".$unit);//資料型別與資料單位 標註 $graph->yaxis->title->setfont(FF_SIMSUN,FS_BOLD,10); $graph->yaxis->SetFont(FF_SIMSUN,FS_BOLD);
// Create a bar pot $bplot = new BarPlot($datay); $bplot->value->Show(); $bplot->value->SetFont(FF_VERDANA,FS_BOLD,8); $bplot->SetValuePos('top'); $bplot->SetLegend("節點".$type."實值");
$graph->Add($bplot); //閾值部分設定 $pline = new PlotLine(HORIZONTAL,$alert,'red',4);//閾值部分 $pline->SetLegend('閾值');
$graph->legend->SetColumns(10); $graph->legend->SetFont(FF_SIMSUN,FS_BOLD,10);
$graph->Add($pline); $graph->Stroke();
模板頁面:
<?{if !empty($arrData.img)}?> <?{if $smarty.post.graph eq 2}?> <?{elseif $smarty.post.graph eq 1}?> <?{/if}?> <?{html_image file=templates/images/okk.png }?>Generated by Mine Hydrogeology System <?{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}?> <?{/if}?>
我還嘗試過將資料在模板頁面通過GET方式提交到plotlinr.php的方法。但這樣的話因為傳遞的總是一個陣列,所以試過多次之後總是不能成功,也就放棄了,也算是個經驗之談:這樣的資料陣列怎麼能通過GET方式來傳遞呢,PHP最強勢的地方不就是處理資料嗎?還是抓住PHP的核心解決問題最好。
相關文章
- 影像處理技術(二)濾波去噪(上)
- 技術文件:基於 Python 的影像處理系統Python
- 音影片處理技術中的IP組播技術
- openCV中的影像處理 3 影像閾值OpenCV
- 影像處理--影像特效特效
- 影像處理技術:影像切割、標籤、貼紙花字,超細開發詳解
- PHP影像處理繪圖、水印、驗證碼、影像壓縮技術例項總結PHP繪圖
- webgl 影像處理2---影像畫素處理Web
- 影像處理或其他多媒體處理中的值溢位處理
- Python影像處理丨5種影像處理特效Python特效
- 影像預處理
- 影片美顏SDK動態處理技術與靜態處理技術
- Python 影像處理 OpenCV (6):影像的閾值處理PythonOpenCV
- Python 影像處理 OpenCV (7):影像平滑(濾波)處理PythonOpenCV
- 預處理技術文獻
- 隨機化處理技術隨機
- 數字影像處理學習筆記(1)——傅立葉變換在影像處理中的應用筆記
- 前端影像處理指南前端
- 影像處理_切邊
- 影像預處理方法
- 影像輪廓處理
- 紅外影像處理
- 影像處理案例03
- OpenCV(影像NaN處理)OpenCVNaN
- 深度學習浪潮中的自然語言處理技術深度學習自然語言處理
- 文字預處理技術詳解
- 醫學影像處理中的資料讀寫
- 醫學影像處理系統原始碼-虛擬內窺鏡、三維重建技術原始碼
- 影像行畫素處理
- 遙感影像處理流程
- 影像處理之骨架提取
- 形態學影像處理
- 【scipy 基礎】--影像處理
- PhalApi-Image–影像處理API
- 影像識別技術
- Python 影像處理 OpenCV (3):影像屬性、影像感興趣 ROI 區域及通道處理PythonOpenCV
- 文書處理技術:WORD也在不斷變化中
- Python 影像處理 OpenCV (15):影像輪廓PythonOpenCV