/** * WriteImage.java Create on 2012-3-10 * * Copyright HeNan New Creatsoft. All rights reserved. */ package com.xcy.image; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.net.URL; import java.net.URLConnection; import java.util.Random; import javax.imageio.ImageIO; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGEncodeParam; import com.sun.image.codec.jpeg.JPEGImageEncoder; /** * Filename: WriteImage.java<br> * Description: 图片压缩 * @author: ZhangLiangYong * @date 2012-3-10下午12:14:03 * @version: 1.0.0 */ public class WriteImage { /** * 根据图片的源地址,生成压缩后的图片 * @param urlstr 图片的http的url地址 * @param savepath 生成图片的绝对路径 * @param width 生成图片的宽度 * @param height 生成图片的高度 * @param percent 压缩图片的百分比 * @return 图片名称 */ public static String getImgFromUrl(String urlstr, String savepath, int width, int height, float percent) { int num = urlstr.indexOf('/', 8); int extnum = urlstr.lastIndexOf('.'); String u = urlstr.substring(0, num); String imageName = urlstr.substring(urlstr.lastIndexOf("/")+1, urlstr.lastIndexOf(".")); //获取图片的源名称 (唯一) //String ext ="."+urlstr.substring(extnum+1,urlstr.length()); String ext = ".png"; //生成png图片格式,在手机上以png图片展示 try { long curTime = System.currentTimeMillis(); // 当前系统时间 Random random = new Random(100000000); //随机数 //String fileName = String.valueOf(curTime) +"_"+ random.nextInt(100000000) + ext; //通过当前系统时间与随机数,生成图片的名字 String fileName = imageName+ext; // 生成图片的绝对路径 String realPath = savepath; File file = new File(realPath); if (!file.exists()) { //判断文件目录是否存在,如不存在,则进行创建 file.mkdir(); } File fileimg = new File(realPath+fileName); if(!fileimg.exists()){ //判断图片是否存在,不存在,则创建 URL url = new URL(urlstr); //声明url对象 URLConnection connection = url.openConnection(); //打开连接 connection.setDoOutput(true); connection.setRequestProperty("referer", u); //通过这个http头的伪装来反盗链 BufferedImage src = ImageIO.read(connection.getInputStream()); //读取连接的流,赋值给BufferedImage对象 // String img_midname=f+n.substring(0,n.indexOf("."))+ext+n.substring(n.indexOf(".")); // String img_midname= fileName; int old_w = src.getWidth(null); //得到源图宽 int old_h = src.getHeight(null); //得到源图高 int new_w = 0; int new_h = 0; double w2 = (old_w * 1.00) / (width * 1.00); double h2 = (old_h * 1.00) / (height * 1.00); //图片跟据长宽留白,成一个正方形图。 不对图片进行留白,如果需要留白,请去掉以下注释 /* BufferedImage oldpic; if (old_w > old_h) { oldpic = new BufferedImage(old_w, old_w, BufferedImage.TYPE_INT_RGB); } else { if (old_w < old_h) { oldpic = new BufferedImage(old_h, old_h, BufferedImage.TYPE_INT_RGB); } else { oldpic = new BufferedImage(old_w, old_h, BufferedImage.TYPE_INT_RGB); } } Graphics2D g = oldpic.createGraphics(); g.setColor(Color.white); if (old_w > old_h) { g.fillRect(0, 0, old_w, old_w); g.drawImage(src, 0, (old_w - old_h) / 2, old_w, old_h, Color.white, null); } else { if (old_w < old_h) { g.fillRect(0, 0, old_h, old_h); g.drawImage(src, (old_h - old_w) / 2, 0, old_w, old_h, Color.white, null); } else { //g.fillRect(0,0,old_h,old_h); g.drawImage(src.getScaledInstance(old_w, old_h, Image.SCALE_SMOOTH), 0, 0, null); } } g.dispose(); src = oldpic; */ //图片调整为方形结束 if (old_w > width) new_w = (int) Math.round(old_w / w2); else new_w = old_w; if (old_h > height) new_h = (int) Math.round(old_h / h2);//计算新图长宽 else new_h = old_h; BufferedImage tag = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB); //tag.getGraphics().drawImage(src,0,0,new_w,new_h,null); //绘制缩小后的图 tag.getGraphics().drawImage( src.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), 0, 0, null); FileOutputStream newimage = new FileOutputStream(realPath + fileName); //输出到文件流 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage); JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag); /* 压缩质量 */ jep.setQuality(percent, true); encoder.encode(tag, jep); //encoder.encode(tag); //近JPEG编码 newimage.close(); System.out.println("生成图片耗时:" + (System.currentTimeMillis() - curTime) + "毫秒"); } return fileName; } catch (Exception e) { System.out.print(e.getMessage().toString()); return ""; } } public static void main(String[] s){ // System.out.println(getImgFromUrl("http://d.houdao.com/11884/09/02/09/179_1963859_05b3be327dff14c.jpg","")) ; // System.out.println(getImgFromUrl("http://pic1a.nipic.com/2008-11-19/2008111912362920_2.jpg","")); // System.out.println(getImgFromUrl("http://192.168.1.129:8000/xcinter/10041281581875225.jpg","")); System.out.println(getImgFromUrl("http://pic1a.nipic.com/2008-11-19/2008111912362920_2.jpg","d://html//",260,180,0.7f)); } }