使用base64 对图像进行 转换的小程序。附上对视频进行截图的功能程序。

java端,对jpeg图像转码成 base64字串

  1. /*
  2. * Created on 2008-9-25
  3. *
  4. * 徐泽宇 roamer
  5. */
  6. package tester;
  7. import java.io.FileInputStream;
  8. import java.io.FileOutputStream;
  9. import java.io.IOException;
  10. import java.io.InputStream;
  11. import java.io.OutputStream;
  12. import sun.misc.BASE64Decoder;
  13. import sun.misc.BASE64Encoder;
  14. public class Image2Base64
  15. {
  16. public static void main(String[] args)
  17. {
  18. String strImg = GetImageStr();
  19. GenerateImage(strImg);
  20. }
  21. public static String GetImageStr()
  22. {//将图片文件转化为字节数组字符串,并对其进行Base64编码处理
  23. String imgFile = "d://1.jpg";//待处理的图片
  24. InputStream in = null;
  25. byte[] data = null;
  26. //读取图片字节数组
  27. try
  28. {
  29. in = new FileInputStream(imgFile);
  30. data = new byte[in.available()];
  31. in.read(data);
  32. in.close();
  33. }
  34. catch (IOException e)
  35. {
  36. e.printStackTrace();
  37. }
  38. //对字节数组Base64编码
  39. BASE64Encoder encoder = new BASE64Encoder();
  40. System.out.print(encoder.encode(data));
  41. return encoder.encode(data);//返回Base64编码过的字节数组字符串
  42. }
  43. public static boolean GenerateImage(String imgStr)
  44. {//对字节数组字符串进行Base64解码并生成图片
  45. if (imgStr == null) //图像数据为空
  46. return false;
  47. BASE64Decoder decoder = new BASE64Decoder();
  48. try
  49. {
  50. //Base64解码
  51. byte[] b = decoder.decodeBuffer(imgStr);
  52. for(int i=0;i<b.length;++i)
  53. {
  54. if(b[i]<0)
  55. {//调整异常数据
  56. b[i]+=256;
  57. }
  58. }
  59. //生成jpeg图片
  60. String imgFilePath = "d://2.jpg";//新生成的图片
  61. OutputStream out = new FileOutputStream(imgFilePath);
  62. out.write(b);
  63. out.flush();
  64. out.close();
  65. return true;
  66. }
  67. catch (Exception e)
  68. {
  69. return false;
  70. }
  71. }
  72. }

flex 这端对base64编码 转换成图片

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
  3. layout="vertical"
  4. verticalAlign="middle"
  5. backgroundColor="white"
  6. creationComplete="init();">
  7. <mx:Script>
  8. <![CDATA[
  9. import mx.utils.Base64Decoder;
  10. private var base64Dec:Base64Decoder;
  11. private function decode():void{
  12. }
  13. private function load():void{
  14. mx.controls.Alert.show(this.textArea.text);
  15. var byteArr:ByteArray;
  16. base64Dec = new Base64Decoder();
  17. base64Dec.decode(this.textArea.text);
  18. byteArr = base64Dec.toByteArray();
  19. img.load(byteArr);
  20. }
  21. private function init():void {
  22. }
  23. ]]>
  24. </mx:Script>
  25. <mx:Form width="100%" height="100%">
  26. <mx:FormItem label="image:">
  27. <mx:Image />
  28. </mx:FormItem>
  29. <mx:FormItem label="source:"
  30. width="100%"
  31. height="100%">
  32. <mx:TextArea
  33. text=""
  34. editable="true"
  35. width="100%"
  36. height="100%" />
  37. </mx:FormItem>
  38. </mx:Form>
  39. <mx:Button label="显示" click="load()">
  40. </mx:Button>
  41. </mx:Application>
