8
votes

Comment réduire la taille du fichier image en Java

Je veux réduire la taille du fichier image d'une image téléchargée avant de l'enregistrer dans le serveur (pour réduire le temps de chargement). Comment puis-je le faire en utilisant Java?


1 commentaires

Vous pouvez enregistrer l'image dans un format compressé tel que JPEG ou PNG.


3 Réponses :


10
votes

Ce type de question a été répondu à plusieurs reprises sur ce site. Je vous suggère de vérifier Comment redimensionner l'image d'origine dans une taille d'image courante en Java? ou rechercher Java image redimensionner sur ce site.


2 commentaires

En fait, je parlais de la taille du fichier (3MB -> 200kb), pas les dimensions de l'image. Cela les couvre-t-il aussi?


Oui, c'est le même genre de chose - la taille du fichier est principalement définie par les dimensions de l'image (et potentiellement la compression d'image, en fonction du format utilisé)



1
votes
/*
 * 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;
        }


    }
}

0 commentaires

2
votes

Que ce code suivant vous aide à redimensionnera et à conserver la qualité de l'image.

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);
    }


0 commentaires