java上传图片压缩工具类

package com.up.util;

import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;

/**
 * 图片工具类
 */
public final class ImageUtils {

    /**
     * 图片缩放
     * @param org    原图路径
     * @param dest   缩放图路径
     * @param height 高度
     * @param width  宽度
     */
    public static boolean resize(String org,String dest, int height, int width) {
    	    boolean bol = false; //是否进行了压缩
    	    //LogRecord.recode(ImageUtils.class, "resize", org);
    		String pictype="";
    		if(!"".equals(org)&&org!=null){
    			pictype = org.substring(org.lastIndexOf(".")+1,org.length());
    		}
    		//LogRecord.recode(ImageUtils.class, "height:",""+height);
           // LogRecord.recode(ImageUtils.class, "width:",""+width);
            double ratio = 0; //缩放比例
            File o = new File(org);
            File d = new File(dest);
            BufferedImage bi;
			try {
				bi = ImageIO.read(o);
                Image itemp = bi.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH);
	            int itempWidth = bi.getWidth();
	            int itempHeight = bi.getHeight();
	            //LogRecord.recode(ImageUtils.class, "itempHeight:",""+itempHeight);
	          //  LogRecord.recode(ImageUtils.class, "itempWidth:",""+itempWidth);

	            //计算比例
	            if ((itempHeight > height) || (itempWidth > width)) {
                	//LogRecord.recode(ImageUtils.class, "【开始图片缩放】-----pictype:", pictype);
					ratio = Math.min((new Integer(height)).doubleValue() / itempHeight, (new Integer(width)).doubleValue() / itempWidth);
					AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);
					itemp = op.filter(bi, null);
					ImageIO.write((BufferedImage) itemp,pictype, d);
					bol = true;
               }
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			return bol;
    }

    public static void resizeWidth(String org,String dest, int height, int width) {
    	//LogRecord.recode(ImageUtils.class, "resizeWidth", org);
    		String pictype="";
    		if(!"".equals(org)&&org!=null){
    			pictype = org.substring(org.lastIndexOf(".")+1,org.length());
    		}
            double ratio = 0; //缩放比例
            File o = new File(org);
            File d = new File(dest);
            BufferedImage bi;
			try {
				bi = ImageIO.read(o);
                Image itemp = bi.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH);
	            int itempWidth = bi.getWidth();
	           // LogRecord.recode(ImageUtils.class, "itempWidth:",""+itempWidth);

	            //计算比例
	            if (itempWidth != width) {
                	//LogRecord.recode(ImageUtils.class, "【开始图片缩放 width】-----pictype:", pictype);
					ratio = ((new Integer(width)).doubleValue() / itempWidth);
					AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);
					itemp = op.filter(bi, null);
					ImageIO.write((BufferedImage) itemp,pictype, d);
               }

			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
    }

    public static void copyFile(String sourcePath, String targetPath){
        BufferedInputStream inBuff=null;
        BufferedOutputStream outBuff=null;
        try {
        	File sourceFile = new File(sourcePath);
        	File targetFile = new File(targetPath);
        	if(!targetFile.exists()){
        		targetFile.getParentFile().mkdirs();
        	}
            // 新建文件输入流并对它进行缓冲
            inBuff=new BufferedInputStream(new FileInputStream(sourceFile));

            // 新建文件输出流并对它进行缓冲
            outBuff=new BufferedOutputStream(new FileOutputStream(targetFile));

            // 缓冲数组
            byte[] b=new byte[1024 * 5];
            int len;
            while((len=inBuff.read(b)) != -1) {
                outBuff.write(b, 0, len);
            }
            // 刷新此缓冲的输出流
            outBuff.flush();
        } catch(IOException e){
        	//LogRecord.recode(ImageUtils.class, "图片复制异常:", e.getMessage());
        } finally {
            // 关闭流
				try {
					 if(inBuff != null)
						 inBuff.close();
					 if(outBuff != null)
			             outBuff.close();
				} catch (IOException e) {
					//LogRecord.recode(ImageUtils.class, "文件流关闭异常:", e.getMessage());
				}

        }
    }

    public static void main(String[] args) throws IOException{
        //pressImage("D:\\images\\444.jpg", "D:\\images\\wmlogo.gif", 100, 50, 0.5f);
//        pressText("D:\\\\images\\\\444.jpg", "旺仔之印", "宋体", Font.BOLD|Font.ITALIC, 20, Color.red, 50, 50,.8f);
    	//resizeWidth("c:\\test\\VIP3.png","c:\\test\\VIP3_1.png", 90, 245);
		//resize("E:\\testdata\\1.jpg","E:\\testdata\\2.jpg", 200, 200);  

    	//String targetPath = "111.jpg".substring(0,"111.jpg".indexOf(".jpg"));
    	//System.out.println(targetPath);
	}
}
时间: 2024-11-09 09:40:39

