亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

用JSP創建可重用的圖形背景

2020-07-27 21:49:53
字體:
來源:轉載
供稿:網友
有一個技術可以在Java Server Pages(JSP)中產生整齊、精細的直方圖,它可以用來作為可重用的背景。為了達到可重用性的目的,你需要使得圖形的尺寸可以調整,你還應該管理直方塊以免它們越過圖形區域的邊界。然后,你還需要把圖形數據編碼為一種可用的圖形格式。我們將利用這個代碼例子介紹本技巧。
你需要什么?

為了開始運行本文所給出的例子,你需要JDK 1.2或者它的更高版本(http://java.sun.com)。你還需要一個支持JSP的Web服務器。我在Tomcat上測試該例子,我用com.sun.image.codec.jpeg 類(在Sun Java 2 SDK中發布)進行圖形數據的編碼。

可重用的背景

既然你希望擁有可重用的背景,你應該創建一個Java類來管理布局,包括標題區和外部邊界。如A所示。

圖A



正如你所看到的那樣,我在標題區和外部邊界上都進行了陰影處理。標題有一個白色的、一個象素寬的邊界,圖形區有一個細的黑色邊界。這些邊界增加了陰影的清晰度。

邊界很容易產生。用Graphics2D對象的fill()方法來填充一個藍色的標題矩形,然后用draw()方法用其它顏色畫出邊界。

產生陰影效果也很簡單。首先,用fill()方法畫出一個陰影。然后,在偏移七個象素的地方畫出標題。這個偏移產生了三維的效果,這樣就得到了陰影效果。

舉一個例子

假設有一家公司銷售農產品,它需要一個直方圖來顯示銷售額。在實際應用場合下,我們需要從一個數據庫或者XML文件中獲取這些數據,但是為了簡單起見,我們假設銷售額數據保存在下面的兩個數組中:
String datanames[] = {"蘋果", "桔子", "桃子", "檸檬", "柚子"};
int datavalues[] = {11, 62, 33, 102, 50};


第一個數組保存該公司出售的各種農產品的項目。第二個數組為對應各農產品的銷售額。

準備好直方圖

直方圖將以JPEG格式顯示和保存,所以我們需要正確設置MIME,即內容類型。瀏覽器利用MIME類型來決定如何做出反應。下面的代碼用以設置MIME類型:
response.setContentType("image/jpeg");

接下來,我們需要一個表示該圖像的對象。Java 2D API支持BufferedImage類,它提供了一種在內存中保存和管理象素數據的方法。我們希望圖形是彩色的,所以使用了TYPE_INT_RGB圖形類型。WIDTHHEIGHT這兩個整形數據用來以象素為單位指定該圖像的寬度和高度:
BufferedImage bi = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);

現在我們有個一個BufferedImage對象,我們可以通過調用該對象的createGraphics()方法來設置Graphics2D的內容:
Graphics2D biContext = bi.createGraphics();

寬度、高度和極大值

創建該圖的程序員需要根據該圖形的重要程度和頁面的整體布局來設置WIDTH參數。圖形元素根據圖形寬度的改變自動調整自身的大小。

標題的寬度和邊界區域,以及圖形的最長直方塊需要根據WIDTH參數進行計算。這樣做的目的是為了確保所有的圖形元素都沒有超過圖形的寬度而越過圖形的右邊界。

需要顯示的數據條目數決定了圖形的HEIGHT參數。如果有新的元素添加到datavalues[]datanames[]數組,那么圖形的高度就應該對應增長以適應所需顯示的區域大小。

maximum參數用于最長直方塊。然后,其它直方塊的寬度按照相對于maximum的量進行計算:
int barWidth = (innerWIDTH * currentValue) / maximum;

上面的算法用到了maximum和圖形的innerWIDTH(圖形區域)這兩個數值來確保直方塊會隨著WIDTH數值的改變而自動伸縮。

顯示圖形背景

為了顯示該圖形,我們需要創建一個背景圖像,然后添加圖形數據。首先,創建一個graphBG對象并調用它的draw()方法:
graphBG gr = new graphBG();
gr.draw(biContext, WIDTH, HEIGHT, "Farm Produce", "Overall Average: " + average);

