UID 2
精华
积分 7736
威望 点
宅币 个
贡献 次
宅之契约 份
最后登录 1970-1-1
在线时间 小时
由于项目需要,人手又不够,不可能自己从江苏省人民医院里一个个提取信息做网页放到自己的网站中。这里就是程序设计的精髓了,程序就是用来解决大量的重复的劳动的,如果你能手动实现某过程的一个细节,且这些细节具有相似性,那么你就可以很容易用程序做出。
还是用jsoup。运行以后会获得300M的数据,包括处理过的图像和生成的xml,医生信息和科室信息,直接上代码了,自己写了有400行,效果在后面。
jsph.java
package jsph;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.URL;
import java.net.URLConnection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;
public class jsph
{
private String keshijieshao="http://www.jsph.net/col/col25/index.html";
private String[] names={"内科","外科","老年医学科","康复医学科","妇产科","儿科","门急诊","医技"};
private String[] addrs=
{
"http://www.jsph.net/col/col861/index.html",
"http://www.jsph.net/col/col862/index.html",
"http://www.jsph.net/col/col863/index.html",
"http://www.jsph.net/col/col864/index.html",
"http://www.jsph.net/col/col865/index.html",
"http://www.jsph.net/col/col866/index.html",
"http://www.jsph.net/col/col867/index.html",
"http://www.jsph.net/col/col868/index.html",
};
private String url="http://www.jsph.net/script/0/nav.js";
private int threadnum=0;
public jsph()
{
try
{
Document keshidoc=Jsoup.connect(keshijieshao).timeout(0).get();
processKeshi(keshidoc.select("a[style=font-size:14px;]"));
Elements doctorlist=new Elements();
int i,j;
for(i=0;i<names.length;i++)
{
Document doc=Jsoup.connect(addrs[i]).timeout(0).get();
Elements eles=doc.select("td[width=752]").get(0).children();
for(j=11;j<eles.size();j+=3)
{
doctorlist.addAll(eles.get(j).select("a"));
}
}
processYisheng(doctorlist);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public String c(String src) throws Exception
{
// return src;
return new String(src.getBytes(),"gb2312");
}
public void processKeshi(Elements eles) throws Exception
{
FileOutputStream fos=new FileOutputStream("重点专科.xml");
OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
BufferedWriter bw=new BufferedWriter(osw);
bw.write(c("<?xml version="1.0" encoding="utf-8"?>\n"));
bw.write(c("<keshis>\n"));
bw.write(c("\t<keshi>\n"));
bw.write(c("\t\t<name>内科</name>\n"));
bw.write(c("\t\t<id></id>\n"));
bw.write(c("\t\t<isroot>true</isroot>\n"));
bw.write(c("\t</keshi>\n"));
bw.write(c("\t<keshi>\n"));
bw.write(c("\t\t<name>外科</name>\n"));
bw.write(c("\t\t<id></id>\n"));
bw.write(c("\t\t<isroot>true</isroot>\n"));
bw.write(c("\t</keshi>\n"));
bw.write(c("\t<keshi>\n"));
bw.write(c("\t\t<name>内科</name>\n"));
bw.write(c("\t\t<id></id>\n"));
bw.write(c("\t\t<isroot>true</isroot>\n"));
bw.write(c("\t</keshi>\n"));
bw.write(c("\t<keshi>\n"));
bw.write(c("\t\t<name>老年病学科</name>\n"));
bw.write(c("\t\t<id>13</id>\n"));
bw.write(c("\t\t<isroot>true</isroot>\n"));
bw.write(c("\t</keshi>\n"));
bw.write(c("\t<keshi>\n"));
bw.write(c("\t\t<name>康复医学科</name>\n"));
bw.write(c("\t\t<summary>江苏省人民医院康复医学科成立于1956年,55年来学科发展迅速,目前已成立了康复医学中心。"
+ "现有康复门诊800平方米,病房76张床位、盛泽分院康复医学科22张床位,江苏省人民医院康复医学分院是国内三级甲等"
+ "医院中临床规模最大、设备最齐全、技术实力最强的科室之一</summary>\n"));
bw.write(c("\t\t<detailurl>康复医学科.htm</detailurl>\n"));
bw.write(c("\t\t<id>37</id>\n"));
bw.write(c("\t\t<isroot>true</isroot>\n"));
bw.write(c("\t</keshi>\n"));
bw.write(c("\t<keshi>\n"));
bw.write(c("\t\t<name>妇产科</name>\n"));
bw.write(c("\t\t<id></id>\n"));
bw.write(c("\t\t<isroot>true</isroot>\n"));
bw.write(c("\t</keshi>\n"));
bw.write(c("\t<keshi>\n"));
bw.write(c("\t\t<name>儿科</name>\n"));
bw.write(c("\t\t<id>28</id>\n"));
bw.write(c("\t\t<isroot>true</isroot>\n"));
bw.write(c("\t</keshi>\n"));
bw.write(c("\t<keshi>\n"));
bw.write(c("\t\t<name>门急诊</name>\n"));
bw.write(c("\t\t<id></id>\n"));
bw.write(c("\t\t<isroot>true</isroot>\n"));
bw.write(c("\t</keshi>\n"));
bw.write(c("\t<keshi>\n"));
bw.write(c("\t\t<name>医技</name>\n"));
bw.write(c("\t\t<id></id>\n"));
bw.write(c("\t\t<isroot>true</isroot>\n"));
bw.write(c("\t</keshi>\n"));
String fatherkeshiname="";
for(int i=0;i<eles.size();i++)
{
Document curdoc=Jsoup.connect(eles.get(i).attr("abs:href")).timeout(0).get();
Elements temp1=curdoc.select("a[style=color:#0053a3;]");
String curfather=temp1.get(temp1.size()-2).text();
System.out.println("father:"+curfather);
if(i == 0)
{
bw.write(c("\t<"+curfather+">\n"));
fatherkeshiname=curfather;
}
else if(!fatherkeshiname.equals(curfather))
{
bw.write(c("\t</"+fatherkeshiname+">\n"));
fatherkeshiname=curfather;
bw.write(c("\t<"+fatherkeshiname+">\n"));
}
bw.write(c("\t\t<keshi>\n"));
bw.write(c("\t\t\t<name>"+eles.get(i).text()+"</name>\n"));
System.out.println(eles.get(i).text());
bw.write(c("\t\t\t<id></id>\n"));
Elements inner=curdoc.select("td[style=padding:0px 10px 0px 10px;]\n");
bw.write(c("\t\t\t<summary>"+getProperText(inner.text())+"</summary>\n"));
String keshiname=eles.get(i).text();
bw.write(c("\t\t\t<detailurl>"+keshiname+".htm</detailurl>\n"));
bw.write(c("\t\t</keshi>\n"));
if(i == eles.size()-1)
{
bw.write(c("\t</"+curfather+">\n"));
}
FileOutputStream infos=new FileOutputStream(keshiname+".htm");
OutputStreamWriter inosw=new OutputStreamWriter(infos,"UTF-8");
BufferedWriter inbw=new BufferedWriter(inosw);
inbw.write(c("<?xml version="1.0" encoding="utf-8"?>\n"));
inbw.write(c("<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN""http://www.wapforum.org/DTD/xhtml-mobile10.dtd">\n"));
inbw.write(c("<html xmlns="http://www.w3.org/1999/xhtml">\n"));
inbw.write(c("<head><style type="text/css">body{font-size:medium;line-height:1.5em;text-align:left}</style><title>"+keshiname+"</title></head>\n"));
inbw.write(c("<body>\n\t<div>\n"));
if(inner.select("a").size() != 0)
{
Document detailpage=Jsoup.connect(inner.select("a").attr("abs:href")).timeout(0).get();
Elements content=detailpage.select("div#zoom p");
for(Element el:content.select("img"))
{
final String url=el.attr("abs:src");
final String dst=el.attr("src");
while(threadnum > 10)
{
Thread.sleep(1000);
}
new Thread()
{
@Override
public void run()
{
threadnum++;
try
{
downloadImage(url,dst,false);
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
threadnum--;
}
}
}.start();
}
inbw.write(c("\t\t"+content.html().replace("/picture","picture")+"\n"));
}
inbw.write(c("\t</div>\n</body>\n</html>"));
inbw.close();
inosw.close();
infos.close();
}
bw.write(c("</keshis>\n"));
bw.close();
osw.close();
fos.close();
}
public void downloadImage(String url,String dir,boolean change) throws Exception//下载图片并处理成合适大小
{
String origindir=new String(dir);
File file=null;
StringBuilder curpath=new StringBuilder();
if(dir.charAt(0) == '/')
dir=dir.substring(1);
while(dir.indexOf('/') != -1)
{
int index=dir.indexOf('/');
curpath.append(dir.substring(0,index));
file=new File(curpath.toString());
if(!file.exists())
{
file.mkdir();
}
curpath.append('/');
dir=dir.substring(index+1);
}
int byteread=0;
int bytesum=0;
URL weburl=new URL(url);
URLConnection con=weburl.openConnection();
InputStream instream=con.getInputStream();
if(new File(curpath.toString()+dir).exists())
return;
FileOutputStream fs=new FileOutputStream(curpath.toString()+dir);
FileOutputStream sfs=null;
if(change)
sfs=new FileOutputStream(curpath.toString()+"small_"+dir);
byte[] buffer=new byte[65536];
while((byteread=instream.read(buffer)) != -1)
{
bytesum+=byteread;
fs.write(buffer,0,byteread);
if(change)
sfs.write(buffer,0,byteread);
System.out.println("\t\t当前下载文件:"+url+"\t当前大小:"+bytesum);
}
if(change)
sfs.close();
fs.close();
instream.close();
if(change)
{
//处理图片
ImageUtil.resize(curpath.toString()+dir,curpath.toString()+dir,160,200);
ImageUtil.resize(curpath.toString()+"small_"+dir,curpath.toString()+"small_"+dir,80,100);
}
}
private class MyThread extends Thread
{
private String downloadurl;
private String picurl;
private BufferedWriter bwp;
private String doctorname;
public MyThread(Elements info,String picurl,BufferedWriter bwp,int i,Elements eles)
{
downloadurl=info.get(0).select("img").attr("abs:src");
this.picurl=picurl;
this.bwp=bwp;
doctorname=eles.get(i).text();
}
@Override
public void run()
{
threadnum++;
try
{
downloadImage(downloadurl,picurl,true);
}
catch(Exception e)
{
try
{
bwp.write("无头像:"+doctorname+"\n");
}
catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
finally
{
threadnum--;
}
}
}
public void processYisheng(Elements eles) throws Exception
{
FileOutputStream fos=new FileOutputStream("名医大全.xml");
OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
BufferedWriter bw=new BufferedWriter(osw);
bw.write(c("<?xml version="1.0" encoding="utf-8"?>\n"));
bw.write(c("<doctors>\n"));
String fatherkeshiname="";
FileOutputStream fosp=new FileOutputStream("其他信息.xml");
OutputStreamWriter oswp=new OutputStreamWriter(fosp);
BufferedWriter bwp=new BufferedWriter(oswp);
for(int i=0;i<eles.size();i++)
{
System.out.println(eles.get(i).attr("abs:href"));
Document curdoc=Jsoup.connect(eles.get(i).attr("abs:href")).timeout(0).get();
Elements temp1=curdoc.select("a[style=color:#0053a3;]");
if(temp1.size() < 2)//竟然使用了个人主页!!!
{
bwp.write("个人主页:"+eles.get(i).text()+"\n");
continue;
}
String curfather=temp1.get(temp1.size()-2).text();
System.out.println("father:"+curfather);
Elements info=curdoc.select("td[style=padding:6px 0px;] table tbody tr td table tbody tr").get(0).children();
String picurl=info.get(0).select("img").attr("src");
int index=picurl.lastIndexOf('/');
String spicurl=picurl.substring(0,index+1)+"small_"+picurl.substring(index+1);
if(i == 0)
{
bw.write(c("<"+curfather+">\n"));
fatherkeshiname=curfather;
}
else if(!fatherkeshiname.equals(curfather))
{
bw.write(c("<"+fatherkeshiname+">\n"));
fatherkeshiname=curfather;
bw.write(c("<"+fatherkeshiname+">\n"));
}
bw.write(c("\t<doctor>\n"));
bw.write(c("\t\t<name>"+eles.get(i).text()+"</name>\n"));
System.out.println(eles.get(i).text());
bw.write(c("\t\t<id></id>\n"));
Elements inner=info.get(2).children();
bw.write(c("\t\t<summary>"+inner.get(2).text()+getProperText(inner.get(4).text())+"</summary>\n"));
String doctorname=eles.get(i).text();
bw.write(c("\t\t<detailurl>"+doctorname+".htm</detailurl>\n"));
while(threadnum > 2)
{
Thread.sleep(1000);
}
new MyThread(info,picurl,bwp,i,eles).start();
bw.write(c("\t\t<smallpicurl>"+spicurl+"</smallpicurl>\n"));
bw.write(c("\t\t<usefulinfourl>"+doctorname+".xml</usefulinfourl>\n"));//排班、评价、,,,
bw.write(c("\t</doctor>\n"));
if(i == eles.size()-1)
{
bw.write(c("</"+curfather+">\n"));
}
FileOutputStream infos=new FileOutputStream(doctorname+".htm");
OutputStreamWriter inosw=new OutputStreamWriter(infos,"UTF-8");
BufferedWriter inbw=new BufferedWriter(inosw);
inbw.write(c("<?xml version="1.0" encoding="utf-8"?>\n"));
inbw.write(c("<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN""http://www.wapforum.org/DTD/xhtml-mobile10.dtd">\n"));
inbw.write(c("<html xmlns="http://www.w3.org/1999/xhtml">\n"));
inbw.write(c("<head><style type="text/css">body{font-size:medium;line-height:1.5em;text-align:left}</style><title>"+doctorname+"</title></head>\n"));
inbw.write(c("<body>\n\t<div>\n"));
for(Element el:info.select("img"))
{
final String url=el.attr("abs:src");
final String dst=el.attr("src");
while(threadnum > 10)
{
Thread.sleep(1000);
}
new Thread()
{
@Override
public void run()
{
threadnum++;
try
{
downloadImage(url,dst,false);
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
threadnum--;
}
}
}.start();
}
inbw.write(c("\t\t"+info.html().replace("/picture","picture")+"\n"));
inbw.write(c("\t</div>\n</body>\n</html>"));
inbw.close();
inosw.close();
infos.close();
}
bw.close();
osw.close();
fos.close();
bwp.close();
oswp.close();
fosp.close();
}
private String getProperText(String src)
{
if(src.length() > 128)
{
StringBuilder sb=new StringBuilder(src.substring(0, 128));
for(int i=128;i<src.length();i++)
{
char ch=src.charAt(i);
sb.append(ch);
if(ch == ',' || ch == '。' || ch == '、')
{
break;
}
}
sb.setCharAt(sb.length()-1,'。');
return sb.toString();
}
else
return src;
}
public static void main(String[] args) throws Exception
{
new jsph();
}
}
复制代码
ImageUtil.java 处理图片类,由于网上代码无法直接使用,因此做了微调
package jsph;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Date;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
/**
* 图片压缩工具类 提供的方法中可以设定生成的 缩略图片的大小尺寸、压缩尺寸的比例、图片的质量等
* <pre>
* 调用示例:
* resiz(srcImg, tarDir + "car_1_maxLength_11-220px-hui.jpg", 220, 0.7F);
* </pre>
*
* @project haohui-b2b
* @author cevencheng
* @create 2012-3-22 下午8:29:01
*/
public class ImageUtil
{
/**
* * 图片文件读取
*
* @param srcImgPath
* @return
*/
private static BufferedImage InputImage(String srcImgPath) throws RuntimeException
{
BufferedImage srcImage = null;
FileInputStream in = null;
try
{
// 构造BufferedImage对象
File file = new File(srcImgPath);
in = new FileInputStream(file);
byte[] b = new byte[5];
in.read(b);
srcImage = javax.imageio.ImageIO.read(file);
}
catch (IOException e)
{
e.printStackTrace();
throw new RuntimeException("读取图片文件出错!", e);
}
finally
{
if (in != null)
{
try
{
in.close();
}
catch (IOException e)
{
throw new RuntimeException("读取图片文件出错!", e);
}
}
}
return srcImage;
}
/**
* * 将图片按照指定的图片尺寸、源图片质量压缩(默认质量为1)
*
* @param srcImgPath
* :源图片路径
* @param outImgPath
* :输出的压缩图片的路径
* @param new_w
* :压缩后的图片宽
* @param new_h
* :压缩后的图片高
*/
public static void resize(String srcImgPath, String outImgPath, int new_w, int new_h)
{
// 得到图片
BufferedImage src = InputImage(srcImgPath);
int old_w = src.getWidth();
// 得到源图宽
int old_h = src.getHeight();
// 得到源图长
// 根据原图的大小生成空白画布
BufferedImage tempImg = new BufferedImage(old_w, old_h,
BufferedImage.TYPE_INT_RGB);
// 在新的画布上生成原图的缩略图
Graphics2D g = tempImg.createGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, old_w, old_h);
g.drawImage(src, 0, 0, old_w, old_h, Color.white, null);
g.dispose();
BufferedImage newImg = new BufferedImage(new_w, new_h,
BufferedImage.TYPE_INT_RGB);
newImg.getGraphics().drawImage( tempImg.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), 0, 0, null);
// 调用方法输出图片文件
outImage(outImgPath, newImg);
}
/**
* 将图片按照指定的尺寸比例、源图片质量压缩(默认质量为1)
*
* @param srcImgPath
* :源图片路径
* @param outImgPath
* :输出的压缩图片的路径
* @param ratio
* :压缩后的图片尺寸比例
* @param per
* :百分比
*/
public static void resize(String srcImgPath, String outImgPath, float ratio)
{
resize(srcImgPath, outImgPath, ratio, 1F);
}
/**
* 将图片按照指定长或者宽的最大值来压缩图片(默认质量为1)
*
* @param srcImgPath
* :源图片路径
* @param outImgPath
* :输出的压缩图片的路径
* @param maxLength
* :长或者宽的最大值
* @param per
* :图片质量
*/
public static void resize(String srcImgPath, String outImgPath, int maxLength)
{
resize(srcImgPath, outImgPath, maxLength, 1F);
}
/**
* * 将图片按照指定的尺寸比例、图片质量压缩
*
* @param srcImgPath
* :源图片路径
* @param outImgPath
* :输出的压缩图片的路径
* @param ratio
* :压缩后的图片尺寸比例
* @param per
* :百分比
* @author cevencheng
*/
public static void resize(String srcImgPath, String outImgPath,
float ratio, float per) {
// 得到图片
BufferedImage src = InputImage(srcImgPath);
int old_w = src.getWidth();
// 得到源图宽
int old_h = src.getHeight();
// 得到源图长
int new_w = 0;
// 新图的宽
int new_h = 0;
// 新图的长
BufferedImage tempImg = new BufferedImage(old_w, old_h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = tempImg.createGraphics();
g.setColor(Color.white);
// 从原图上取颜色绘制新图g.fillRect(0, 0, old_w, old_h);
g.drawImage(src, 0, 0, old_w, old_h, Color.white, null);
g.dispose();
// 根据图片尺寸压缩比得到新图的尺寸new_w = (int) Math.round(old_w * ratio);
new_h = (int) Math.round(old_h * ratio);
BufferedImage newImg = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB);
newImg.getGraphics().drawImage( tempImg.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), 0, 0, null);
// 调用方法输出图片文件OutImage(outImgPath, newImg, per);
}
/**
* <b>
* 指定长或者宽的最大值来压缩图片
* 推荐使用此方法
* </b>
* @param srcImgPath
* :源图片路径
* @param outImgPath
* :输出的压缩图片的路径
* @param maxLength
* :长或者宽的最大值
* @param per
* :图片质量
* @author cevencheng
*/
public static void resize(String srcImgPath, String outImgPath, int maxLength, float per)
{
// 得到图片
BufferedImage src = InputImage(srcImgPath);
int old_w = src.getWidth();
// 得到源图宽
int old_h = src.getHeight();
// 得到源图长
int new_w = 0;
// 新图的宽
int new_h = 0;
// 新图的长
BufferedImage tempImg = new BufferedImage(old_w, old_h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = tempImg.createGraphics();
g.setColor(Color.white);
// 从原图上取颜色绘制新图
g.fillRect(0, 0, old_w, old_h);
g.drawImage(src, 0, 0, old_w, old_h, Color.white, null);
g.dispose();
// 根据图片尺寸压缩比得到新图的尺寸
if (old_w > old_h)
{
// 图片要缩放的比例
new_w = maxLength;
new_h = (int) Math.round(old_h * ((float) maxLength / old_w));
}
else
{
new_w = (int) Math.round(old_w * ((float) maxLength / old_h));
new_h = maxLength;
}
BufferedImage newImg = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB);
newImg.getGraphics().drawImage( tempImg.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), 0, 0, null);
// 调用方法输出图片文件
outImage(outImgPath, newImg);
}
/**
* 将图片压缩成指定宽度, 高度等比例缩放
*
* @param srcImgPath
* @param outImgPath
* @param width
* @param per
*/
public static void resizeFixedWidth(String srcImgPath, String outImgPath, int width, float per)
{
// 得到图片
BufferedImage src = InputImage(srcImgPath);
int old_w = src.getWidth();
// 得到源图宽
int old_h = src.getHeight();
// 得到源图长
int new_w = 0;
// 新图的宽
int new_h = 0;
// 新图的长
BufferedImage tempImg = new BufferedImage(old_w, old_h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = tempImg.createGraphics();
g.setColor(Color.white);
// 从原图上取颜色绘制新图
g.fillRect(0, 0, old_w, old_h);
g.drawImage(src, 0, 0, old_w, old_h, Color.white, null);
g.dispose();
// 根据图片尺寸压缩比得到新图的尺寸
if (old_w > old_h)
{
// 图片要缩放的比例
new_w = width;
new_h = (int) Math.round(old_h * ((float) width / old_w));
}
else
{
new_w = (int) Math.round(old_w * ((float) width / old_h));
new_h = width;
}
BufferedImage newImg = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB);
newImg.getGraphics().drawImage( tempImg.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), 0, 0, null);
// 调用方法输出图片文件
outImage(outImgPath, newImg);
}
/**
* * 将图片文件输出到指定的路径,并可设定压缩质量
*
* @param outImgPath
* @param newImg
* @param per
* @author cevencheng
*/
private static void outImage(String outImgPath, BufferedImage newImg)
{
// 判断输出的文件夹路径是否存在,不存在则创建
File file = new File(outImgPath);
if (!file.exists())
{
file.mkdirs();
}
try
{
String formatName=outImgPath.substring(outImgPath.lastIndexOf('.')+1);
ImageIO.write(newImg, formatName, new File(outImgPath));
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
/**
* 图片剪切工具方法
*
* @param srcfile 源图片
* @param outfile 剪切之后的图片
* @param x 剪切顶点 X 坐标
* @param y 剪切顶点 Y 坐标
* @param width 剪切区域宽度
* @param height 剪切区域高度
*
* @throws IOException
* @author cevencheng
*/
public static void cut(File srcfile, File outfile, int x, int y, int width, int height) throws IOException
{
FileInputStream is = null;
ImageInputStream iis = null;
try
{
// 读取图片文件
is = new FileInputStream(srcfile);
/*
* 返回包含所有当前已注册 ImageReader 的 Iterator,这些 ImageReader 声称能够解码指定格式。
* 参数:formatName - 包含非正式格式名称 .(例如 "jpeg" 或 "tiff")等 。
*/
Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName("jpg");
ImageReader reader = it.next();
// 获取图片流
iis = ImageIO.createImageInputStream(is);
/*
* <p>iis:读取源.true:只向前搜索 </p>.将它标记为 ‘只向前搜索’。
* 此设置意味着包含在输入源中的图像将只按顺序读取,可能允许 reader 避免缓存包含与以前已经读取的图像关联的数据的那些输入部分。
*/
reader.setInput(iis, true);
/*
* <p>描述如何对流进行解码的类<p>.用于指定如何在输入时从 Java Image I/O
* 框架的上下文中的流转换一幅图像或一组图像。用于特定图像格式的插件 将从其 ImageReader 实现的
* getDefaultReadParam 方法中返回 ImageReadParam 的实例。
*/
ImageReadParam param = reader.getDefaultReadParam();
/*
* 图片裁剪区域。Rectangle 指定了坐标空间中的一个区域,通过 Rectangle 对象
* 的左上顶点的坐标(x,y)、宽度和高度可以定义这个区域。
*/
Rectangle rect = new Rectangle(x, y, width, height);
// 提供一个 BufferedImage,将其用作解码像素数据的目标。
param.setSourceRegion(rect);
/*
* 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象,并将 它作为一个完整的
* BufferedImage 返回。
*/
BufferedImage bi = reader.read(0, param);
// 保存新图片
ImageIO.write(bi, "jpg", outfile);
}
finally
{
if (is != null)
{
is.close();
}
if (iis != null)
{
iis.close();
}
}
}
public static void main(String args[]) throws Exception
{
String srcImg = "j:/branch.jpg";
resize(srcImg, srcImg, 200,200);
resize(srcImg, "111222.jpg", 200,200);
}
}
复制代码
得到如下文件:
2014/04/06 13:44 2,000 HLA实验室.htm
2014/04/06 13:43 2,849 ICU.htm
2014/04/06 13:53 <DIR> picture
2014/04/06 13:57 1,601 丁丽华.htm
2014/04/06 13:57 1,306 丁卫.htm
2014/04/06 13:57 1,098 丁强.htm
2014/04/06 13:57 1,604 丁新生.htm
2014/04/06 13:57 1,073 丁正年.htm
2014/04/06 13:58 1,444 丁炜.htm
2014/04/06 13:58 2,327 万琪.htm
2014/04/06 13:58 1,301 严友德.htm
2014/04/06 13:44 3,938 中医科.htm
2014/04/06 13:44 364 临床心理科.htm
2014/04/06 13:58 1,189 乔宗海.htm
2014/04/06 13:58 1,167 乔明哲.htm
2014/04/06 13:58 1,294 于 焱.htm
2014/04/06 13:58 1,594 于莲珍.htm
2014/04/06 13:44 2,855 产科.htm
2014/04/06 13:58 2,022 仇红霞.htm
2014/04/06 13:58 2,992 介入放射.htm
2014/04/06 13:58 1,032 付完珍.htm
2014/04/06 13:58 1,779 仲远明.htm
2014/04/06 13:58 2,059 何戎华.htm
2014/04/06 13:58 1,331 何畏.htm
2014/04/06 13:58 1,152 侯祚琼.htm
2014/04/06 13:58 1,296 俞同福.htm
2014/04/06 13:58 2,186 俞婉珍.htm
2014/04/06 13:58 1,525 俞明.htm
2014/04/06 13:58 1,629 俞香宝.htm
2014/04/06 13:58 1,234 倪金良.htm
2014/04/06 13:58 1,442 傅凤霞.htm
2014/04/06 13:58 1,430 傅士龙.htm
2014/04/06 13:58 1,825 傅赞.htm
2014/04/06 13:58 1,909 傅震.htm
2014/04/06 13:58 1,373 储旭华.htm
2014/04/06 13:58 1,084 储秋萍.htm
2014/04/06 13:44 6,421 儿科.htm
2014/04/06 13:44 899 儿童保健.htm
2014/04/06 13:48 513 其他信息.xml
2014/04/06 13:43 2,912 内分泌科.htm
下面这种全是自动生成:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN""http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><style type="text/css">body{font-size:medium;line-height:1.5em;text-align:left}</style><title>HLA实验室</title></head>
<body>
<div>
<span style="font-size: 20px">本</span>室是集医教研为一体的高新技术实验室,是中华骨髓库专家委员会委员单位,承担中华骨髓库江苏省分库的造血干细胞捐献志愿者HLA基因分型、临床造血干细胞移植和器官移植HLA组织配型及临床风险预测和相关医疗教学科研工作。该实验室2002年12月通过国家红十字总会组织的专家鉴定和认证,成为中华骨髓库定点组织配型实验室,并接受中华骨髓库常规及不定时、即时质控,且多年保持零错误率。
十年来,本室已对近50,000名造血干细胞捐献志愿者进行了HLA分型,建立了HLA分型档案和与中华骨髓库双向联动的功能性资料库,为国内外白血病患者寻找HLA完全匹配的非血缘关系的造血干细胞供者,其中已有142例在我院实施了造血干细胞采集。已从汉族人群中发现4个新等位基因,均获得WHO认证。
此外,本室已为院内外、省内外的临床3000多例亲缘关系、非亲缘关系供患者进行了HLA低分辨和高分辨配型。近年来,本实验室立足于规范化精细建设原则,在转换医学和医学科研上开拓特色,已进行疾病与HLA基因发病之间的研究工作,许多科研成果并已应用于临床。同时,该实验室还运用遗传流行病学和遗传免疫学手段,探索性进行地理遗传学比对和分析工作,为更多、更有效的寻找、确立移植供者提供依据,这一切均确立了本室在国内HLA科教研中的特色和地位。
</div>
</body>
</html>
复制代码
重点专科.htm