java上传图片压缩工具类的相关文章

压缩工具类 - ZipUtils.java

压缩工具类,提供压缩文件.解压文件的方法. 源码如下:(点击下载 - ZipUtils.java .FolderUtils.java.ant-1.7.0.jar.commons-io-2.4.jar.commons-lang-2.6.jar) import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; im

java打开文件夹(含判断操作系统工具类和解压缩工具类)

1.Runtime.getRuntime().exec("explorer D:\\Java"); 2.java.awt.Desktop.getDesktop().open(new File("D:\\Java")); 4.java.awt.Desktop.getDesktop().browse(...) 3. try { String[] cmd = new String[5]; cmd[0] = "cmd"; cmd[1] = "/

一个好用的android图片压缩工具类

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">用了很久图片压缩,之前人们一直使用google的官方图片压缩方法</span> final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = tr

Java上传图片到Ftp,包含上传后文件大小为0的问题和Properties配置文件的读取

准备工作:需要使用coomos-net jar包.下载地址 一. 上传图片到FTP,文件大小为0的问题,解决:将ftp模式修改为Passive模式就可以了. //将ftp模式修改为Passive模式 ftpClient.enterLocalPassiveMode(); 二.配置文件的操作,具体介绍请看Java中Properties类的用法总结 1.使用.properties配置文件的形式定义相关常量. 2.在工具类中导入配置文件 private static Properties getFtpC

java单例类/

java单例类  一个类只能创建一个实例,那么这个类就是一个单例类 可以重写toString方法 输出想要输出的内容 可以重写equcal来比较想要比较的内容是否相等 对于final修饰的成员变量 一但有了初始值,就不能被重新赋值 static修饰的成员变量可以在静态代码块中 或申明该成员时指定初始值 实例成员可以在非静态代码块中,申明属性,或构造器中指定初始值 final修饰的变量必须要显示初始化 final修饰引用变量不能被重新赋值但是可以改变引用对象的内容分(只要地址值不变) final修

Java 对象和类

1.访问实例变量和调用成员方法: 2. 在该例子中,我们创建两个类:Employee 和 EmployeeTest. 首先打开文本编辑器,把下面的代码粘贴进去.注意将文件保存为 Employee.java. Employee类有四个成员变量:name.age.designation和salary.该类显式声明了一个构造方法,该方法只有一个参数. 程序都是从main方法开始执行.为了能运行这个程序,必须包含main方法并且创建一个实例对象. 下面给出EmployeeTest类,该类实例化2个 Em

Java 第八章 类的方法(一) 笔记

Java 第八章 类的方法(一) 一.类的方法语法: 访问修饰符 返回值类型 方法名(){             方法体:      } 二.方法名的规范:     1.必须以字母."_"或"$"开头     2.可以有数字,但不能以数字开头.     3.如果方法名是多个单词组成 ,第一个单词的首字母小写,      其后单词首字母单词大写.     4.方法名都采用动词. 三.方法的返回值     1.有返回值:必须告知返回值的数据类型,并且返回相应的值. 

【总结】Effective java经验之谈,类与接口

转载请注明出处:http://blog.csdn.NET/supera_li/article/details/44940563 Effective Java系列 1.Effective java经验之谈,创建和销毁对象 2.Effective java经验之谈,泛型 3.Effective java经验之谈,类与接口 4.Effective java经验之谈,通用方法 5.Effective java经验之谈,枚举,注解,方法,通用设计,异常 6.Effective java经验之谈,并发编程

浅析Java.lang.ProcessBuilder类

最近由于工作需要把用户配置的Hive命令在Linux环境下执行,专门做了一个用户管理界面特地研究了这个不经常用得ProcessBuilder类.所以把自己的学习的资料总结一下. 一.概述      ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它提供一种启动和管理进程(也就是应用程序)的方法.在J2SE 1.5之前,都是由Process类处来实现进程的控制管理.      每个 ProcessBuilder 实例管理一个进程属性