java 切割图片

在java中可能要对图片进行操作,对图片的切割。一般用awt包。

package com.sysi.cn;

import java.awt.Dimension;

import java.awt.Image;

import java.awt.Point;

import java.awt.Rectangle;

import java.awt.color.ColorSpace;

import java.awt.image.BufferedImage;

import java.awt.image.ColorConvertOp;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Iterator;

 

import javax.imageio.ImageIO;

import javax.imageio.ImageReadParam;

import javax.imageio.ImageReader;

import javax.imageio.stream.ImageInputStream;

 

//import org.apache.log4j.Logger;

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

import com.sun.image.codec.jpeg.JPEGEncodeParam;

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

public class ImageCut2 {

// private static final Logger log = Logger.getLogger(ImageUtil.class);

 

 /**

  * 切割图片

  * @param x 截点横坐标 (从左开始计数)

  * @param y 截点纵坐标 (从上开始计数)

  * @param width 截取的宽度

  * @param height 截取的长度

  * @param oldpath 图片位置

  * @param newpath 新生成的图片位置

  */

 public static void cutImage(int x, int y, int width, int height, String oldpath, String newpath) {

  FileInputStream is = null;

  ImageInputStream iis = null;

  

  //这个是获取图片扩展名的方法,比如:jpg。我这里有现成的,如果没有,自己实现

//  String imgType = StringUtil.getExt(oldpath);

  String imgType="jpg";

  try {

   is = new FileInputStream(oldpath);

   Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName(imgType);

   ImageReader reader = it.next();

   iis = ImageIO.createImageInputStream(is);

   reader.setInput(iis, true);

   ImageReadParam param = reader.getDefaultReadParam();

   Point p = new Point();

   p.setLocation(x, y);

   Dimension d = new Dimension();

   d.setSize(width, height);

   Rectangle rect = new Rectangle(p, d);

   param.setSourceRegion(rect);

   BufferedImage bi = reader.read(0, param);

   ImageIO.write(bi, imgType, new File(newpath));

   is.close();

   iis.close();

  } catch (Exception e) {

 e.printStackTrace();

//   log.error(e);

  }

 }

 

 /**

  * 缩略图片

  * @param oldpath 原图片

  * @param newpath 新生成的图片存放地址

  * @param wdith   缩略后的宽

  * @param height  缩略后的高

  */

 public static void scaleImage(String oldpath, String newpath, int wdith, int height) {

  // 获取老的图片

  File oldimg = new File(oldpath);

  try {

   BufferedImage bi = ImageIO.read(oldimg);

   Image Itemp = bi.getScaledInstance(wdith, height, BufferedImage.SCALE_SMOOTH);

   BufferedImage thumbnail = new BufferedImage(wdith, height, BufferedImage.TYPE_INT_RGB);

   thumbnail.getGraphics().drawImage(Itemp, 0, 0, null);

   // 缩略后的图片路径

   File newimg = new File(newpath);

   FileOutputStream out = new FileOutputStream(newimg);

   // 绘图

   JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

   JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbnail);

   param.setQuality(1.0f, false);

   encoder.encode(thumbnail);

   out.close();

   bi.flush();

   bi = null;

  } catch (IOException e) {

 e.printStackTrace();

//   log.error(e);

  }

 }

 

 /**   

  * 图像类型转换 GIF->JPG GIF->PNG PNG->JPG PNG->GIF(X)    

  */     

 public static void convert(String source, String result)      

 {      

     try     

     {      

         File f = new File(source);      

         f.canRead();      

         f.canWrite();      

         BufferedImage src = ImageIO.read(f);      

         ImageIO.write(src, "JPG", new File(result));      

     }      

     catch (Exception e)      

     {      

         // TODO Auto-generated catch block      

         e.printStackTrace();      

     }      

 }      

  

 /**  

  * 彩色转为黑白    

  * @param source    

  * @param result    

  */     

 public static void gray(String source, String result)      

 {      

     try     

     {      

         BufferedImage src = ImageIO.read(new File(source));      

         ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);      

         ColorConvertOp op = new ColorConvertOp(cs, null);      

         src = op.filter(src, null);      

         ImageIO.write(src, "JPEG", new File(result));      

     }      

     catch (IOException e)      

     {      

         e.printStackTrace();      

     }      

 } 

 

public static void main(String[] args) {

//  scaleImage("D:/test.jpg", "D:/3.jpg", 426, 300);

cutImage(0, 0, 426, 300, "D:/cat.jpg", "D:/3.jpg");

 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值