0

I want to resize the image by giving pixels explicitly from out side.Here I am able to compress the image by hard coding by specifying compression quality.

I need to resize by explicit height and width too

Here I compressed the image by using this code:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;

import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ImageServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public ImageServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        File f = new File("D:\\Compress");
        File f1 = new File("D:\\Original");
        if (!f.exists()) {
            f.mkdir();
        }
        if (!f1.exists()) {
            f1.mkdir();
        }
        String p = req.getParameter("myfile");
        String actualPath = "D:/Original/" + p;
        /*
         * System.out.println(p); File file = new File(p); String s=
         * file.getCanonicalPath(); System.out.println(s);
         */
        File imageFile = new File(actualPath);
        File compressedImageFile = new File("D://Compress/compressed_" + p + ".jpg");
        InputStream is = new FileInputStream(imageFile);
        OutputStream os = new FileOutputStream(compressedImageFile);
        float quality = 0.3f;

        // create a BufferedImage as the result of decoding the supplied
        // InputStream
        //reads image
        BufferedImage image = ImageIO.read(is);

        // get all image writers for JPG format
        Iterator writers = (Iterator) ImageIO.getImageWritersByFormatName("jpg");

        // checks the format
        java.util.Iterator<ImageWriter> iterator = (java.util.Iterator<ImageWriter>) writers;
        if (!iterator.hasNext())
            throw new IllegalStateException("No writers found");


        ImageWriter writer = (ImageWriter) ((java.util.Iterator<ImageWriter>) writers).next();
        //sends to output stream
        ImageOutputStream ios = ImageIO.createImageOutputStream(os);
        writer.setOutput(ios);
        ImageWriteParam param = writer.getDefaultWriteParam();

        // compress to a given quality
        param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        param.setCompressionQuality(quality);

        // appends a complete image stream containing a single image and
        // associated stream and image metadata and thumbnails to the output
        writer.write(null, new IIOImage(image, null, null), param);

        // close all streams
        is.close();
        os.close();
        ios.close();
        writer.dispose();

        // redirect to success page
        resp.sendRedirect("./Success.html");

    }

}

So code this working fine but its only resizing (means converting 43kb image file to 23kb) the image size. Here I want to change the hieght and width of image.

Thanks in advance.

  • Landed [here](http://www.mkyong.com/java/how-to-resize-an-image-in-java/) With a simple google search , – user3505725 Jul 25 '14 at 10:55
  • As an [example](http://stackoverflow.com/questions/11959758/java-maintaining-aspect-ratio-of-jpanel-background-image/11959928#11959928) and [example](http://stackoverflow.com/questions/14115950/quality-of-image-after-resize-very-low-java/14116752#14116752) – MadProgrammer Jul 25 '14 at 11:17

0 Answers0