java 图片宽高_java 根据坐标和宽高对图片做剪切

本文介绍了一个实用的Java图片裁剪工具类的实现方法,包括如何读取不同格式的图片文件、指定裁剪区域并输出裁剪后的图片。通过使用此工具类,可以轻松地对图片进行精确裁剪。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Rectangle;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.util.Arrays;

import java.util.Date;

import javax.imageio.ImageIO;

import javax.imageio.ImageReadParam;

import javax.imageio.ImageReader;

import javax.imageio.stream.ImageInputStream;

import com.lg.res.bean.common.FileData;

public class ImageTailorUtil {

private static String DEFAULT_THUMB_PREVFIX = "thumb_";

private static String DEFAULT_CUT_PREVFIX = "cut_";

private static Boolean DEFAULT_FORCE = false;

/**

* @param srcImg 源图片

* @param output 图片输出流

* @param rect 需要截取部分的坐标和大小

*/

public boolean cutImage(File srcImg, OutputStream output, Rectangle rect){

if(srcImg.exists()){

FileInputStream fis = null;

ImageInputStream iis = null;

try {

fis = new FileInputStream(srcImg);

// ImageIO 支持的图片类型 : [BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]

String types = Arrays.toString(ImageIO.getReaderFormatNames()).replace("]", ",");

String suffix = null;

// 获取图片后缀

if(srcImg.getName().indexOf(".") > -1) {

suffix = srcImg.getName().substring(srcImg.getName().lastIndexOf(".") + 1);

}// 类型和图片后缀全部小写,然后判断后缀是否合法

if(suffix == null || types.toLowerCase().indexOf(suffix.toLowerCase()+",") < 0){

System.out.println("Sorry, the image suffix is illegal. the standard image suffix is {}." + types);

return false;

}

// 将FileInputStream 转换为ImageInputStream

iis = ImageIO.createImageInputStream(fis);

// 根据图片类型获取该种类型的ImageReader

ImageReader reader = ImageIO.getImageReadersBySuffix(suffix).next();

reader.setInput(iis,true);

ImageReadParam param = reader.getDefaultReadParam();

param.setSourceRegion(rect);

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

ImageIO.write(bi, suffix, output);

return true;

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if(fis != null) fis.close();

if(iis != null) iis.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}else {

System.out.println("the src image is not exist.");

}

return false;

}

public void cutImage(File srcImg, OutputStream output, int x, int y, int width, int height){

cutImage(srcImg, output, new Rectangle(x, y, width, height));

}

public FileData cutImage(File srcImg, String destImgPath, Rectangle rect){

FileData fd = new FileData();

String middledir = "cut_pic/"+SimpleDate.getCurDateLong();//中间路径

File destImg = new File(destImgPath+"/"+middledir);

if(!destImg.exists()){

System.out.println("the dest "+destImgPath+" folder is not exist.");

destImg.mkdirs();

System.out.println("create "+destImgPath+" folder ");

}

String cutFolderPath = destImg.getPath();

try {

if(!destImg.isDirectory()) cutFolderPath = destImg.getParent();

if(!cutFolderPath.endsWith(File.separator)) cutFolderPath = cutFolderPath + File.separator;

String fileName = srcImg.getName();

String suffix = fileName.substring(fileName.lastIndexOf("."));

String newfileName = DEFAULT_CUT_PREVFIX + "_" + new Date().getTime() + suffix;

String outPutFilePath =cutFolderPath+ newfileName;

System.out.println(outPutFilePath);

boolean b = cutImage(srcImg, new FileOutputStream(outPutFilePath), rect);

if (b) {

fd.setTailorPicPath(middledir+"/"+newfileName);

return fd;

}

} catch (FileNotFoundException e) {

System.out.println("the dest "+destImgPath+" is not exist.");

}

return null;

}

/**

*

* @param srcImg 原图片

* @param destImg 存放新生成的图片的文件夹路径

* @param x左上角 x轴坐标

* @param y左上角 y轴坐标

* @param width 宽

* @param height 高

*/

public FileData cutImage(File srcImg, String destImg, int x, int y, int width, int height){

if (!srcImg.exists()) {

return null;

}

return cutImage(srcImg, destImg, new Rectangle(x, y, width, height));

}

/**

*

* @param srcImg 原图片

* @param destImg 存放新生成的图片的文件夹路径

* @param x左上角 x轴坐标

* @param y左上角 y轴坐标

* @param width 宽

* @param height 高

*/

public FileData cutImage(String srcImg, String destImg, int x, int y, int width, int height){

return cutImage(new File(srcImg), destImg, new Rectangle(x, y, width, height));

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值