您的位置:首页 > 编程语言 > Java开发

java图片缩放不失真(收集)

2011-03-14 13:26 435 查看
import java.awt.image.BufferedImage;   

import java.io.ByteArrayInputStream;   

import java.io.File;   

import java.io.FileInputStream;   

import java.io.IOException;   

import java.io.InputStream;   

import javax.imageio.ImageIO;   

import com.mortennobel.imagescaling.ResampleOp;   

import org.apache.log4j.Logger;   

  

/**  

 * 图片缩放工具类  

 * @author sunnymoon  

 */  

public class MyImage {   

    private final Logger log = Logger.getLogger(this.getClass());   

    /**  

     * 接收输入流输生成图片  

     * @param input  

     * @param writePath  

     * @param width  

     * @param height  

     * @param format  

     * @return  

     */  

    public boolean resizeImage(InputStream input, String writePath,   

            Integer width, Integer height, String format) {   

        try {   

            BufferedImage inputBufImage = ImageIO.read(input);   

            log.info("转前图片高度和宽度:" + inputBufImage.getHeight() + ":"+ inputBufImage.getWidth());   

            ResampleOp resampleOp = new ResampleOp(width, height);// 转换   

            BufferedImage rescaledTomato = resampleOp.filter(inputBufImage,   

                    null);   

            ImageIO.write(rescaledTomato, format, new File(writePath));   

            log.info("转后图片高度和宽度:" + rescaledTomato.getHeight() + ":"+ rescaledTomato.getWidth());   

            return true;   

        } catch (IOException e) {   

            e.printStackTrace();   

            return false;   

        }   

  

    }   

  

    /**  

     * 接收File输出图片  

     * @param file  

     * @param writePath  

     * @param width  

     * @param height  

     * @param format  

     * @return  

     */  

    public boolean resizeImage(File file, String writePath, Integer width,   

            Integer height, String format) {   

        try {   

            BufferedImage inputBufImage = ImageIO.read(file);   

            inputBufImage.getType();   

            log.info("转前图片高度和宽度:" + inputBufImage.getHeight() + ":"+ inputBufImage.getWidth());   

            ResampleOp resampleOp = new ResampleOp(width, height);// 转换   

            BufferedImage rescaledTomato = resampleOp.filter(inputBufImage,   

                    null);   

            ImageIO.write(rescaledTomato, format, new File(writePath));   

            log.info("转后图片高度和宽度:" + rescaledTomato.getHeight() + ":"+ rescaledTomato.getWidth());   

            return true;   

        } catch (IOException e) {   

            e.printStackTrace();   

            return false;   

        }   

  

    }   

  

    /**  

     * 接收字节数组生成图片  

     * @param RGBS  

     * @param writePath  

     * @param width  

     * @param height  

     * @param format  

     * @return  

     */  

    public boolean resizeImage(byte[] RGBS, String writePath, Integer width,   

            Integer height, String format) {   

        InputStream input = new ByteArrayInputStream(RGBS);   

        return this.resizeImage(input, writePath, width, height, format);   

    }   

  

    public byte[] readBytesFromIS(InputStream is) throws IOException {   

        int total = is.available();   

        byte[] bs = new byte[total];   

        is.read(bs);   

        return bs;   

    }   

       

    //测试:只测试了字节流的方式,其它的相对简单,没有一一测试   

    public static void main(String[] args) throws IOException {   

           

           

        int width = 150;   

        int height = 150;   

        File inputFile = new File("F://from.jpg");   

        File outFile = new File("F://to.jpg");   

        String outPath = outFile.getAbsolutePath();   

        MyImage myImage = new MyImage();   

        InputStream input = new FileInputStream(inputFile);   

        byte[] byteArrayImage=myImage.readBytesFromIS(input);   

        input.read(byteArrayImage);   

        myImage.resizeImage(byteArrayImage, outPath, width, height, "jpg");   

    }   

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java input byte 测试 null file