Flex 加载 wmf,svg

最近做gis系统发现要在flex加载wmf图片。我记得flash的loader只能是png,gis,jpg。wmf格式居然是window出的,flash居然不支持我也是醉了,没办法,只能后台转格式,首先wmf是矢量的格式,我先想到的是svg。刚好java的batick包可以支持wmf

转svg。 代码如下

 1 /**
 2      * 将wmf转换为svg
 3      *
 4      * @param src
 5      * @param dest
 6      */
 7     public  String wmfToSvg(InputStream insrc) {
 8         boolean compatible = false;
 9         //String resultString="";
10         try {
11             //InputStream in = new FileInputStream(src);
12             WmfParser parser = new WmfParser();
13             final SvgGdi gdi = new SvgGdi(compatible);
14             parser.parse(insrc, gdi);
15             org.w3c.dom.Document doc = gdi.getDocument();
16             StringWriter strwite=new StringWriter();
17
18             output(doc, strwite);
19             return strwite.getBuffer().toString();
20             // return resultString;
21              //getBuffer().toString();
22         } catch (Exception e) {
23             return e.getMessage();
24         }
25     }
26
27     private  void output(org.w3c.dom.Document doc, StringWriter out) throws Exception {
28         TransformerFactory factory = TransformerFactory.newInstance();
29         Transformer transformer = factory.newTransformer();
30         transformer.setOutputProperty(OutputKeys.METHOD, "xml");
31         transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
32         transformer.setOutputProperty(OutputKeys.INDENT, "yes");
33         transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC,
34                 "-//W3C//DTD SVG 1.0//EN");
35         transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,
36                 "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd");
37         transformer.transform(new javax.xml.transform.dom.DOMSource(doc), new StreamResult(out));
38         out.flush();
39         out.close();
40     }

Flex的svg包其实很多地方都有,as3svgrendererlib-master用的比较多,github上可以搜的到。我测试了网上的wmf都可以没啥问题,但是系统wmf是楼房基底图,导出来图片中某些字会叠加到一个角落里面,我去这怎么回事,搞了大半天也没发现什么问题

只能是先用png,wmf格式难道种类好多?之前flex 加载tiff的时候就发现tiff格式太多 作罢。

这是改为png的流输出

 1 BASE64Encoder encode=new BASE64Encoder();
 2 byte[] WMF= houserow.getBlob("WMF");
 3                     if(WMF!=null&&WMF.length>0)
 4                     {
 5                         String contentString =bytetoString(WMF);
 6                         InputStream wmfStream=new StringBufferInputStream(contentString);
 7                         String svgstr=wmfToSvg(wmfStream);
 8                         ByteArrayOutputStream strwite=new ByteArrayOutputStream();
 9                         convertToPng(svgstr,strwite);
10                         byte[]lens=strwite.toByteArray();
11                         String WMF_pic="";
12                         if(svgstr != null&&!svgstr.equals(""))
13                         {
14                             WMF_pic=encode.encode(lens);
15                         }
16                         createKeyPairXML(ke12,"WMF","户型图",WMF_pic,"");
17
18                     }
19
20
21
22     /**
23      * 将svgCode转换成png文件,直接输出到流中
24      *
25      * @param svgCode svg代码
26      * @param outputStream 输出流
27      * @throws TranscoderException 异常
28      * @throws IOException io异常
29      */
30     public  void convertToPng(String svgCode, OutputStream outputStream)
31             throws TranscoderException, IOException {
32         try {
33             byte[] bytes = svgCode.getBytes("ISO-8859-1");
34             PNGTranscoder t = new PNGTranscoder();
35
36             TranscoderInput input = new TranscoderInput(new ByteArrayInputStream(bytes));
37             TranscoderOutput output = new TranscoderOutput(outputStream);
38             t.transcode(input, output);
39             outputStream.flush();
40         } finally {
41             if (outputStream != null) {
42                 try {
43                     outputStream.close();
44                 } catch (IOException e) {
45                     e.printStackTrace();
46                 }
47             }
48         }
49     }
50
51
52     public static String bytetoString(byte[] in)throws Exception{
53         InputStream is =byteTOInputStream(in);
54         return InputStreamTOString(is);
55     }
56     public static InputStream byteTOInputStream(byte[] in)throws Exception{
57
58         ByteArrayInputStream is =new ByteArrayInputStream(in);
59         return is;
60
61     }
62     public static String InputStreamTOString(InputStream in)throws Exception{
63         ByteArrayOutputStream outstream=new ByteArrayOutputStream();
64         byte[] data = new byte[in.available()];
65         int count=in.read(data,0,data.length);
66         if((count !=-1))
67         {
68             outstream.write(data, 0, count);
69         }
70         data = null;
71         String test =new String(outstream.toByteArray(),"ISO-8859-1");
72         System.out.println(test);
73         return test;
74     }
75     public static byte[] Stringtobyte(String in)throws Exception{
76         InputStream is =StringToInputStream(in);
77         return InputStreamToByte(is);
78     }
79     public static InputStream StringToInputStream(String in)throws Exception{
80         ByteArrayInputStream is =new ByteArrayInputStream(in.getBytes("ISO-8859-1"));
81         return is;
82     }
83     public static byte[] InputStreamToByte(InputStream in)throws Exception{
84         ByteArrayOutputStream outstream=new ByteArrayOutputStream();
85         byte[] data=new byte[size];
86         int count =-1;
87         while((count = in.read(data,0,size))!=-1)
88         {
89             outstream.write(data, 0, count);
90         }
91         data = null;
92         byte[] tt=outstream.toByteArray();
93         File file=new File("");
94         FileImageOutputStream pic_out= new FileImageOutputStream(file);
95         BufferedImage img=new BufferedImage(105,80,BufferedImage.TYPE_3BYTE_BGR);
96         ImageIO.write(img, "jpg", outstream);
97         return outstream.toByteArray();
98
99     }