draw()方法的參數包括圖形內容、biContext、WIDTHHEIGHT,graphBG類利用它們來決定標題和圖形區域的寬度和高度。最后,計算average數據值并添加到標題中顯示的文本中。

 

創建直方塊

每個直方塊的縱坐標(y軸)位置按照如下公式計算:y_pos = i * displayHeight + headerOffset。其中displayHeight等于直方塊上文本的高度加上直方塊的高度,headerOffset表示從圖形頂端開始的垂直距離,包括標題區域以及陰影的高度。

我用了前面創建標題邊界的技術創建了這些直方塊以及它們的邊界。我把直方塊邊界的寬度和高度分別減去一個象素,這樣每個直方塊看起來都有一個紅色的邊界,并通過在白色背景上畫上內邊界使得減切效果的產生變得簡單起來。

編碼

我們已經在內存中建立好了這幅圖片,現在我們對它進行編碼并把它顯示給用戶。我們不能用默認得JSP輸出流來處理JPEG,所以我們需要利用response.getOutputStream()從響應對象中獲取流。我們可以用輸出流來創建一個JPEGImageEncoder對象并調用它的encode(),傳遞我們在前面創建的BufferedImage對象:
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);
encoder.encode(bi);


產生的圖象相對較小,只占用了13.7千字節的容量。B給出了最終的效果:

圖B



無論從那個方面來說,index.jsp的輸出都是一個JPEG圖像。你可以把它保存到你的桌面上或者按PrintScreen鍵來抓圖。如果你需要在同一頁上顯示多幅圖形或者把圖形引入到其它內容中,你可以使用HTML的img標記(<img src = ”index.jsp”>),然后,當需要時放置該圖,如利用一個表格。

也許最老的用于動態產生圖形的Internet技術之一可以實現處了顯示一個圖像之外的其它任務。設想你需要記錄這副圖的瀏覽人數(類似記錄廣告點擊次數的情況),那么你需要在index.jsp中實現諸如點擊計數、數據庫或者文件訪問之類的任務,你可以在后臺處理這些任務而不需要利用緩沖頁面切換給用戶。

結論

