近期做gis系统一发布现要在flex加载wmf图片,适用于自然图片、颜色丰盛的图片等等

 
近年来做gis系统一发布现要在flex加载wmf图片。笔者记得flash的loader只好是png,gis,jpg。wmf格式居然是window出的,flash居然不协助本身也是醉了,不能,只好后台转格式,首先wmf是矢量的格式,小编先想到的是svg。刚好java的batick包能够支撑wmf

壹般图片格式有:png/jpg/jpeg/gif/tiff/apng/bup/svg

转svg。 代码如下

前边两种都是位图,基本单位是px,每一个点都以有rgb存款和储蓄颜色,所以把图纸放大的时候会看到许多矩齿状的点。

 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     }

png:是一种无损压缩,支持透明格式,适用于部分人造图片、logo图片等等

 
Flex的svg包实在过多地方都有,as3svgrendererlib-master用的比较多,github上得以搜的到。笔者测试了网上的wmf都足以没啥难点,可是系统wmf是大楼基底图,导出来图片中一些字会叠加到贰个角落里面,笔者去那怎么回事,搞了大半天也没发现什么样难题

jpg:是1种有损压缩,不帮助透明格式,适用于自然图片、颜色丰盛的图片等等

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

矢量图:svg

 那是改为png的流输出

可伸缩的图片格式,图片每一遍加大裁减都要再一次总结,所以耗CPU,svg用竹签、代码来讲述图形.

 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     }

svg加载退步1般都以服务器配置出现难题。

 
 之后会补1篇加载tiff和dwg的篇章,这一个格式都以gis系统平常应用的,纵然拿FME来拍卖也不易,那东西正版要几九千0,还是算了。

引用svg的方法:

 

1、object标签

<object  data=”image.svg”  type=”iamge/svg+xml” />

2、iframe标签

<iframe  src=”image.svg” > </iframe>

应用svg达成字体Logo

一、使用sketch画字体Logo,会调换对应的.svg文件,在html文件中向来引用就行

二、自个儿在html中使用标签来贯彻

三、使用Aliiconfont

先是步:拷贝项目下素不相识成的symbol代码:

//at.alicdn.com/t/font_1473319176_4914331.js

第2步:参加通用css代码(引进3次就行):

.icon {

width:1em; height:1em;

vertical-align:-0.15em;

fill: currentColor;

overflow: hidden;

}

其三步:挑选相应Logo并拿走类名,应用于页面:

<svg  class=”icon” style=”width:100px;height:100px”>

<use  xlink:href=”#icon-xxx”></use>

</svg>

相关文章