JAva合成画像は複数の横方向または縦方向を合成する
30209 ワード
JAvaピクチャ横方向または縦方向の合成ピクチャを複数合成する
前言:仕事で出会ったら、画像を合成して、スクリーンショットをしています.多くの問題にも遭遇し、出会った穴も分かち合った.画像の切り取り:https://blog.csdn.net/qq_34846877/article/details/81324779要件:複数のピクチャを合成し、合成されたピクチャからピクチャを切り取る.本稿では画像を合成する方法だけを書きます.2つ目の案をお勧めします.シナリオ1、BufferedImageを使用する2枚のピクチャの幅は一致する である.案2 1、BufferedImageとGraphicsを使うと幅が一致しなくてもいいですが、合成された画像はちょっとおかしいですよ.でも、ほとんど差がなければ、影響はありません.私は採用した第2の方案で、親測は役に立ち、あなたに便利になることを望んでいます.
以上が私が今回の仕事で使った2つの合成画像案で、2つ目の互換性が強く、java.lang.ArrayIndexOutOfBoundsException:Coordinate out of boundsは現れません!に表示されます.2つ目をお勧めします.参考にしたブログ1:https://blog.csdn.net/henren555/article/details/36924939 ブログ2:2番目のブログを忘れてしまいましたが、後で見つけたら更新します.最適化できるところがあればいつでもメッセージでお知らせください、ありがとうございます!
前言:仕事で出会ったら、画像を合成して、スクリーンショットをしています.多くの問題にも遭遇し、出会った穴も分かち合った.画像の切り取り:https://blog.csdn.net/qq_34846877/article/details/81324779要件:複数のピクチャを合成し、合成されたピクチャからピクチャを切り取る.本稿では画像を合成する方法だけを書きます.2つ目の案をお勧めします.
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
public class PicImageTest3 {
/**
*
* : , ( , , 。)
* @param files
* @param newFileName
*/*/
public static void jointPic(List<File> files, String newFileName) {
try {
BufferedImage[] imgs = new BufferedImage[files.size()];
//
int h = 0;
for (int i = 0; i < files.size(); i++) {
imgs[i] = ImageIO.read(files.get(i));
h += imgs[i].getHeight();
}
int width = imgs[0].getWidth();
int height = imgs[0].getHeight();
int[] imgArray = new int[width * height];
// width ( ),h
BufferedImage imgNew = new BufferedImage(width, h, BufferedImage.TYPE_INT_RGB);
int _height = 0;
for (int i = 0; i < imgs.length; i++) {
imgs[i].getRGB(0, 0, width, height, imgArray, 0, width);
imgNew.setRGB(0, _height, width, height, imgArray, 0, width);
_height += imgs[i].getHeight();
}
File outFile = new File("C:/Users/Administrator/Desktop/001/" + newFileName);
ImageIO.write(imgNew, "jpg", outFile);//
System.out.println("=== ===");
} catch (Exception e) {
System.out.println("=== ===");
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
List<File> files = new ArrayList<>();
String newFileName = "new001e.jpg";
File file1 = new File("C:/Users/Administrator/Desktop/001/NO1.jpg"); //2295
File file2 = new File("C:/Users/Administrator/Desktop/001/NO2.jpg"); //2298
files.add(file1);
files.add(file2);
jointPic(files, newFileName);
}
}
// ,
//
if (i==0) {
allHeight = imgs.get(0).getHeight();
}
allWidth += imgs.get(i).getWidth();
//
Integer width = 0;
for(int i=0; i< imgs.size(); i++){
g.drawImage(imgs.get(i), width, 0, null);
width += imgs.get(i).getWidth();
}
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
public class PicImageTest {
public static void jointPic(List<File> files, String path) {
try {
Integer allWidth = 0; //
Integer allHeight = 0; //
List<BufferedImage> imgs = new ArrayList<>();
for(int i=0; i<files.size(); i++){
imgs.add(ImageIO.read(files.get(i)));
//
if (i==0) {
allWidth = imgs.get(0).getWidth();
}
allHeight += imgs.get(i).getHeight();
}
BufferedImage combined = new BufferedImage(allWidth, allHeight, BufferedImage.TYPE_INT_RGB);
// paint both images, preserving the alpha channels
Graphics g = combined.getGraphics();
//
Integer height = 0;
for(int i=0; i< imgs.size(); i++){
g.drawImage(imgs.get(i), 0, height, null);
height += imgs.get(i).getHeight();
}
ImageIO.write(combined, "jpg", new File(path));
System.out.println("=== ====");
} catch (Exception e) {
System.out.println("=== ====");
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception{
List<File> files = new ArrayList<>();
File file1 = new File("C:/Users/Administrator/Desktop/001/NO1.jpg");
File file2 = new File("C:/Users/Administrator/Desktop/001/NO2.jpg");
files.add(file1);
files.add(file2);
String path = "C:/Users/Administrator/Desktop/001/NO-new-4.jpg";
jointPic(files, path);
}
}
以上が私が今回の仕事で使った2つの合成画像案で、2つ目の互換性が強く、java.lang.ArrayIndexOutOfBoundsException:Coordinate out of boundsは現れません!に表示されます.2つ目をお勧めします.参考にしたブログ1:https://blog.csdn.net/henren555/article/details/36924939 ブログ2:2番目のブログを忘れてしまいましたが、後で見つけたら更新します.最適化できるところがあればいつでもメッセージでお知らせください、ありがとうございます!