之后会补一篇加载tiff和dwg的文章,这些格式都是gis系统经常用到的,虽然拿FME来处理也不错,那玩意正版要几十万,还是算了。

时间: 2024-12-28 16:22:11

Flex 加载 wmf,svg的相关文章

Flex 加载dxf

因为已经写过加载dwg了,dxf应该不陌生,dxf是个开源格式,所以加载比较简单这里直接附上as的代码,但是真正使用场景还是比较少,dwg文件比较多 1 package widgetscadastre.SZ_ImportCAD 2 { 3 /** 4 * ... 5 * @author haibalai 6 */ 7 import com.esri.ags.Graphic; 8 import com.esri.ags.geometry.Extent; 9 import com.esri.ags.

flex加载元件的几种方式

1.直接在flash中,给元件设置属性,绑定类: 1. _loader = new Loader(); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeDataHandler); _loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress); _loader.contentLoaderInfo.addEventLi

flex 加载arcgis 的地图json

var fs:FeatureSet=FeatureSet.fromJSON(JSONUtil.decode(e.result.toString())); for each(var gra:Graphic in fs.features) { var g:Graphic=new Graphic(gra.geometry,fillsym); graL.add(g); }

flex 与 加载的swf传参,获取文档类

public function setPicData(parmProductNameId:int):void{ trace("swf里面的方法setFlipBookData被调用,接收的参数图片数组::" + parmProductNameId); productNameId = parmProductNameId; return; }// end function 1.swf 的文档类里面,写好flex 调用的接口方法: 2. flex加载swf 文件. 获取到swf的文档类,直接调

IIS无法加载字体文件(*.woff,*.svg)的解决办法

在编写前端代码的过程中经常会遇到使用特定的字体(*.woff,*.svg),此时在加载字体时请求会被返回 Failed to load resource: the server responded with a status of 404 (Not Found). 原因是,默认在IIS上是没有添加对*.woff,*.svg文件的Mime类型,因此在客户端请求此类文件时得到的都是404. 所以我们只需要在我们对应网站下的Mime类型中添加文件对应的类型就行了 .woff  application/

ArcGIS Flex API加载大量数据

1.关于大量数据的加载: 直接将所要展示的数据在服务器端发布成一个MapService,在客户端通过ArcGISDynamicMapServiceLayer来加载.这样的话客户端需要展示的仅仅是一张图片,没有任何压力.功能上,如果想查询的话可以使用Identify/Find/Query Task来达到目的. 参考:http://blog.newnaw.com/?p=633 2.分页查询参考: http://blog.163.com/[email protected]/blog/static/69

如何使用SVG生成超酷的页面预加载素描动画效果

在线演示 本地下载 1 SVG简介 可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式.它由万维网联盟制定,是一个开放标准. 2 SVG的特点 与其他图像格式相比(比如 JPEG 和 GIF),使用 SVG 的优势在于: SVG 图像可通过文本编辑器来创建和修改 SVG 图像可被搜索.索引.脚本化或压缩 SVG 是可伸缩的 SVG 图像可在任何的分辨率下被高质量地打印 SVG 可在图像质量不下降的情况下被放大 3 浏览器支持 Internet Exp

flex 实现图片播放 方案二 把临时3张图片预加载放入内存

该方案,是预加载:前一张,当前,下一张图片,一共3张图片放入内存中.这样对内存的消耗可以非常小,加载之后的图片就释放内存. 下面示例一个是类ImagePlayers,一个是index.mxml package { import flash.display.BitmapData; import flash.display.Loader; import flash.events.Event; import flash.events.TimerEvent; import flash.net.URLRe

12种炫酷html5 svg加载loading动画特效

这是一款使用html5 svg制作的加载loading动画特效插件.该加载loading动画特效共有12种效果,使用img标签直接调用svg文件来生成各种SVG动态图片.关于在页面中使用SVG的方法可以参考这篇文章:<如何在网页中使用SVG>. 所有的现代浏览器都支持SVG(IE8及以下浏览器除外),你可以点的这里查看支持SVG的浏览器. 在线演示:http://www.htmleaf.com/Demo/201501071122.html 下载地址:http://www.htmleaf.com