2010-12-15 16 views

Odpowiedz

9

Tego rodzaju pytanie zostało udzielone kilka razy na tej stronie. Sugeruję wypróbowanie How to resize the original image into a common size of image in Java? lub wyszukaj rozmiar obrazu java na tej stronie.

+0

właściwie mówiłem o rozmiarze pliku (3mb -> 200 kb), a nie o wymiarach obrazu. Czy to także je obejmuje? – Anand

+0

Tak, jest to ten sam rodzaj - rozmiar pliku jest określany głównie przez wymiary obrazu (i potencjalnie kompresję obrazu, w zależności od używanego formatu) –

1
/* 
* This will get an image file and returns a byte array resized by the given value. 
*/ 
package tajneed; 

import java.awt.image.BufferedImage; 
import java.io.ByteArrayOutputStream; 
import java.io.File; 
import javax.imageio.ImageIO; 
import org.imgscalr.Scalr; 

public class ImageResizer { 

    public static byte[] resize(File icon) { 
     try { 
      BufferedImage originalImage = ImageIO.read(icon); 

      originalImage= Scalr.resize(originalImage, Scalr.Method.QUALITY, Scalr.Mode.FIT_EXACT, 128, 153); 
      //To save with original ratio uncomment next line and comment the above. 
      //originalImage= Scalr.resize(originalImage, 153, 128); 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      ImageIO.write(originalImage, "jpg", baos); 
      baos.flush(); 
      byte[] imageInByte = baos.toByteArray(); 
      baos.close(); 
      return imageInByte; 
     } catch (Exception e) { 
      return null; 
     } 


    } 
} 
1

Poniższy kod pomoże ci zmienić rozmiar i zachować jakość obrazu.

protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { 
     boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
      if (!isMultipart) { 
      } else { 
       FileItemFactory factory = new DiskFileItemFactory(); 
       ServletFileUpload upload = new ServletFileUpload(factory); 
       List items = null; 
       try { 
        items = upload.parseRequest(request); 
       } catch (FileUploadException e) { 
        System.out.println("Unable to load image" + e.getMessage());} 
       Iterator itr = items.iterator(); 
       while(itr.hasNext()) { 
        System.out.println(items.size()); 
         FileItem item = (FileItem) itr.next(); 
         if (!item.isFormField()) { 
          try { 
           int size = 200;// size of the new image. 
           //take the file as inputstream. 
           InputStream imageStream = item.getInputStream(); 
           //read the image as a BufferedImage. 
           BufferedImage image = javax.imageio.ImageIO.read(imageStream); 
           //cal the sacleImage method. 
           BufferedImage newImage = scaleImage(image, size); 
           String path = getServletContext().getRealPath("/image"); 
           //write file. 
           File file = new File(path, "testimage.jpg"); 
           ImageIO.write(newImage, "JPG", file); 
          } catch (Exception e) { 
           System.out.println("Unable to save the image" + e.getMessage()); 
           //System.out.println(path); 
        }//if 
       }//iter 
     } 
    private BufferedImage scaleImage(BufferedImage bufferedImage, int size) { 
     double boundSize = size; 
      int origWidth = bufferedImage.getWidth(); 
      int origHeight = bufferedImage.getHeight(); 
      double scale; 
      if (origHeight > origWidth) 
       scale = boundSize/origHeight; 
      else 
       scale = boundSize/origWidth; 
      //* Don't scale up small images. 
      if (scale > 1.0) 
       return (bufferedImage); 
      int scaledWidth = (int) (scale * origWidth); 
      int scaledHeight = (int) (scale * origHeight); 
      Image scaledImage = bufferedImage.getScaledInstance(scaledWidth, scaledHeight, Image.SCALE_SMOOTH); 
      // new ImageIcon(image); // load image 
      // scaledWidth = scaledImage.getWidth(null); 
      // scaledHeight = scaledImage.getHeight(null); 
      BufferedImage scaledBI = new BufferedImage(scaledWidth, scaledHeight, BufferedImage.TYPE_INT_RGB); 
      Graphics2D g = scaledBI.createGraphics(); 
       g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
      g.drawImage(scaledImage, 0, 0, null); 
      g.dispose(); 
      return (scaledBI); 
    } 
Powiązane problemy