java对图片进行操作,仅仅是小demo

package com.cy.thumb;

import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class Thumb {
    public static void main(String[] args) throws IOException {
        
        //把图片image.png 长宽等比缩小5倍。
        reduceImage("E:/image.png", "E:/image1.png", 5);
        
        //把图片image.png 长宽各设置为100
        reduceImage("E:/image.png", "E:/image2.png", 100, 100);
        
    }
    
    
    /**
     * 对图片进行剪裁   返回字节数组
     * @param is            图片输入流
     * @param width            裁剪图片的宽
     * @param height        裁剪图片的高
     * @param imageFormat    输出图片的格式 "jpeg jpg等"
     * @return
     */
    public static byte[] clipImage(InputStream is,int width, int height, String imageFormat){
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            // 构造Image对象
            BufferedImage src = javax.imageio.ImageIO.read(is);
            // 缩小边长 
            BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            // 绘制 缩小  后的图片 
            tag.getGraphics().drawImage(src, 0, 0, width, height, null); 
            ImageIO.write(tag, imageFormat, bos);
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        return bos.toByteArray();
    }
    
    
    
    /**
     * 重置图片大小
     * @param srcImagePath            读取图片路径
     * @param toImagePath            写入图片路径
     * @param width                    重新设置图片的宽
     * @param height                重新设置图片的高
     * @throws IOException
     */
    public static void reduceImage(String srcImagePath,String toImagePath,int width, int height) throws IOException{
        FileOutputStream out = null;
        try{
            //读入文件  
            File file = new File(srcImagePath);
            // 构造Image对象 
            BufferedImage src = javax.imageio.ImageIO.read(file);
            // 缩小边长 
            BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            // 绘制 缩小  后的图片 
            tag.getGraphics().drawImage(src, 0, 0, width, height, null);  
            out = new FileOutputStream(toImagePath);  
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
            encoder.encode(tag);  
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(out != null){
                  out.close();  
            }
        }
    }
    
    /**
     * 按倍率缩小图片
     * @param srcImagePath        读取图片路径
     * @param toImagePath        写入图片路径
     * @param ratio                缩小比率  宽、高一起等比率缩小
     * @throws IOException
     */
    public static void reduceImage(String srcImagePath,String toImagePath,int ratio) throws IOException{
        FileOutputStream out = null;
        try{
            //读入文件  
            File file = new File(srcImagePath);
            // 构造Image对象 
            BufferedImage src = javax.imageio.ImageIO.read(file);
            int width = src.getWidth();  
            int height = src.getHeight();  
            // 缩小边长 
            BufferedImage tag = new BufferedImage(width / ratio, height / ratio, BufferedImage.TYPE_INT_RGB);
            // 绘制 缩小  后的图片 
            tag.getGraphics().drawImage(src, 0, 0, width / ratio, height / ratio, null);  
            out = new FileOutputStream(toImagePath);  
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
            encoder.encode(tag);  
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(out != null){
                  out.close();  
            }
        }
    }
    
    
    
    /**
     * 对图片裁剪,并把裁剪新图片保存
     * @param srcPath               读取源图片路径
     * @param toPath             写入图片路径
     * @param x                     剪切起始点x坐标
     * @param y                     剪切起始点y坐标
     * @param width                 剪切宽度
     * @param height             剪切高度
     * @param readImageFormat     读取图片格式
     * @param writeImageFormat   写入图片格式
     */
    public static void cropImage(String srcPath, String toPath, int x,int y,int width,int height, String readImageFormat,String writeImageFormat){
        FileInputStream fis = null ;
        ImageInputStream iis =null ;
        try{ 
            //读取图片文件
            fis = new FileInputStream(srcPath);
            Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName(readImageFormat); 
            ImageReader reader = readers.next();
            //获取图片流
            iis = ImageIO.createImageInputStream(fis); 
            reader.setInput(iis, true);
            ImageReadParam param = reader.getDefaultReadParam();
            //定义一个矩形
            Rectangle rect = new Rectangle(x, y, width, height);
            //提供一个 BufferedImage,将其用作解码像素数据的目标。
            param.setSourceRegion(rect);
            BufferedImage bi = reader.read(0, param);
            //保存新图片
            ImageIO.write(bi, writeImageFormat, new File(toPath));
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{
                if(fis!=null){
                    fis.close();
                }
                if(iis!=null){
                    iis.close();
                }
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }
    
    
}

上面部分参考文章:http://blog.csdn.net/u012486840/article/details/52937823                           

 

 

下面转载自:http://blog.csdn.net/u012481520/article/details/51802469#t0

Java之BufferedImage简谈

 int width = 100;
 int height = 100;
  // 1.创建一个不带透明色的BufferedImage对象
BufferedImage bimage = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);

// 2.创建一个带透明色的BufferedImage对象
 bimage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

// 3.创建一个与屏幕相适应的BufferedImage对象
。。。。

。。。。

四、BufferedImage  —->byte[]
ImageIO.write(BufferedImage image,String format,OutputStream out);方法可以很好的解决问题;
参数image表示获得的BufferedImage;
参数format表示图片的格式,比如“gif”等;
参数out表示输出流,如果要转成Byte数组,则输出流为ByteArrayOutputStream即可;
执行完后,只需要toByteArray()就能得到byte[];


五、byte[] ——>BufferedImage
ByteArrayInputStream in = new ByteArrayInputStream(byte[]b);    //将b作为输入流;
BufferedImage image = ImageIO.read(InputStream in);     //将in作为输入流,读取图片存入image中,而这里in可以为ByteArrayInputStream();
View Code

 

posted on 2017-09-12 01:21  有点懒惰的大青年  阅读(11437)  评论(0编辑  收藏  举报