前幾天看了lwz7512的 《
基于servlet導(dǎo)出Flex/Flash界面為圖形文件的簡(jiǎn)單方法
》,今天有時(shí)間就實(shí)踐了一下。
1 .使用BitmapData將flex的某個(gè)UIComponent轉(zhuǎn)換為ByteArray
2 .使用JPGEncoder轉(zhuǎn)換ByteArray。JPGEncoder是corelib( http://code.google.com/p/as3corelib/ ) 的組件。我直接導(dǎo)入corelib.swc卻報(bào)錯(cuò),幸好有源代碼可以直接使用。
3 .使用URLRequest發(fā)送ByteArray到服務(wù)端的java servlet
4 .在servlet中使用ImageIO保存圖片或者輸出到response
下面是具體代碼
這里使用了一個(gè)Bar Chart圖表進(jìn)行實(shí)驗(yàn),URLRequest的myImage是我的java servlet
printImage將圖形輸出到response,將會(huì)在web瀏覽器中看到圖片。或者你可以使用saveImage保存圖片到服務(wù)器。
1 .使用BitmapData將flex的某個(gè)UIComponent轉(zhuǎn)換為ByteArray
2 .使用JPGEncoder轉(zhuǎn)換ByteArray。JPGEncoder是corelib( http://code.google.com/p/as3corelib/ ) 的組件。我直接導(dǎo)入corelib.swc卻報(bào)錯(cuò),幸好有源代碼可以直接使用。
3 .使用URLRequest發(fā)送ByteArray到服務(wù)端的java servlet
4 .在servlet中使用ImageIO保存圖片或者輸出到response
下面是具體代碼
actionscript 代碼
- < mx:Application ???
- ???? xmlns:mx = "http://www.adobe.com/2006/mxml" ???
- ???? layout = "absolute" > ??
- ??
- ???? < mx:Script > ??
- ????????[CDATA[??
- ????????????import?mx.controls.Alert;??
- ????????????import?mx.core.UIComponent;??
- ????????????import?mx.collections.ArrayCollection;??
- ????????????import?com.adobe.images.JPGEncoder;??
- ??????????????
- ????????????[Bindable]??
- ????????????public?var? expenses:ArrayCollection ?=? new ?ArrayCollection(??
- ????????????????[??
- ????????????????????{Month:"Jan",?Profit:2000,?Expenses:1500},??
- ????????????????????{Month:"Feb",?Profit:1000,?Expenses:200},??
- ????????????????????{Month:"Mar",?Profit:1500,?Expenses:500}??
- ????????????????]??
- ????????????);??
- ??????????????
- ????????????public?function?getJPGByteArray(target:UIComponent):ByteArray?{??
- ????????????????var?bitmapData?:? BitmapData ?=? new ?BitmapData(target.width,?target.height);??
- ????????????????bitmapData.draw(target);???
- ??????????????????
- ????????????????var?jpg?:? JPGEncoder ?=? new ?JPGEncoder();??
- ????????????????var?jpgByteArray?:? ByteArray ?=? jpg .encode(bitmapData);??
- ????????????????return?jpgByteArray;??
- ????????????}??
- ??????????????
- ????????????public?function?sendImageByte(target:UIComponent):void?{??
- ????????????????var? request:URLRequest ?=? new ?URLRequest("myImage");??
- ???????????????? request.contentType ?=? 'applicatoin/octet-stream' ;??
- ???????????????? request.data ?=? getJPGByteArray (target);??
- ???????????????? request.method ?=? URLRequestMethod .POST;??
- ????????????????navigateToURL(request,?"_blank");??
- ????????????}??
- ????????]]??
- ???? </ mx:Script > ??
- ??
- ???? < mx:Panel ? id = "chartPanel" ? title = "Bar?Chart" ? width = "300" ? height = "400" > ??
- ????? < mx:BarChart ? id = "myChart" ? dataProvider = "{expenses}" ? width = "100%" ? height = "100%" > ??
- ???????? < mx:verticalAxis > ??
- ??????????? < mx:CategoryAxis ???
- ???????????????? dataProvider = "{expenses}" ???
- ???????????????? categoryField = "Month" ??
- ??????????? /> ??
- ???????? </ mx:verticalAxis > ??
- ???????? < mx:series > ??
- ??????????? < mx:BarSeries ???
- ???????????????? yField = "Month" ???
- ???????????????? xField = "Profit" ???
- ???????????????? displayName = "Profit" ??
- ??????????? /> ??
- ??????????? < mx:BarSeries ???
- ???????????????? yField = "Month" ???
- ???????????????? xField = "Expenses" ???
- ???????????????? displayName = "Expenses" ??
- ??????????? /> ??
- ???????? </ mx:series > ??
- ????? </ mx:BarChart > ??
- ????? < mx:Legend ? dataProvider = "{myChart}" /> ??
- ????? < mx:Button ? label = "Get?Chart?Image" ? click = "sendImageByte(myChart)" /> ??
- ????? < mx:Button ? label = "Get?Panel?Image" ? click = "sendImageByte(chartPanel)" /> ??
- ???? </ mx:Panel > ??
- ??????
- </ mx:Application > ??
這里使用了一個(gè)Bar Chart圖表進(jìn)行實(shí)驗(yàn),URLRequest的myImage是我的java servlet
java 代碼
- import ?java.awt.image.BufferedImage;??
- import ?javax.imageio.ImageIO;??
- import ?org.apache.commons.io.IOUtils;??
- ??
- public ? class ?ImageServlet? extends ?HttpServlet?{??
- ??????
- ???? @Override ??
- ???? protected ? void ?doGet(HttpServletRequest?arg0,?HttpServletResponse?arg1)? throws ?ServletException,?IOException?{??
- ????????doService(arg0,?arg1);??
- ????}??
- ??
- ???? @Override ??
- ???? protected ? void ?doPost(HttpServletRequest?arg0,?HttpServletResponse?arg1)? throws ?ServletException,?IOException?{??
- ????????doService(arg0,?arg1);??
- ????}??
- ??
- ???? private ? void ?doService(HttpServletRequest?request,?HttpServletResponse?response)? throws ?IOException?{??
- ???????? //saveImage(request,?response); ??
- ????????printImage(request,?response);??
- ????}??
- ??????
- ???? private ? void ?saveImage(HttpServletRequest?request,?HttpServletResponse?response)? throws ?IOException??{??
- ????????String?fileName?=? "D://" ?+?System.currentTimeMillis()?+? ".jpg" ;??
- ????????BufferedImage?bufferedImage?=?ImageIO.read(request.getInputStream());??
- ???????? if ?(bufferedImage?!=? null )?{??
- ????????????ImageIO.write(bufferedImage,? "jpeg" ,? new ?File(fileName));??
- ????????}??
- ????}??
- ??????
- ???? private ? void ?printImage(HttpServletRequest?request,?HttpServletResponse?response)? throws ?IOException??{??
- ????????response.setContentType( "image/jpeg" );??
- ????????response.setHeader( "Content-Length:" ,?String.valueOf(request.getInputStream().available()));??
- ??????????
- ????????ServletOutputStream?sos?=?response.getOutputStream();??
- ????????IOUtils.copy(request.getInputStream(),?sos);??
- ????????sos.flush();??
- ????????sos.close();??
- ????}??
- }??
printImage將圖形輸出到response,將會(huì)在web瀏覽器中看到圖片。或者你可以使用saveImage保存圖片到服務(wù)器。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
