提取网页图片链接地址代码.doc_第1页
提取网页图片链接地址代码.doc_第2页
提取网页图片链接地址代码.doc_第3页
提取网页图片链接地址代码.doc_第4页
提取网页图片链接地址代码.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

原计划中使用过的LZW图片压缩算法:LZW压缩算法是一种新颖的压缩方法,由Lemple-Ziv-Welch 三人共同创造,用他们的名字命名。它采用了一种先进的串表压缩不,将每个第一次出现的串放在一个串表中,用一个数字来表示串,压缩文件只存贮数字,则不存贮串,从而使图象文件的压缩效率得到较大的提高。奇妙的是,不管是在压缩还是在解压缩的过程中都能正确的建立这个串表,压缩或解压缩完成后,这个串表又被丢弃。1.基本原理 首先建立一个字符串表,把每一个第一次出现的字符串放入串表中,并用一个数字来表示,这个数字与此字符串在串表中的位置有关,并将这个数字存入压缩文件中,如果这个字符串再次出现时,即可用表示它的数字来代替,并将这个数字存入文件中。压缩完成后将串表丢弃。如print 字符串,如果在压缩时用266表示,只要再次出现,均用266表示,并将print字符串存入串表中,在图象解码时遇到数字266,即可从串表中查出266所代表的字符串print,在解压缩时,串表可以根据压缩数据重新生成。2.实现方法 A.初始化串表 在压缩图象信息时,首先要建立一个字符串表,用以记录每个第一次出现的字符串。一个字符串表最少由两个字符数组构成,一个称为当前数组,一个称为前缀数组,因为在GIF文件中每个基本字符串的长度通常为2(但它表示的实际字符串长度可达几百甚至上千),一个基本字符串由当前字符和它前面的字符(也称前缀)构成。前缀数组中存入字符串中的首字符,当前数组存放字符串中的尾字符,其存入位置相同,因此只要确定一个下标,就可确定它所存贮的基本字符串,所以在数据压缩时,用下标代替基本字符串。一般串表大小为4096个字节(即2 的12次方),这意味着一个串表中最多能存贮4096个基本字符串,在初始化时根据图象中色彩数目多少,将串表中起始位置的字节均赋以数字,通常当前数组中的内容为该元素的序号(即下标),如第一个元素为0,第二个元素为1,第15个元素为14 ,直到下标为色彩数目加2的元素为止。如果色彩数为256,则要初始化到第258个字节,该字节中的数值为257。其中数字256表示清除码,数字257 为图象结束码。后面的字节存放文件中每一个第一次出现的串。同样也要音乐会 前缀数组初始化,其中各元素的值为任意数,但一般均将其各位置1,即将开始位置的各元素初始化为0XFF,初始化的元素数目与当前数组相同,其后的元素则要存入每一个第一次出现的字符串了。如果加大串表的长度可进一步提高压缩效率,但会降低解码速度。 B.压缩方法 了解压缩方法时,先要了解几个名词,一是字符流,二是代码流,三是当前码,四是当前前缀。字符流是源图象文件中未经压缩的图象数据;代码流是压缩后写入GIF 文件的压缩图象数据;当前码是从字符流中刚刚读入的字符;当前前缀是刚读入字符前面的字符。GIF 文件在压缩时,不论图象色彩位数是多少,均要将颜色值按字节的单位放入代码流中,每个字节均表示一种颜色。虽然在源图象文件中用一个字节表示16色、4色、2色时会出现4位或更多位的浪费(因为用一个字节中的4位就可以表示16色),但用LZW 压缩法时可回收字节中的空闲位。在压缩时,先从字符流中读取第一个字符作为当前前缀,再取第二个字符作为当前码,当前前缀与当前码构成第一个基本字符串(如当前前缀为A,当前码为B则此字符串即为AB),查串表,此时肯定不会找到同样字符串,则将此字符串写入串表,当前前缀写入前缀数组,当前码写入当前数组,并将当前前缀送入代码流,当前码放入当前前缀,接着读取下一个字符,该字符即为当前码了,此时又形成了一个新的基本字符串 (若当前码为C,则此基本字符串为BC),查串表,若有此串,则丢弃当前前缀中的值,用该串在串表中的位置代码(即下标)作为当前前缀,再读取下一个字符作为当前码,形成新的基本字符串,直到整幅图象压缩完成。由此可看出,在压缩时,前缀数组中的值就是代码流中的字符,大于色彩数目的代码肯定表示一个字符串,而小于或等于色彩数目的代码即为色彩本身。 C.清除码 事实上压缩一幅图象时,常常要对串表进行多次初始化,往往一幅图象中出现的第一次出现的基本字符串个数会超过4096个,在压缩过程中只要字符串的长度超过了4096,就要将当前前缀和当前码输入代码流,并向代码流中加入一个清除码,初始化串表,继续按上述方法进行压缩。 D.结束码 当所有压缩完成后,就向代码流中输出一个图象结束码,其值为色彩数加1,在256色文件中,结束码为257。 E.字节空间回收 在GIF文件输出的代码流中的数据,除了以数据包的形式存放之外,所有的代码均按单位存贮,样就有效的节省了存贮空间。这如同4位彩色(16色)的图象,按字节存放时,只能利用其中的4位,另外的4位就浪费了,可按位存贮时,每个字节就可以存放两个颜色代码了。事实上在GIF 文件中,使用了一种可变数的存贮方法,由压缩过程可看出,串表前缀数组中各元素的值颁是有规律的,以256色的GIF文件中,第258-511元素中值的范围是0-510 ,正好可用9位的二进制数表示,第512-1023元素中值的范围是0-1022,正好可用10位的二进制数表示,第1024-2047 元素中值的范围是0-2046,正好用11位的二进制数表示,第2048-4095元素中值的范围是0-4094,正好用12位的二进制数表示。用可变位数存贮代码时,基础位数为图象色彩位数加1,随着代码数的增加,位数也在加大,直到位数超过为12(此时字符串表中的字符串个数正好为2 的12次方,即4096个)。 其基本方法是:每向代码流加入一个字符,就要判别此字符所在串在串表中的位置(即下标)是否超过2的当前位数次方,一旦超过,位数加1。如在4位图象中,对于刚开始的代码按5位存贮,第一个字节的低5位放第一个代码,高三位为第二个代码的低3位,第二个字节的低2位放第二个代码的高两位,依次类推。对于8位(256色)的图象,其基础位数就为9,一个代码最小要放在两个字节。 F.压缩范围 以下为256色GIF文件编码实例,如果留心您会发现这是一种奇妙的编码方法,同时为什么在压缩完成后不再需要串表,而且还在解码时根据代码流信息能重新创建串表。字 符 串: 1,2,1,1,1,1,2,3,4,1,2,3,4,5,9,当 前 码: 2,1,1,1,1,2,3,4,1,2,3,4,5,9,当前前缀: 1,2,1,1,260,1,258,3,4,1,258,262,4,5,当前数组: 2,1,1, 1, 3,4,1, 4,5,9,数组下标: 258,259,260,261,262,263,264,265,266,267,代 码 流: 1,2,1,260,258,3,4,262,4,5, GIF文件作为一种重要的图形图象文件格式,尽管其编码规则极复杂,但其压缩效率是极高的,特别是对某些平滑过渡的图象的图形,压缩效果更好。同时由于其在压缩过程中的对图象信息能够完整的保存,在目前流行的电子图片及电子图书中得到了广泛的应用。一般的html编辑器也是这样实现类似的功能,要改写html中图片的代码,想办法从html的内容中找到img的链接地址,然后在服务器端把他下载下来保存到服务器端。然后把地址给改为服务上保存图片的绝对地址,以此为参数调用图片。一:实现对HTML中网页链接地址的提取/ AnalizeIMG.java / 主程序 import java.io.BufferedReader;import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class AnalizeIMG public void p(String s) System.out.println(s); public void analizeFile(String infile,String outfile) throws Exception File file = new File(infile); if (file = null | ! file.exists() p( File + infile + not exits ! ); if ( ! file.canRead() p( File + infile + cant read ! ); String strLine = null ; FileReader frd = new FileReader(infile);BufferedReader bufferedReader = new BufferedReader(frd);try AnalizeWebParse parse = new AnalizeWebParse(); String s = parse.parse(bufferedReader); createFile(outfile,s); catch (Exception ex) throw ex; finally frd.close(); bufferedReader.close(); private void createFile(String filename, String content) FileWriter f = null ; try f = new FileWriter(filename); if (f = null | content = null ) return ; f.write(content); f.flush(); f.close(); catch (Exception e) finally if (f!= null ) try f.close(); catch (Exception e) public static void main(String arg) AnalizeIMG ana = new AnalizeIMG(); try ana.analizeFile(E:1.txt , E:out.lst); catch (Exception ex) ex.printStackTrace(); 二:提取与下载/ AnalizeWebParse.java / 网页分析代码, import java.io.BufferedReader; import java.io.StringReader;import java.util.regex.Pattern; import javax.swing.text.MutableAttributeSet; import javax.swing.text.html.HTML; import javax.swing.text.html.HTMLEditorKit.ParserCallback; import javax.swing.text.html.parser.ParserDelegator; public class AnalizeWebParse extends ParserCallback StringBuffer sb = new StringBuffer(); boolean start =false ; boolean finished =false ; public void p(String s) System.out.println(s); public void handleStartTag(HTML.Tag tag, MutableAttributeSet attribs, int pos) if (finished = true ) return ; if (start = false ) if (tag = HTML.Tag.DIV) String cla = (String) attribs .getAttribute(HTML.Attribute.CLASS); if (cla = null ) return ; if (cla.indexOf(body)!= - 1 ) / Start start = true ; public void handleEndTag(HTML.Tag tag, int pos) if (tag = HTML.Tag.DIV & start = true & finished = false ) finished = true ; public void handleText( char text, int pos) public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos) if (t = HTML.Tag.IMG) / get a src String src = (String) a.getAttribute(HTML.Attribute.SRC); if (src = null ) return ; if (Pattern.matches(http:/.+) , src) sb.append(src).append(n); public String parse(BufferedReader file) throws Exception if (file = null ) return null ; ParserDelegator pd = new ParserDelegator(); try pd.parse(file, this , true ); catch(Exception e) throw e; return sb.toString(); 对于部分需要,可以提取Html内容中的所有图片信息源码如下protected ArrayList GetAList(string HtmlContent) try ArrayList arr = new ArrayList(); HtmlContent = content.Replace(rn,); HtmlContent = content.Trim();string partern = ;/.* ;/a.*(?=Headline)(.|n)*?/a;/.*/ ; System.Text.RegularExpressions.Regex.Regex regex = new System.Text.RegularExpressions.reg

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论