J2EE搭建WAP站點時圖片發佈統一格式處理解決方案

在WML中,由於支持的瀏覽器不同,對於圖片格式也有不同的限制。比如常見的M3Gate,目前主要支持的是PNG格式,有的瀏覽器支持的是JPG的格式。但是如果圖片不是自己加工的,比如是通過網頁採集工具採集過來的圖片格式各不相同,這樣就需要在發佈的時候進行統一的格式處理。
在這裏,由於個人一直從事的是J2EE的研發,所以在發佈圖片的時候都是採用Servlet來發布的圖片,爲了解決WAP中遇到的這個挑戰,做了一些比較深入的研究。下面是整理後的解決方案(已經實現),來完成圖片發佈時統一圖片格式。

Solutions:
在J2EE的Web應用中,常見的規範是Servlet規範,由於目前主流的應用服務器都支持Servlet2.3規範,所以本方案的基本就是Servlet2.3規範,利用Servlet2.3中的Filter特性來過濾圖片內容,整合圖片格式。下面是具體的解決方案(假設用來發布圖片的Servlet是getImage):

在getImage前面配置前置的Filter,在客戶端訪問圖片的時候,攔截客戶端的請求,生成一個新的ServletResponse對象傳遞給getImage。
提供後置的Filter(ImagePostFilter)
在getImage上面配置後置的Filter,攔截getImage的返回結果,同時根據getImage的返回結果,將圖片轉換成統一的格式返回給客戶端。
外部實現HttpServletResponse類(ImageHttpServletResponse)
保存Web Container的HttpServletResponse以及getImage這個Servlet輸出到response對象中的信息,如cookie,Header,ContentType等。
外部實現OutputStream類(ImageOutputStream)
在ImageHttpServletResponse類獲取outputstream的時候,返回一個自己定義的ImageOutputStream,ImageOutputStream將getImage這個servlet中輸出的所有二進制數據保存起來(可以使用java.nio.ByteBuffer)
 

下面介紹一些如何利用ImageIO對象來處理圖片格式:

  • 從輸入流中讀取出一個BufferedImage對象:
    ByteArrayInputStream bin = new ByteArrayInputStream(outputstream.getBytes());
    BufferedImage src = ImageIO.read(bin);
  • 利用ImageIO.write方法,將圖片轉換成指定的格式並寫入到指定的流中:
    ImageIO.write(bimage,"png",outs);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章