java开发_图片截取工具实现原理

怪小孩狂奔

怪小孩狂奔

2016-02-19 11:35

下面请跟着图老师小编一起来了解下java开发_图片截取工具实现原理,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

先来看看效果:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

测试一:

原图:

效果图:

测试二:

原图:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

效果图:

代码部分:代码如下:

/**
*
*/
package com.b510;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
/**
* @date 2012-11-26
* @author xhw
*
*/
public class ImageCut {
/**
* 源图片路径名称如:c:1.jpg
*/
private String srcpath = "e:/poool.jpg";
/**
* 剪切图片存放路径名称.如:c:2.jpg
*/
private String subpath = "e:/pool_end";
/**
* jpg图片格式
*/
private static final String IMAGE_FORM_OF_JPG = "jpg";
/**
* png图片格式
*/
private static final String IMAGE_FORM_OF_PNG = "png";
/**
* 剪切点x坐标
*/
private int x;
/**
* 剪切点y坐标
*/
private int y;
/**
* 剪切点宽度
*/
private int width;
/**
* 剪切点高度
*/
private int height;
public ImageCut() {
}
public ImageCut(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
public static void main(String[] args) throws Exception {
ImageCut imageCut = new ImageCut(134, 0, 366, 366);
imageCut.cut(imageCut.getSrcpath(), imageCut.getSubpath());
}
/**
* 返回包含所有当前已注册 ImageReader 的 Iterator,这些 ImageReader 声称能够解码指定格式。
* 参数:formatName - 包含非正式格式名称 .(例如 "jpeg" 或 "tiff")等 。
*
* @param postFix
* 文件的后缀名
* @return
*/
public IteratorImageReader getImageReadersByFormatName(String postFix) {
switch (postFix) {
case IMAGE_FORM_OF_JPG:
return ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_JPG);
case IMAGE_FORM_OF_PNG:
return ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_PNG);
default:
return ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_JPG);
}
}
/**
* 对图片裁剪,并把裁剪完蛋新图片保存 。
* @param srcpath 源图片路径
* @param subpath 剪切图片存放路径
* @throws IOException
*/
public void cut(String srcpath, String subpath) throws IOException {
FileInputStream is = null;
ImageInputStream iis = null;
try {
// 读取图片文件
is = new FileInputStream(srcpath);
// 获取文件的后缀名
String postFix = getPostfix(srcpath);
System.out.println("图片格式为:" + postFix);
/*
* 返回包含所有当前已注册 ImageReader 的 Iterator,这些 ImageReader 声称能够解码指定格式。
* 参数:formatName - 包含非正式格式名称 .(例如 "jpeg" 或 "tiff")等 。
*/
IteratorImageReader it = getImageReadersByFormatName(postFix);
ImageReader reader = it.next();
// 获取图片流
iis = ImageIO.createImageInputStream(is);
/*
* piis:读取源.true:只向前搜索 /p.将它标记为 ‘只向前搜索'。
* 此设置意味着包含在输入源中的图像将只按顺序读取,可能允许 reader 避免缓存包含与以前已经读取的图像关联的数据的那些输入部分。
*/
reader.setInput(iis, true);
/*
* p描述如何对流进行解码的类p.用于指定如何在输入时从 Java Image I/O
* 框架的上下文中的流转换一幅图像或一组图像。用于特定图像格式的插件 将从其 ImageReader 实现的
* getDefaultReadParam 方法中返回 ImageReadParam 的实例。
*/
ImageReadParam param = reader.getDefaultReadParam();
/*
* 图片裁剪区域。Rectangle 指定了坐标空间中的一个区域,通过 Rectangle 对象
* 的左上顶点的坐标(x,y)、宽度和高度可以定义这个区域。
*/
Rectangle rect = new Rectangle(x, y, width, height);
// 提供一个 BufferedImage,将其用作解码像素数据的目标。
param.setSourceRegion(rect);
/*
* 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象,并将 它作为一个完整的
* BufferedImage 返回。
*/
BufferedImage bi = reader.read(0, param);
// 保存新图片
ImageIO.write(bi, postFix, new File(subpath + "_" + new Date().getTime() + "." + postFix));
} finally {
if (is != null)
is.close();
if (iis != null)
iis.close();
}
}
/**
* 获取inputFilePath的后缀名,如:"e:/test.pptx"的后缀名为:"pptx"br
*
* @param inputFilePath
* @return
*/
public String getPostfix(String inputFilePath) {
return inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1);
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public String getSrcpath() {
return srcpath;
}
public void setSrcpath(String srcpath) {
this.srcpath = srcpath;
}
public String getSubpath() {
return subpath;
}
public void setSubpath(String subpath) {
this.subpath = subpath;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}

展开更多 50%)
分享

猜你喜欢

java开发_图片截取工具实现原理

编程语言 网络编程
java开发_图片截取工具实现原理

开发工具:Java规则引擎工作原理及应用

编程语言 网络编程
开发工具:Java规则引擎工作原理及应用

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Java开发工具与开发环境问答

编程语言 网络编程
Java开发工具与开发环境问答

Java开发工具配置 UltraEdit

编程语言 网络编程
Java开发工具配置 UltraEdit

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Java开发工具包

编程语言 网络编程
Java开发工具包

利用Stripes实现Java Web开发

编程语言 网络编程
利用Stripes实现Java Web开发

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

三步骤轻松解决开机显示NTLDR is mis的问题

三步骤轻松解决开机显示NTLDR is mis的问题

java abstract class interface之间的区别介绍

java abstract class interface之间的区别介绍
下拉加载更多内容 ↓