对视频进行截图。然后生成base64字符串传递给RO的小程序。
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="388" height="454" creationComplete="initApp()">
  3. <mx:Style>
  4. Alert{font-size:12px;}
  5. </mx:Style>
  6. <mx:Script>
  7. <![CDATA[
  8. import mx.events.CloseEvent;
  9. import mx.rpc.events.FaultEvent;
  10. import mx.rpc.events.ResultEvent;
  11. import mx.controls.Alert;
  12. import mx.rpc.remoting.RemoteObject;
  13. import mx.graphics.ImageSnapshot;
  14. private static const DEFAULT_CAMERA_WIDTH:Number = 160; //摄像头显示宽度
  15. private static const DEFAULT_CAMERA_HEIGHT:Number = 120; //摄像头显示高度
  16. private static const DEFAULT_WEBSERVICE_URL:String = "http://localhost:1888/Web/TestWebService.asmx?WSDL"; //WebService地址
  17. private var m_camera:Camera; //定义一个摄像头
  18. private var m_localVideo:Video; //定义一个本地视频
  19. private var m_pictureBitmapData:BitmapData //定义视频截图
  20. [Bindable]
  21. private var m_pictureData:String;
  22. [Bindable]
  23. private var base64String:String="";
  24. private function initApp():void
  25. {
  26. t_btn_Shooting.enabled = false;
  27. t_ban_Save.enabled = false;
  28. initCamera();
  29. }
  30. //初始化摄像头
  31. private function initCamera():void
  32. {
  33. m_camera = Camera.getCamera();
  34. if(m_camera != null)
  35. {
  36. m_camera.addEventListener(StatusEvent.STATUS,__onCameraStatusHandler);
  37. m_camera.setMode(DEFAULT_CAMERA_WIDTH,DEFAULT_CAMERA_HEIGHT,30);
  38. m_localVideo = new Video();
  39. m_localVideo.width = DEFAULT_CAMERA_WIDTH;
  40. m_localVideo.height = DEFAULT_CAMERA_HEIGHT;
  41. m_localVideo.attachCamera(m_camera);
  42. t_vd_Video.addChild(m_localVideo);
  43. }
  44. else
  45. {
  46. Alert.show("没有找到摄像头,是否重新查找。","提示:",Alert.OK|Alert.NO,this,__InitCamera);
  47. return;
  48. }
  49. }
  50. //拍照按钮事件,进行视频截图
  51. private function SnapshotPicture():void
  52. {
  53. m_pictureBitmapData = new BitmapData(DEFAULT_CAMERA_WIDTH,DEFAULT_CAMERA_HEIGHT);
  54. m_pictureBitmapData.draw(t_vd_Video,new Matrix());
  55. var m_pictureBitmap:Bitmap = new Bitmap(m_pictureBitmapData);
  56. t_img_Picture.addChild(m_pictureBitmap);
  57. t_panel_Picture.visible = true;
  58. t_ban_Save.enabled = true;
  59. }
  60. //保存按钮事件,保存视频截图
  61. //通过RO保存
  62. private function SavePicture():void
  63. {
  64. var ohSnap:ImageSnapshot = ImageSnapshot.captureImage(this.t_img_Picture);
  65. this.base64String= ImageSnapshot.encodeImageAsBase64(ohSnap);
  66. this.picString.text =base64String;
  67. var ro:RemoteObject = new RemoteObject("cameraServiceRO");
  68. ro.addEventListener(FaultEvent.FAULT,__onSavePictureFault);
  69. ro.addEventListener(ResultEvent.RESULT,__onSavePictureResult);
  70. ro.save(this.base64String);
  71. }
  72. //检测摄像头权限事件
  73. private function __onCameraStatusHandler(event:StatusEvent):void
  74. {
  75. if(!m_camera.muted)
  76. {
  77. t_btn_Shooting.enabled = true;
  78. }
  79. else
  80. {
  81. Alert.show("无法链接到活动摄像头,是否重新检测。","提示:",Alert.OK|Alert.NO,this,__InitCamera);
  82. }
  83. m_camera.removeEventListener(StatusEvent.STATUS,__onCameraStatusHandler);
  84. }
  85. //当摄像头不存在,或连接不正常时重新获取
  86. private function __InitCamera(event:CloseEvent):void
  87. {
  88. if(event.detail == Alert.OK)
  89. {
  90. initApp();
  91. }
  92. }
  93. //WebService保存图片成功事件
  94. private function __onSavePictureResult(event:ResultEvent):void
  95. {
  96. Alert.show("ok");
  97. }
  98. //连接WebService失败事件
  99. private function __onSavePictureFault(event:FaultEvent):void
  100. {
  101. //Alert.show(event.fault.toString(),"提示",Alert.OK);
  102. Alert.show(event.fault.toString());
  103. }
  104. //保存图片成功后的弹出窗口确认事件
  105. private function __onAlertCloseHandler(event:CloseEvent):void
  106. {
  107. if(event.detail == Alert.OK)
  108. {
  109. //trace("转向页面");
  110. }
  111. }
  112. ]]>
  113. </mx:Script>
  114. <mx:Panel x="10" y="10" width="180" height="200" layout="absolute" title="视频拍照" fontSize="12">
  115. <mx:VideoDisplay width="160" height="120"/>
  116. <mx:ControlBar horizontalAlign="right">
  117. <mx:Button label="拍照" click="SnapshotPicture()"/>
  118. </mx:ControlBar>
  119. </mx:Panel>
  120. <mx:Panel x="198" y="10" width="180" height="200" layout="absolute" title="拍照图片" fontSize="12" visible="false">
  121. <mx:Image x="0" y="0" width="160" height="120"/>
  122. <mx:ControlBar horizontalAlign="right">
  123. <mx:Button label="保存" click="SavePicture()" />
  124. </mx:ControlBar>
  125. </mx:Panel>
  126. <mx:TextArea text="{base64String}" x="10" y="218" width="368" height="226"/>
  127. </mx:Application>