0

I am trying to split image into 2 parts. I am losing quality. 5 MB images gets divided into 400kB and 500kB parts. To maintain the resolution, it must get divided into 2.5 MB each. Please help. Here is the code below. Please help me.

import java.awt.*;
import java.awt.image.*;
import java.io.File;
import javax.imageio.ImageIO;


public class CutImange {
   public CutImange() {
    try{
       Image image1 = ImageIO.read(new File("G:\\6.jpg"));
       BufferedImage buffered = (BufferedImage) image1;
       BufferedImage b1=buffered.getSubimage(0, 0,(buffered.getWidth()/2), buffered.getHeight());
       File outputfile = new File("G:\\imageq1.jpg");
       ImageIO.write(b1, "jpg", outputfile);
       BufferedImageb2=buffered.getSubimage(buffered.getWidth()/2,0,buffered.getWidth()/2, buffered.getHeight());

       File outputfile1 = new File("G:\\image1.jpg");
       ImageIO.write(b2, "jpg", outputfile1);
 }catch(Exception ex)
    {
        ex.printStackTrace();
    }
}
public static void main(String[] args)
   {
    new CutImange();

   }
 }

I am creating this only for landscape images.

aurelius
  • 3,946
  • 7
  • 40
  • 73
swapnil gandhi
  • 816
  • 1
  • 20
  • 38
  • 2
    I think your problem is the compression of jpg format. http://stackoverflow.com/questions/17108234/setting-jpg-compression-level-with-imageio-in-java – Steffen Feb 11 '15 at 14:38

1 Answers1

0

If anyone get Stuck then this is the complete code for the above problem

    Image image1 = ImageIO.read(new File("D:\\b.jpg"));
    BufferedImage buffered = (BufferedImage) image1;


    JPEGImageWriteParam jpegParams = new JPEGImageWriteParam(null);
    jpegParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
    jpegParams.setCompressionQuality(1f);
    IIORegistry registry = IIORegistry.getDefaultInstance();

    Iterator<ImageWriterSpi> services = registry.getServiceProviders(ImageWriterSpi.class,
                                             new ServiceRegistry.Filter() {   
    @Override
    public boolean filter(Object provider) {
        if (!(provider instanceof ImageWriterSpi)) return false;

        ImageWriterSpi writerSPI = (ImageWriterSpi) provider;
        String[] formatNames = writerSPI.getFormatNames();
        for (int i = 0; i < formatNames.length; i++) {
            if (formatNames[i].equalsIgnoreCase("JPEG")) {
                return true;
            }
        }

        return false;
    }
},
true);
ImageWriterSpi writerSpi = services.next();
ImageWriter writer = writerSpi.createWriterInstance();


writer.setOutput(new FileImageOutputStream(new File("D:\\1.jpg")));



BufferedImage b1=buffered.getSubimage(0, 0, (buffered.getWidth()/2), buffered.getHeight());

writer.write(null, new IIOImage((RenderedImage) b1, null, null), jpegParams);


ImageWriter writer1 = writerSpi.createWriterInstance();
BufferedImage b2=buffered.getSubimage(buffered.getWidth()/2, 0, buffered.getWidth()/2, buffered.getHeight());
writer1.setOutput(new FileImageOutputStream(new File("2.jpg")));

writer1.write(null, new IIOImage((RenderedImage) b2, null, null), jpegParams);
swapnil gandhi
  • 816
  • 1
  • 20
  • 38