package cn.com;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
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;
/**
* 裁剪图片。总体思想:
*
* 1.前台网页用js得到裁剪图片的id及x,y(宽度和高度)。
*
* 2.服务端根据id取出要裁剪的图片 。
*
* 3.根据这些参数来生成裁剪的图像。
*/
public class CutImage {
// 源图片路径名称。如:c:\\1.jpg
private String srcpath;
// 剪切图片存放路径名称。如:c:\\2.jpg
private String subpath;
// 剪切点x坐标
private int x;
private int y;
// 剪切图片宽度
private int width;
private int height;
public CutImage() {
}
public CutImage(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
/**
* 裁剪图片,并保存裁剪完的新图片 。
*/
public void cut() throws IOException {
FileInputStream is = null;
ImageInputStream iis = null;
try {
// 读取图片文件
is = new FileInputStream(srcpath);
// 图片后缀
String suffix = srcpath.substring(srcpath.lastIndexOf(".") + 1);
/*
* 返回包含所有当前已注册 ImageReader 的 Iterator,这些 ImageReader 声称能够解码指定格式。
* 参数:formatName - 包含非正式格式名称 . (例如 "jpeg" 或 "tiff")等 。
*/
Iterator<ImageReader> it = ImageIO
.getImageReadersByFormatName(suffix);
ImageReader reader = it.next();
// 获取图片流
iis = ImageIO.createImageInputStream(is);
/*
* <p>iis:读取源。true:只向前搜索 </p>.将它标记为 ‘只向前搜索’。
* 此设置意味着包含在输入源中的图像将只按顺序读取,可能允许 reader 避免缓存包含与以前已经读取的图像关联的数据的那些输入部分。
*/
reader.setInput(iis, true);
/*
* 描述如何对流进行解码的类<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, suffix, new File(subpath));
} finally {
if (is != null)
is.close();
if (iis != null)
iis.close();
}
}
public String getSrcpath() {
return srcpath;
}
public void setSrcpath(String srcpath) {
"http://blog.51cto.com/viewpic.php?refimg=" + this.srcpath = srcpath;
}
public String getSubpath() {
return subpath;
}
public void setSubpath(String subpath) {
this.subpath = subpath;
}
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;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public static void main(String[] args) throws Exception {
CutImage o = new CutImage(100, 100, 50, 50);
String name = "d:\\HuNan.jpg";
o.setSrcpath(name);
o.setSubpath("d:\\test2.jpg");
o.cut();
}
}
分享到:
相关推荐
在Java编程中,上传并裁剪图片是一项常见的需求,尤其在Web应用中,例如用户头像设置、商品图片处理等场景。本篇文章将详细介绍如何在Java环境中实现这一功能。 首先,图片上传通常涉及到客户端(如浏览器)与...
在用户通过JCrop选择裁剪区域后,可以将裁剪参数发送到服务器,然后在Java端根据这些参数裁剪图像。 五、Java和JCrop结合使用 1. 前端交互:在HTML页面上使用JCrop设置裁剪区域,获取裁剪的坐标和比例。 2. 数据...
在Java编程中,图片处理是一项常见的任务,包括图片的上传、尺寸控制、宽高调整以及裁剪和保存等操作。这些功能在Web应用、图像处理软件或者数据分析项目中都有广泛的应用。下面我们将深入探讨如何使用Java实现这些...
【Java Servlet版图片裁剪】技术是Web开发中一种实现图像处理的方式,它结合了Java Servlet、AJAX和JCrop库,提供了用户友好的图片裁剪功能。在本项目中,开发者利用Servlet作为服务器端的核心处理组件,处理来自...
裁剪部分,可以通过解析用户提供的坐标和尺寸信息,动态地裁剪图片。如果使用了图像处理库,它们通常提供了方便的API来实现这一过程。 5. **响应返回**: 完成裁剪后,服务器需要将结果反馈给客户端。这可能是一个...
总的来说,"jQuery Crop+Java 裁剪上传图片"项目涵盖了前端交互设计、图片处理算法、异步通信以及服务器端的安全处理等多个IT领域的知识点,是学习和实践Web开发技术的一个很好的实例。通过这个项目,开发者可以深入...
在开发Web应用时,用户头像的上传与裁剪功能是一项常见的需求,它允许用户个性化地选择并调整自己的展示图片。本项目名为“头像上传-裁剪-JAVA”,是基于JAVA实现的一个功能模块,主要涉及到的技术点包括文件上传、...
- **后端缩放**:在服务器端,可以使用Java的图像处理库,如`ImageIO`或`JavaFX`,根据指定尺寸重新调整图片大小。 5. **Java实现** - **Servlet处理**:Java Web应用通常使用Servlet来接收上传的文件,解析`...
例如,你可以这样裁剪图片: ```javascript cropper.crop(); ``` 并可以获取裁剪的坐标和大小: ```javascript var data = cropper.getData(); ``` 这些数据可以发送到后端,以便在Java环境中进行进一步的处理。 在...
总的来说,"jsp+CropZoom+jquery+java 图片缩放裁剪"项目是一个结合了前后端技术的实例,展示了如何在Web应用中实现实用的图像裁剪功能。对于学习Java Web开发和图像处理的开发者来说,这是一个很好的实践案例。
在服务器端,Java承担了接收上传文件和处理图像的任务。在Java中,我们可以使用Apache Commons FileUpload库处理HTTP请求中的多部分数据,接收用户上传的图像文件。例如,创建一个Servlet来处理上传请求,解析`Part`...
总结,JSP 可视化裁剪图片的实现涉及到前端的HTML5、CSS3、JavaScript(JQuery和JQuery UI)、Canvas技术,以及后端的Java处理和文件存储。整个过程需要综合运用多种技术,确保用户体验流畅、安全且高效。
在IT行业中,图片剪切和预览功能是常见的需求,特别是在网页应用和图像处理系统中。...通过这些技术的结合,可以构建出一个完整的图片剪切预览和处理系统,满足用户在网页上自由裁剪图片并实时预览的需求。
服务器接收到这些坐标后,会用它们来裁剪图片。 在Java中,我们可以使用Apache Commons Imaging库或者Java的内置`BufferedImage`类来进行裁剪。以下是一个使用`BufferedImage`的例子: ```java public ...
Java Advanced Imaging提供了一系列高级图像处理操作,如旋转、缩放、裁剪等,但并不直接支持摄像头访问。JavaFX,作为Java的现代UI库,提供了Media类,可以用于播放、暂停、停止媒体,包括摄像头流。通过`javafx....
在这个例子中,`Scalr.crop()`方法用于裁剪图片,参数分别表示源图像、起始x坐标、起始y坐标、目标宽度和高度。 总的来说,Java提供了丰富的工具和库来处理图片上传、预览和剪切。通过结合使用这些工具,我们可以...
"JSP可视化裁剪图片"就是解决这个问题的一种技术方案,它允许用户在上传大尺寸图片后进行可视化的裁剪操作,确保图片大小符合预设的需求。接下来,我们将详细探讨这个主题。 1. **JSP基础**: JSP(JavaServer ...
在Java开发中,头像上传、缩放和裁剪功能是一项常见的需求,特别是在社交网络、论坛或者个人资料管理系统中。这个java版的头像上传裁剪功能是针对.NET版本的一个补充,提供了完整的Java实现方案。下面我们将详细探讨...
通过以上这些知识点,我们可以构建一个完整的Java后台图片裁剪系统,实现用户上传图片后,服务器端进行裁剪并返回裁剪后的结果。在实际开发中,可能还需要考虑如何将裁剪后的图像保存回服务器,以及如何将结果反馈给...
在Java开发中,图片上传、删除和预览是常见的功能需求,尤其是在Web应用中。这里我们探讨的是如何利用Java和layui插件实现这些功能,并通过POST方法将数据提交到服务端。layui是一款流行的前端UI框架,它提供了丰富...