java 将图像分成两部分会降低质量

java Split images into 2 parts loses quality

我正在尝试将图像分成两部分。我正在失去质量。 5 MB 的图像被分成 400kB 和 500kB 的部分。为了保持分辨率,它必须分成 2.5 MB 每个。请帮忙。这是下面的代码。请帮我。

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

   }
 }

我只为 风景 图片创建这个。

如果有人卡住了那么这是上述问题的完整代码

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