我试图将图像分成两部分。我正在失去品质。 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();
}
}
我只为横向图片创建此内容。
答案 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);