java图片裁剪

总体思想:

    1.前台网页用js得到裁剪图片的id及x,y,宽度和高度。

    2.服务端根据id取出要裁剪的图片 。

   3.根据这些参数来生成裁剪的图像。 


[代码] java图片裁剪

view sourceprint?
001 package com.wodexiangce;
002
003 import java.awt.Rectangle;
004
005 import java.awt.image.BufferedImage;
006
007 import java.io.File;
008
009 import java.io.FileInputStream;
010
011 import java.io.IOException;
012
013 import java.util.Iterator;
014
015 import javax.imageio.ImageIO;
016
017 import javax.imageio.ImageReadParam;
018
019 import javax.imageio.ImageReader;
020
021 import javax.imageio.stream.ImageInputStream;
022
023 /**
024  *
025  * 2012-10-25
026  *
027  */
028
029 public class OperateImage {
030
031     // ===源图片路径名称如:c:\1.jpg
032
033     private String srcpath;
034
035     // ===剪切图片存放路径名称。如:c:\2.jpg
036
037     private String subpath;
038
039     // ===剪切点x坐标
040
041     private int x;
042
043     private int y;
044
045     // ===剪切点宽度
046
047     private int width;
048
049     private int height;
050
051     public OperateImage() {
052
053     }
054
055     public OperateImage(int x, int y, int width, int height) {
056
057         this.x = x;
058
059         this.y = y;
060
061         this.width = width;
062
063         this.height = height;
064
065     }
066
067     /**
068      *
069      * 对图片裁剪,并把裁剪完的新图片保存 。
070      *
071      */
072
073     public void cut() throws IOException {
074
075         FileInputStream is = null;
076
077         ImageInputStream iis = null;
078
079         try {
080
081             // 读取图片文件
082
083             is = new FileInputStream(srcpath);
084
085             /**
086              *
087              * 返回包含所有当前已注册 ImageReader 的 Iterator,这些 ImageReader
088              *
089              * 声称能够解码指定格式。 参数:formatName - 包含非正式格式名称 .
090              *
091              * (例如 "jpeg" 或 "tiff")等 。
092              *
093              */
094
095             Iterator<ImageReader> it = ImageIO
096                     .getImageReadersByFormatName(" jpg ");
097
098             ImageReader reader = it.next();
099
100             // 获取图片流
101
102             iis = ImageIO.createImageInputStream(is);
103
104             /**
105              *
106              * <p>
107              * iis:读取源。true:只向前搜索
108              * </p>
109              * .将它标记为 ‘只向前搜索’。
110              *
111              * 此设置意味着包含在输入源中的图像将只按顺序读取,可能允许 reader
112              *
113              * 避免缓存包含与以前已经读取的图像关联的数据的那些输入部分。
114              *
115              */
116
117             reader.setInput(iis, true);
118
119             /**
120              *
121              * <p>
122              * 描述如何对流进行解码的类
123              * <p>
124              * .用于指定如何在输入时从 Java Image I/O
125              *
126              * 框架的上下文中的流转换一幅图像或一组图像。用于特定图像格式的插件
127              *
128              * 将从其 ImageReader 实现的 getDefaultReadParam 方法中返回
129              *
130              * ImageReadParam 的实例。
131              *
132              */
133
134             ImageReadParam param = reader.getDefaultReadParam();
135
136             /**
137              *
138              * 图片裁剪区域。Rectangle 指定了坐标空间中的一个区域,通过 Rectangle 对象
139              *
140              * 的左上顶点的坐标(x,y)、宽度和高度可以定义这个区域。
141              *
142              */
143
144             Rectangle rect = new Rectangle(x, y, width, height);
145
146             // 提供一个 BufferedImage,将其用作解码像素数据的目标。
147
148             param.setSourceRegion(rect);
149
150             /**
151              *
152              * 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象,并将
153              *
154              * 它作为一个完整的 BufferedImage 返回。
155              *
156              */
157
158             BufferedImage bi = reader.read(0, param);
159
160             // 保存新图片
161
162             ImageIO.write(bi, " jpg ", new File(subpath));
163
164         } finally {
165
166             if (is != null)
167
168                 is.close();
169
170             if (iis != null)
171
172                 iis.close();
173
174         }
175
176     }
177
178     public int getHeight() {
179
180         return height;
181
182     }
183
184     public void setHeight(int height) {
185
186         this.height = height;
187
188     }
189
190     public String getSrcpath() {
191
192         return srcpath;
193
194     }
195
196     public void setSrcpath(String srcpath) {
197
198         this.srcpath = srcpath;
199
200     }
201
202     public String getSubpath() {
203
204         return subpath;
205
206     }
207
208     public void setSubpath(String subpath) {
209
210         this.subpath = subpath;
211
212     }
213
214     public int getWidth() {
215
216         return width;
217
218     }
219
220     public void setWidth(int width) {
221
222         this.width = width;
223
224     }
225
226     public int getX() {
227
228         return x;
229
230     }
231
232     public void setX(int x) {
233
234         this.x = x;
235
236     }
237
238     public int getY() {
239
240         return y;
241
242     }
243
244     public void setY(int y) {
245
246         this.y = y;
247
248     }
249
250     public static void main(String[] args) throws Exception {
251
252         String name = " d:\2005121210161588950.jpg ";
253
254         OperateImage o = new OperateImage(100, 100, 100, 100);
255
256         o.setSrcpath(name);
257
258         o.setSubpath(" D:\2.jpg ");
259
260         o.cut();
261
262     }
263
264 }

你可能感兴趣的:(java图片裁剪)