我們在本文之中檢驗了一種產生整齊、看上去很舒服的直方圖。我們巧妙的處理了圖形尺寸的改變以及編碼為JPEG格式,并且討論了通過修改HTML代碼的方式把最終產生的圖片放置在頁面的不同位置上。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人性教育视频在线观看| 欧美三级欧美成人高清www| 亚洲免费高清视频| 日韩av电影手机在线观看| 亚洲国产精品成人av| 7m第一福利500精品视频| 久久精品美女视频网站| 亚洲欧美另类中文字幕| 欧美日韩在线一区| 亚洲黄页视频免费观看| 成人福利在线观看| 欧美综合在线第二页| 亚洲无av在线中文字幕| 在线看国产精品| 91免费看片在线| 国产精品久久久久99| 国产精品女主播| 国产91精品最新在线播放| 日韩一区二区久久久| 91久久久久久久久久久久久| 国产一区二区三区视频免费| 色多多国产成人永久免费网站| 欧美国产第二页| 精品毛片网大全| 热久久视久久精品18亚洲精品| 精品亚洲va在线va天堂资源站| 久久亚洲精品中文字幕冲田杏梨| 国产又爽又黄的激情精品视频| 91九色视频在线| 国产男女猛烈无遮挡91| 日韩精品中文在线观看| 亚洲最大福利视频网站| 日韩在线观看精品| 精品国偷自产在线视频99| 欧美性69xxxx肥| 日韩精品在线免费| 国产精品爽黄69天堂a| 亚洲天堂男人天堂| 欧美精品午夜视频| 最近中文字幕日韩精品| 国产亚洲精品久久久久久777| 欧美丰满片xxx777| 日韩免费黄色av| 色综合天天狠天天透天天伊人| 欧美日韩国产一区二区三区| 最近的2019中文字幕免费一页| 欧美激情一级二级| 国内免费久久久久久久久久久| 欧美性视频网站| 日韩精品在线电影| 国产一区二区精品丝袜| 亚洲欧洲一区二区三区在线观看| 国产精品视频午夜| 色悠悠久久88| 性欧美在线看片a免费观看| 日韩精品在线视频观看| 国产精品美女呻吟| 亚洲欧美中文日韩在线v日本| 亚洲国产日韩欧美在线图片| 久久国内精品一国内精品| 日日噜噜噜夜夜爽亚洲精品| 最新中文字幕亚洲| 黑人巨大精品欧美一区二区| 欧美另类第一页| 97婷婷大伊香蕉精品视频| 亚洲欧洲成视频免费观看| 日韩在线视频中文字幕| 欧美精品久久久久久久| 成人性生交大片免费观看嘿嘿视频| 亚洲人成在线播放| 国产精品激情av在线播放| 日韩女优人人人人射在线视频| 亚洲aaa激情| 亚洲人成在线播放| 夜色77av精品影院| 国产精品福利在线观看| 欧美激情视频免费观看| 日韩精品免费观看| 国产精品美女网站| 最近2019好看的中文字幕免费| 国产成人avxxxxx在线看| 国产一区二区丝袜高跟鞋图片| 亚洲免费伊人电影在线观看av| 九九九热精品免费视频观看网站| 国产精品视频男人的天堂| 91亚洲人电影| 亚洲欧美日韩中文视频| 亚洲国产成人精品一区二区| 国产狼人综合免费视频| 国产成+人+综合+亚洲欧美丁香花| 欧美精品18videosex性欧美| 精品福利一区二区| 亚洲人成77777在线观看网| 日韩网站免费观看高清| 国产成人精品久久二区二区91| 亚洲色图50p| 狠狠躁夜夜躁人人爽超碰91| 亚洲欧美一区二区三区情侣bbw| 91免费版网站入口| 亚洲精品免费av| 亚洲www在线观看| 疯狂蹂躏欧美一区二区精品| 欧美日韩国产专区| 国产色视频一区| 最新69国产成人精品视频免费| 久久天天躁狠狠躁老女人| 亚洲奶大毛多的老太婆| 精品亚洲男同gayvideo网站| 尤物精品国产第一福利三区| 91香蕉亚洲精品| 在线免费观看羞羞视频一区二区| 中文字幕国产日韩| 亚洲第一页自拍| 日韩电影中文字幕在线观看| 日本成人精品在线| 深夜精品寂寞黄网站在线观看| 欧美日韩国产色| 国产欧美亚洲视频| 国产精品久久久久国产a级| 久久精视频免费在线久久完整在线看| 九色成人免费视频| 亚洲a中文字幕| www.久久撸.com| 成人免费在线视频网址| 91国内精品久久| 91热精品视频| 中文字幕日韩在线播放| 日本成人在线视频网址| 欧美性猛交xxxx免费看久久久| 欧美激情第6页| 亚洲国产另类久久精品| 亚洲成色999久久网站| 日韩欧美精品免费在线| 日韩在线视频一区| 国产精品第1页| 永久555www成人免费| 国产精品中文字幕在线| 日韩成人在线播放| 色综合色综合久久综合频道88| 欧美激情视频一区二区| 精品免费在线观看| 久久国产精品影视| 成人免费xxxxx在线观看| 日韩免费中文字幕| 亚洲电影成人av99爱色| 欧洲日本亚洲国产区| 国产亚洲免费的视频看| 国产精品96久久久久久| 欧美日韩美女在线观看| 久久久噜噜噜久噜久久| 日韩成人激情在线| 美日韩精品免费观看视频| 亚洲国产私拍精品国模在线观看| 国产一区二区三区丝袜| 亚洲精品网址在线观看| 国产手机视频精品| 亚洲成av人乱码色午夜| 人人爽久久涩噜噜噜网站| 国产最新精品视频| 色综合色综合久久综合频道88| 欧美又大粗又爽又黄大片视频| 成人国产亚洲精品a区天堂华泰| 国产黑人绿帽在线第一区| 国产欧美亚洲精品|