无法使用循环合并Java图像
我试图在下面的代码中合并图像,但最终的图像只有最后一个图像在输出中。 使用for循环,我尝试将多个图像添加到单个图像中。 请告知无法使用循环合并Java图像,java,Java,我试图在下面的代码中合并图像,但最终的图像只有最后一个图像在输出中。 使用for循环,我尝试将多个图像添加到单个图像中。 请告知 package imageMerge; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.*; import javax.imageio.ImageIO; public class Merge { public static void main(St
package imageMerge;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
public class Merge {
public static void main(String[] args) {
final File folder = new File("images");
Merge m=new Merge();
m.processFiles(folder);
}
public void processFiles(final File folder) {
String filename="";
BufferedImage c=null;
try {
int i=1;
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isFile() && !fileEntry.getName().contains("final")) {
filename=fileEntry.getName();
c = new BufferedImage(5000, 5000, BufferedImage.TYPE_INT_ARGB);
Graphics g = c.getGraphics();
System.out.println(filename);
BufferedImage a = ImageIO.read(new File("D:\\images\\"+filename));
System.out.println(a.getHeight());
c.createGraphics().drawImage(a, 0, 0, null);
i+=1;
}
}
ImageIO.write( c, "png", new File ( "D:\\images\\final.png" ));
} catch (Exception e) {
e.printStackTrace();
}
}
}
如评论所述,有几个问题:
yPosition
此处)跟踪当前y位置新文件
,文件条目
已经是所需的文件
对象import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class Merge {
public static void main(final String[] args) {
final File folder = new File("D:\\images");
Merge m = new Merge();
m.processFiles(folder);
}
public void processFiles(final File folder) {
String filename = "";
BufferedImage c = new BufferedImage(5000, 5000, BufferedImage.TYPE_INT_ARGB);
Graphics g = c.createGraphics(); // 1)
int yPosition = 0; // 2)
try {
int i = 1;
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isFile() && !fileEntry.getName().contains("final")) {
filename = fileEntry.getName();
System.out.println(filename);
BufferedImage a = ImageIO.read(fileEntry); // 3)
System.out.println(a.getHeight());
g.drawImage(a, 0, yPosition, null); // 2)
yPosition = yPosition + a.getHeight(); // 2)
i += 1;
}
}
ImageIO.write(c, "png", new File("D:\\images\\final.png"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
始终在同一位置绘制图像:0,0在循环的每次迭代中创建一个新的
buffereImage
,覆盖上一个循环。你需要在循环之外创建它,并在每次迭代中向它添加图像。谢谢@NoeXWolf,我正在尝试一个接一个地垂直添加图像。你能帮我写代码吗?。我不知道如何为下一个项目的位置获得正确的x,y值谢谢你的代码。它可以工作,但图像不会一个接一个地出现。相反,它是相互叠加的。您是否添加了yPosition=yPosition+a.getHeight()代码>?因为这应该可以解决问题。谢谢,我能够生成它。现在的问题是生成的最终图像看起来非常小,即使大小正确。有没有解决方法?运行此代码时,最终图像中的图像都保持了原始大小,可以尝试使用其他软件(例如Paint)打开图像。