缩放图像

方案一:

import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.Graphics;
import java.awt.color.ColorSpace;
import javax.imageio.ImageIO;

public class ChangeImageSize
{
    /** *//**
     * 缩放图像
     * @param srcImageFile 源图像文件地址
     * @param result       缩放后的图像地址
     * @param scale        缩放比例
     * @param flag         缩放选择:true 放大; false 缩小;
     */
    public static void scale(String srcImageFile, String result, int scale, boolean flag)
    {
        try
        {
            BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件
            int width = src.getWidth(); // 得到源图宽
            int height = src.getHeight(); // 得到源图长
            if (flag)
            {
                // 放大
                width = width * scale;
                height = height * scale;
            }
            else
            {
                // 缩小
                width = width / scale;
                height = height / scale;
            }
            Image image = src.getScaledInstance(width, height, Image.SCALE_DEFAULT);
            BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics g = tag.getGraphics();
            g.drawImage(image, 0, 0, null); // 绘制缩小后的图
            g.dispose();
            ImageIO.write(tag, "JPEG", new File(result));// 输出到文件流
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
 

方案二:

package com.common.helper;   
  
import java.io.*;   
import java.util.*;   
import com.sun.image.codec.jpeg.*;   
import java.awt.image.*;   
import java.awt.*;   
import java.net.*;   
import java.applet.*;   
import java.sql.*;   
//缩略图类,   
//本java类能将jpg图片文件,进行等比或非等比的大小转换。   
//具体使用方法   
//s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度,是否等比缩放(默认为true))   
public class DwindlePic {   
  
    String InputDir; //输入图路径   
    String OutputDir; //输出图路径   
    String InputFileName; //输入图文件名   
    String OutputFileName; //输出图文件名   
    int OutputWidth = 80; //默认输出图片宽   
    int OutputHeight = 80; //默认输出图片高   
    int rate = 0;   
    boolean proportion = true; //是否等比缩放标记(默认为等比缩放)   
  
    public DwindlePic() {   
        //初始化变量   
        InputDir = "";   
        OutputDir = "";   
        InputFileName = "";   
        OutputFileName = "";   
        OutputWidth = 80;   
        OutputHeight = 80;   
        rate = 0;   
    }   
  
    public boolean s_pic() {   
//        BufferedImage image;   
//        String NewFileName;   
//建立输出文件对象   
        File file = new File(OutputDir + OutputFileName);   
        FileOutputStream tempout = null;   
        try {   
            tempout = new FileOutputStream(file);   
        } catch (Exception ex) {   
            System.out.println(ex.toString());   
        }   
        Image img = null;   
        Toolkit tk = Toolkit.getDefaultToolkit();   
        Applet app = new Applet();   
        MediaTracker mt = new MediaTracker(app);   
        try {   
            img = tk.getImage(InputDir + InputFileName);   
            mt.addImage(img, 0);   
            mt.waitForID(0);   
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
  
        if (img.getWidth(null) == -1) {   
//            System.out.println(" can't read,retry!" + "<BR>");   
            return false;   
        } else {   
            int new_w;   
            int new_h;   
            if (this.proportion == true) { //判断是否是等比缩放.   
//为等比缩放计算输出的图片宽度及高度   
                double rate1 = ((double) img.getWidth(null)) / (double) OutputWidth +   
                        0.1;   
                double rate2 = ((double) img.getHeight(null)) / (double) OutputHeight +   
                        0.1;   
                double rate = rate1 > rate2 ? rate1 : rate2;   
                new_w = (int) (((double) img.getWidth(null)) / rate);   
                new_h = (int) (((double) img.getHeight(null)) / rate);   
            } else {   
                new_w = OutputWidth; //输出的图片宽度   
                new_h = OutputHeight; //输出的图片高度   
            }   
            BufferedImage buffImg = new BufferedImage(new_w, new_h,   
                    BufferedImage.TYPE_INT_RGB);   
  
            Graphics g = buffImg.createGraphics();   
  
            g.setColor(Color.white);   
            g.fillRect(0, 0, new_w, new_h);   
  
            g.drawImage(img, 0, 0, new_w, new_h, null);   
            g.dispose();   
  
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(tempout);   
            try {   
                encoder.encode(buffImg);   
                tempout.close();   
            } catch (IOException ex) {   
                System.out.println(ex.toString());   
            }   
        }   
        return true;   
    }   
  
    public boolean s_pic(String InputDir, String OutputDir, String InputFileName,   
            String OutputFileName) {   
//输入图路径   
        this.InputDir = InputDir;   
//输出图路径   
        this.OutputDir = OutputDir;   
//输入图文件名   
        this.InputFileName = InputFileName;   
//输出图文件名   
        this.OutputFileName = OutputFileName;   
        return s_pic();   
    }   
  
    public boolean s_pic(String InputDir, String OutputDir, String InputFileName,   
            String OutputFileName, int width, int height, boolean gp) {   
//输入图路径   
        this.InputDir = InputDir;   
//输出图路径   
        this.OutputDir = OutputDir;   
//输入图文件名   
        this.InputFileName = InputFileName;   
//输出图文件名   
        this.OutputFileName = OutputFileName;   
//设置图片长宽   
        setW_H(width, height);   
//是否是等比缩放 标记   
        this.proportion = gp;   
        return s_pic();   
    }   
  
    public void setInputDir(String InputDir) {   
        this.InputDir = InputDir;   
    }   
  
    public void setOutputDir(String OutputDir) {   
        this.OutputDir = OutputDir;   
    }   
  
    public void setInputFileName(String InputFileName) {   
        this.InputFileName = InputFileName;   
    }   
  
    public void setOutputFileName(String OutputFileName) {   
        this.OutputFileName = OutputFileName;   
    }   
  
    public void setOutputWidth(int OutputWidth) {   
        this.OutputWidth = OutputWidth;   
    }   
  
    public void setOutputHeight(int OutputHeight) {   
        this.OutputHeight = OutputHeight;   
    }   
  
    public void setW_H(int width, int height) {   
        this.OutputWidth = width;   
        this.OutputHeight = height;   
    }   
  
    public static void main(String[] a) {   
        //s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度)   
        DwindlePic mypic = new DwindlePic();   
        System.out.println(   
                mypic.s_pic("c:/",   
                "d:/",   
                "aa.bmp", "wwww.jpg", 120, 80, true));   
    }   
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值