`
huibin
  • 浏览: 741095 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

图片压缩

    博客分类:
  • JAVA
 
阅读更多

 

/**
 * 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));
			
		}
}
分享到:
评论

相关推荐

    C#图片压缩工具源代码

    Grearo图片压缩工具 功能介绍【必读】: 1 图片批量压缩(30以内,依个人机器以及被压缩图片大小而定); 2 图片限定宽度,等比例压缩; 3 图片限定高度,等比例压缩; 4 图片限定高度,宽度压缩;...

    C# core 图片压缩 图片无损压缩 图片无损剪切 无损图片压缩 无损图片剪切

    C#/Core下,最完美的图片压缩,支持各种图片格式,无损压缩,无损剪切,按尺寸/比例压缩、剪切图片,根据自己需要任意处理图片

    图片压缩Caesium.zip

    图片压缩

    图片压缩工具_JPEG Optimizer无损压缩图片.rar

    GIF支持透明与动画,而JPG可以牺牲一部分画质按不同的比例压缩,就是图所占的空间越小,网页显示得越快,为了追求JPG在确保一定画质的前提下,进行最大比例的压缩,出现了不少专门压缩JPG与GIF的图片压缩软件,不过这类的...

    图片压缩软件图片压缩软件图片压缩软件

    图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩软件图片压缩...

    一款精美图片压缩网站源码.rar

    一款精美图片压缩网站源码.rar 源码介绍 一款很好看的图片压缩网站,原本的源码引用的国外js站点,我给下载放到本地调用了,访问速度更快。 一款很好看的图片压缩网站,原本的源码引用的国外js站点,我给下载放到...

    基于C++的图片压缩设计与实现.zip

    本次实验的图片压缩算法即主要基于离散余弦变换与huffman编码来进行压缩。 通过上述流程框图不难看出,压缩算法主要由6个部分组成,以下将对这六个环节进行逐一说明。 ①将图片分割为小块。由于一般的图片信息处理...

    图片压缩到最小.rar

    图片压缩到最小.rar

    阿里巴巴SimpleImage图片压缩相关jar

    图片压缩,阿里巴巴SimpleImage 相关jar文件。其中包含依赖jar: commons-io-2.4.jar;commons-lang.jar;commons-logging-1.1.1.jar jai_codec-1.1.3.jar;jai_core-1.1.3.jar; 包含jar:aliSimpleImage.jar。...

    java图片压缩处理 支持gif

    java图片压缩处理

    微信小程序实现图片压缩

    本文实例为大家分享了微信小程序图片压缩的具体代码,供大家参考,具体内容如下 设计思路: 选择图片后调用微信压缩图片接口,压缩后接收压缩图片的临时地址,调用微信储存接口保存图片至本地。 参数: imagesrc:...

    图片压缩工具JPGCompact

    图片压缩工具图片压缩工具图片压缩工具图片压缩工具图片压缩工具图片压缩工具

    png图片压缩器pngout

    png图片压缩器,方便你尽可能的缩小图片的大小。

    图片压缩节约内存

    实现图片压缩,可以节约内存,应用场合:ListView异步加载大量网络图片时,可以适当压缩显示,可以有效防止内存溢出,适合新手学习之用,gb编码

    java图片压缩处理

    java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理

    图片压缩工具PNG图片压缩工具压缩率高不失真

    图片压缩工具PNG图片压缩工具压缩率高不失真

    图片压缩flex demo

    图片压缩 修改路劲 图片压缩flex demo

    html5 canvas 图片压缩

    完美支持各个主流浏览器,chrome,火狐, ios ,android 微信等的浏览器。解决某些手机拍照 图片旋转问题,解决图片压缩问题。欢迎使用

    C#图片压缩工具源代码(修改版)

    Grearo图片压缩工具(修改版) 增加功能: 1,图象压缩平滑处理,插补优化; 2,去除原版本图象压缩后出现马赛克; 3,解决大量图片压缩会出现“程序假死”现象; 功能介绍【必读】: 1 图片...

    java图片压缩处理(可以压缩为任意大小

    java图片压缩处理(可以压缩为任意大小

Global site tag (gtag.js) - Google Analytics