У меня есть несколько изображений, и каждое изображение имеет разрешение около 2560x10000, я хочу объединить все эти изображения, чтобы сделать одно изображение. Я не могу использовать метод BufferedImage в качестве конечного изображения, и изображение, которое я должен объединить, будет в памяти, одновременно вызывая OutOfMemory. Поэтому я попробовал использовать нижеприведенный подход:объединить несколько изображений jpeg с низкой или постоянной площадью памяти
public static void joinJpegFiles(File infile, File outfile, float compQuality,int i) {
try {
RenderedImage renderedImage = ImageIO.read(infile);
ImageWriter Iwriter = null;
Iterator iter = ImageIO.getImageWritersByFormatName("jpeg");
if (iter.hasNext()) {
Iwriter = (ImageWriter)iter.next();
}
ImageOutputStream IOStream = ImageIO.createImageOutputStream(outfile);
Iwriter.setOutput(IOStream);
IOStream.seek(IOStream.length());
JPEGImageWriteParam JIWP=new JPEGImageWriteParam(Locale.getDefault());
JIWP.setCompressionMode(ImageWriteParam.MODE_EXPLICIT) ;
JIWP.setCompressionQuality(compQuality);
Iwriter.write(null, new IIOImage(renderedImage,null,null), JIWP);
IOStream.flush();
IOStream.close();
Iwriter.dispose();
} catch (IOException e) {
System.out.println("write error: " + e.getMessage());
}
}
Этот метод предназначен для каждого изображения, к которому я хочу присоединиться.
Проблема с этим подходом заключается в том, что размер конечного изображения увеличивается и равен сумме размеров всех изображений, к которым я присоединился, но только первое изображение отображается, когда я открываю конечное изображение. Я все еще не могу понять, что я делаю неправильно, и я также не смог найти какой-либо пример кода, чтобы присоединиться к jpegs, кроме подхода BufferedImage и ImageIO.write. Я читал в группе новостей, что он работает для формата tiff, но мне нужно, чтобы он работал в форматах jpeg/png.
FYI Я также использовал ** Iwriter.write (-1, новый IIOImage (renderedImage, null, null), JIWP); ** но это вызывает исключение Unsupported Exception. – barry
Вы когда-нибудь решали это? – mwoodman
немного поздно, но я сделал это с помощью [JMagick] (http://sourceforge.net/apps/mediawiki/jmagick/index.php?title=Main_Page), любой, у кого есть эта проблема, должен хотя бы дать ему попробовать , – JosephChilberry