java将图像拆分为2个部分会失去质量

时间:2015-02-11 12:45:31

标签: java image-processing

我试图将图像分成两部分。我正在失去品质。 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();

   }
 }

我只为横向图片创建此内容。

1 个答案:

答案 0 :(得分:0)

如果有人得到Stuck,那么这就是上述问题的完整代码

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