tif转jpg

<pre name="code" class="java">package com.compress;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageTypeSpecifier;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.plugins.jpeg.JPEGImageWriteParam;



public class ConvertPic{
	public static void main(String[] args)  
    {  
		try {
			//模拟输入流,JAVA自带无直接读取TIF格式图片的方法
			BufferedImage buf = ImageIO.read(new File("/home/brn/Pictures/2.jpg"));
			compressTif2Jpg(buf, 300, 600, (float)0);
//			compressTif2Jpg(buf, 0.2, (float)0);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
    }  
      
	/**
	 * 将Tif格式图片转为jpg格式输出,指定压缩比例
	 * @param inputBufImg
	 * @param ratio
	 * @param quality
	 * @return
	 */
	public static BufferedImage compressTif2Jpg(BufferedImage inputBufImg, double ratio, float quality) {
		
        ByteArrayOutputStream out;
        ImageWriter imgWriter;  
        ImageWriteParam imgWriteParams;  
        int width = inputBufImg.getWidth();
        int height = inputBufImg.getHeight();
        BufferedImage outBufImage;
  
        if(ratio > 0) {
        	width = (int) (width * ratio);
        	height = (int) (height * ratio);
        	// 指定写图片的方式为 jpg  
            imgWriter = ImageIO.getImageWritersByFormatName("jpg").next();  
            imgWriteParams = setImgWriteParams(quality);
            outBufImage = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
      
            try  
            {  
            	out = new ByteArrayOutputStream();
            	imgWriter.reset();  
                // 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何 OutputStream构造  
                imgWriter.setOutput(ImageIO.createImageOutputStream(out));  
                // 调用write方法,就可以向输入流写图片  
                imgWriter.write(null, new IIOImage(inputBufImg, null, null), imgWriteParams);  
                
                Graphics g = outBufImage.getGraphics();
                g.drawImage(inputBufImg, 0, 0, width, height, null);
                g.dispose();
                ImageIO.write(outBufImage, "jpg", out);
                
                /*System.out.println("Height:" + outBufImage.getHeight());
                System.out.println("Width:" + outBufImage.getWidth());
                ImageIO.write(outBufImage, "JPEG", new File("/home/brn/Pictures/tempout.jpg"));*/
            }  
            catch(Exception e)  
            {  
                e.printStackTrace();  
                return null;  
            }  
            return outBufImage;  
        } else {
        	return null;
        }
	}

	/**
	 * 将Tif格式图片转为jpg格式输出,指定图片宽高
	 * @param inputBufImg
	 * @param width
	 * @param height
	 * @param quality
	 * @return
	 */
    public static BufferedImage compressTif2Jpg(BufferedImage inputBufImg, int width, int height, float quality)  
    {  
        BufferedImage outBufImage;
        ByteArrayOutputStream out;
        ImageWriter imgWriter;  
        ImageWriteParam imgWriteParams;  
  
        if(width > 0 && height > 0) {
        	// 指定写图片的方式为 jpg  
            imgWriter = ImageIO.getImageWritersByFormatName("jpg").next();  
            imgWriteParams = setImgWriteParams(quality);
            outBufImage = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
            
            try  
            {  
            	out = new ByteArrayOutputStream();
            	imgWriter.reset();  
                // 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何 OutputStream构造  
                imgWriter.setOutput(ImageIO.createImageOutputStream(out));  
                // 调用write方法,就可以向输入流写图片  
                imgWriter.write(null, new IIOImage(inputBufImg, null, null), imgWriteParams);  
                
                Graphics g = outBufImage.getGraphics();
                g.drawImage(inputBufImg, 0, 0, width, height, null);
                g.dispose();
                ImageIO.write(outBufImage, "jpg", out);
                
                /*byte[] data = out.toByteArray();
                ByteArrayInputStream in = new ByteArrayInputStream(data);
                outBufImage = ImageIO.read(in);  
                out.flush();
                out.close();*/
            }  
            catch(Exception e)  
            {  
                e.printStackTrace();  
                return null;  
            }  
            return outBufImage;  
        } else {
        	return null;
        }
    }  
    

    /**
     * 设置压缩参数
     * @param quality
     * @return
     */
	private static ImageWriteParam setImgWriteParams(float quality) {
		ImageWriteParam imgWriteParams = new JPEGImageWriteParam(null);  
        // 要使用压缩,必须指定压缩方式为MODE_EXPLICIT  
        imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);  
        // 这里指定压缩的程度,参数quality是取值0~1范围内
        imgWriteParams.setCompressionQuality(quality);  
        imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED); 
        ColorModel colorModel = ColorModel.getRGBdefault();  
        // 指定压缩时使用的色彩模式  
        imgWriteParams.setDestinationType(new ImageTypeSpecifier(colorModel, colorModel.createCompatibleSampleModel(16, 16))); 
		return imgWriteParams;
	}

}



                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值