KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > openedit > modules > image > ImageCrop


1 /*
2  * Created on Jun 6, 2006
3  */

4 package com.openedit.modules.image;
5
6 import java.awt.Graphics2D JavaDoc;
7 import java.awt.Rectangle JavaDoc;
8 import java.awt.RenderingHints JavaDoc;
9 import java.awt.image.BufferedImage JavaDoc;
10 import java.io.File JavaDoc;
11 import java.io.FileInputStream JavaDoc;
12 import java.io.FileOutputStream JavaDoc;
13 import java.io.InputStream JavaDoc;
14 import java.io.OutputStream JavaDoc;
15
16 import javax.imageio.ImageIO JavaDoc;
17
18 import org.openedit.repository.InputStreamItem;
19
20 import com.openedit.page.Page;
21 import com.openedit.page.manage.PageManager;
22 import com.openedit.users.User;
23 import com.openedit.util.FileUtils;
24 import com.openedit.util.PathUtilities;
25
26 public class ImageCrop
27 {
28     protected Rectangle JavaDoc fieldRange;
29     protected PageManager fieldPageManager;
30     
31     public Rectangle JavaDoc getRange()
32     {
33         return fieldRange;
34     }
35
36     public void setRange(Rectangle JavaDoc inRange)
37     {
38         fieldRange = inRange;
39     }
40     public void setRange( int inX, int inY, int inWidth, int inHeight)
41     {
42         setRange(new Rectangle JavaDoc(inX, inY, inWidth, inHeight));
43     }
44     public void crop( String JavaDoc inPath, User inUser, String JavaDoc inMessage ) throws Exception JavaDoc
45     {
46         Page input = getPageManager().getPage(inPath);
47         if ( input.exists() )
48         {
49             InputStream JavaDoc in = null;
50             OutputStream JavaDoc out = null;
51             File JavaDoc tmp = File.createTempFile("crop", "image");
52             try
53             {
54                 in = input.getContentItem().getInputStream();
55                 BufferedImage JavaDoc origImage = ImageIO.read(in);
56                 BufferedImage JavaDoc done = crop(origImage);
57                 String JavaDoc type = PathUtilities.extractPageType(inPath);
58                 out = new FileOutputStream JavaDoc( tmp );
59                 ImageIO.write(done, type, out);
60             }
61             finally
62             {
63                 FileUtils.safeClose(in);
64                 FileUtils.safeClose(out);
65             }
66             InputStreamItem item = new InputStreamItem();
67             item.setAuthor(inUser.getUserName());
68             item.setMessage(inMessage);
69             item.setPath(inPath);
70             item.setInputStream(new FileInputStream JavaDoc(tmp));
71             item.setMakeVersion(true);
72             input.setContentItem(item);
73             getPageManager().putPage(input);
74             tmp.delete();
75         }
76     }
77     public BufferedImage JavaDoc crop(BufferedImage JavaDoc inImage)
78     {
79         //BufferedImage origImage = ImageIO.read( inInImageFile );
80

81         int x = Math.max(0, (int)getRange().getX());
82         int y = Math.max(0, (int)getRange().getY());
83
84         int w = Math.min((int)getRange().getWidth(), inImage.getWidth() - x );
85         int h = Math.min((int)getRange().getHeight(), inImage.getHeight() - y);
86         
87
88         x = Math.min(inImage.getWidth(), x);
89         y = Math.min(inImage.getHeight(), y );
90
91         BufferedImage JavaDoc crop = inImage.getSubimage(x,y,w, h);
92         return crop;
93     }
94
95     public PageManager getPageManager()
96     {
97         return fieldPageManager;
98     }
99
100     public void setPageManager(PageManager inPageManager)
101     {
102         fieldPageManager = inPageManager;
103     }
104
105     public void setRange(String JavaDoc inX, String JavaDoc inY, String JavaDoc inWidth, String JavaDoc inHeight)
106     {
107         setRange(Integer.parseInt(inX),Integer.parseInt(inY),Integer.parseInt(inWidth),Integer.parseInt(inHeight) );
108     }
109
110     public void resize(String JavaDoc inEditPath, User inUser, String JavaDoc inMessage) throws Exception JavaDoc
111     {
112         Page input = getPageManager().getPage(inEditPath);
113         if ( input.exists() )
114         {
115             InputStream JavaDoc in = null;
116             OutputStream JavaDoc out = null;
117             File JavaDoc tmp = File.createTempFile("resize", "image");
118             try
119             {
120                 in = input.getContentItem().getInputStream();
121                 BufferedImage JavaDoc origImage = ImageIO.read(in);
122
123                 BufferedImage JavaDoc scaledImage = new BufferedImage JavaDoc( getRange().width,
124                     getRange().height, BufferedImage.TYPE_INT_RGB );
125                 Graphics2D JavaDoc scaledGraphics = scaledImage.createGraphics();
126                 scaledGraphics.setRenderingHint( RenderingHints.KEY_INTERPOLATION,
127                     RenderingHints.VALUE_INTERPOLATION_BICUBIC);
128                 scaledGraphics.drawImage( origImage, 0, 0, getRange().width,
129                     getRange().height, null );
130
131                 String JavaDoc type = PathUtilities.extractPageType(inEditPath);
132                 out = new FileOutputStream JavaDoc( tmp );
133                 ImageIO.write(scaledImage, type, out);
134             }
135             finally
136             {
137                 FileUtils.safeClose(in);
138                 FileUtils.safeClose(out);
139             }
140             InputStreamItem item = new InputStreamItem();
141             item.setAuthor(inUser.getUserName());
142             item.setMessage(inMessage);
143             item.setPath(inEditPath);
144             item.setInputStream(new FileInputStream JavaDoc(tmp));
145             item.setMakeVersion(true);
146             input.setContentItem(item);
147             getPageManager().putPage(input);
148             tmp.delete();
149         }
150         
151     }
152 }
153
Popular Tags