1 4 package com.openedit.modules.image; 5 6 import java.awt.Graphics2D ; 7 import java.awt.Rectangle ; 8 import java.awt.RenderingHints ; 9 import java.awt.image.BufferedImage ; 10 import java.io.File ; 11 import java.io.FileInputStream ; 12 import java.io.FileOutputStream ; 13 import java.io.InputStream ; 14 import java.io.OutputStream ; 15 16 import javax.imageio.ImageIO ; 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 fieldRange; 29 protected PageManager fieldPageManager; 30 31 public Rectangle getRange() 32 { 33 return fieldRange; 34 } 35 36 public void setRange(Rectangle inRange) 37 { 38 fieldRange = inRange; 39 } 40 public void setRange( int inX, int inY, int inWidth, int inHeight) 41 { 42 setRange(new Rectangle (inX, inY, inWidth, inHeight)); 43 } 44 public void crop( String inPath, User inUser, String inMessage ) throws Exception 45 { 46 Page input = getPageManager().getPage(inPath); 47 if ( input.exists() ) 48 { 49 InputStream in = null; 50 OutputStream out = null; 51 File tmp = File.createTempFile("crop", "image"); 52 try 53 { 54 in = input.getContentItem().getInputStream(); 55 BufferedImage origImage = ImageIO.read(in); 56 BufferedImage done = crop(origImage); 57 String type = PathUtilities.extractPageType(inPath); 58 out = new FileOutputStream ( 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 (tmp)); 71 item.setMakeVersion(true); 72 input.setContentItem(item); 73 getPageManager().putPage(input); 74 tmp.delete(); 75 } 76 } 77 public BufferedImage crop(BufferedImage inImage) 78 { 79 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 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 inX, String inY, String inWidth, String inHeight) 106 { 107 setRange(Integer.parseInt(inX),Integer.parseInt(inY),Integer.parseInt(inWidth),Integer.parseInt(inHeight) ); 108 } 109 110 public void resize(String inEditPath, User inUser, String inMessage) throws Exception 111 { 112 Page input = getPageManager().getPage(inEditPath); 113 if ( input.exists() ) 114 { 115 InputStream in = null; 116 OutputStream out = null; 117 File tmp = File.createTempFile("resize", "image"); 118 try 119 { 120 in = input.getContentItem().getInputStream(); 121 BufferedImage origImage = ImageIO.read(in); 122 123 BufferedImage scaledImage = new BufferedImage ( getRange().width, 124 getRange().height, BufferedImage.TYPE_INT_RGB ); 125 Graphics2D 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 type = PathUtilities.extractPageType(inEditPath); 132 out = new FileOutputStream ( 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 (tmp)); 145 item.setMakeVersion(true); 146 input.setContentItem(item); 147 getPageManager().putPage(input); 148 tmp.delete(); 149 } 150 151 } 152 } 153 | Popular Tags |