Hợp nhất hình ảnh trong Java

Có một loạt các tình huống trong đó việc chỉnh sửa và thao tác hình ảnh được thực hiện theo chương trình. Trong chỉnh sửa hình ảnh, hợp nhất hình ảnh là một tính năng quan trọng được sử dụng để kết hợp hai hoặc nhiều hình ảnh, ví dụ, để tạo ảnh ghép. Trong bài viết này, bạn sẽ học cách ghép nhiều hình ảnh thành một hình ảnh duy nhất trong Java. Chúng tôi sẽ trình bày rõ ràng cách hợp nhất hình ảnh theo chiều ngang và chiều dọc.

Java API để hợp nhất hình ảnh - Tải xuống miễn phí

Aspose.Imaging for Java là một API xử lý hình ảnh mạnh mẽ cho phép bạn làm việc với nhiều định dạng hình ảnh. Nó cung cấp nhiều tính năng cần thiết để chỉnh sửa hình ảnh. Chúng tôi sẽ sử dụng API này để hợp nhất hình ảnh của chúng tôi trong bài đăng trên blog này. Bạn có thể tải xuống API hoặc cài đặt nó bằng cách sử dụng các cấu hình Maven sau.

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository> 

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-imaging</artifactId>
    <version>22.7</version>
</dependency>

Hợp nhất nhiều hình ảnh trong Java

Bạn có thể hợp nhất các hình ảnh theo một trong hai cách: theo chiều dọc và chiều ngang. Trong hợp nhất theo chiều dọc, các hình ảnh được kết hợp lần lượt theo hướng dọc. Trong khi, khi hợp nhất theo chiều ngang, các hình ảnh được nối với nhau theo hướng ngang. Vì vậy, chúng ta hãy xem làm thế nào để hợp nhất hình ảnh theo cả hai cách.

Hợp nhất hình ảnh theo chiều ngang trong Java

Sau đây là các bước để ghép ảnh theo chiều ngang bằng Java.

  • Đầu tiên, chỉ định đường dẫn của các hình ảnh trong một mảng chuỗi.
  • Tính chiều cao và chiều rộng của hình ảnh kết quả.
  • Tạo một đối tượng của lớp JpegOptions và đặt các tùy chọn cần thiết.
  • Tạo một đối tượng của lớp JpegImage và khởi tạo nó bằng đối tượng JpegOptions và chiều cao và chiều rộng của hình ảnh kết quả.
  • Lặp qua danh sách các hình ảnh và tải từng hình ảnh bằng cách sử dụng lớp RasterImage.
  • Tạo Hình chữ nhật cho mỗi hình ảnh và thêm nó vào hình ảnh kết quả bằng phương pháp JpegImage.saveArgb32Pixels().
  • Tăng chiều rộng đường khâu trong mỗi lần lặp.
  • Sau khi hoàn tất, hãy lưu hình ảnh kết quả bằng phương thức JpegImage.save (string).

Mẫu mã sau đây cho thấy cách hợp nhất hình ảnh theo chiều ngang trong Java.

// Danh sách hình ảnh
String[] imagePaths = { "image.jpg", "image.jpg" };

// Đường dẫn hình ảnh đầu ra
String outputPath = "output-horizontal.jpg";
String tempFilePath = "temp.jpg";

// Nhận kích thước hình ảnh kết quả
int newWidth = 0;
int newHeight = 0;
for (String imagePath : imagePaths) {
	try (RasterImage image = (com.aspose.imaging.RasterImage) com.aspose.imaging.Image.load(imagePath)) {
		Size size = image.getSize();
		newWidth += size.getWidth();
		newHeight = Math.max(newHeight, size.getHeight());
	}
}

// Kết hợp hình ảnh thành hình mới
try (JpegOptions options = new JpegOptions()) {
	Source tempFileSource = new FileCreateSource(tempFilePath, true);
	options.setSource(tempFileSource);
	options.setQuality(100);

  	// Tạo hình ảnh kết quả
	try (JpegImage newImage = (JpegImage) Image.create(options, newWidth, newHeight)) {
		int stitchedWidth = 0;
		for (String imagePath : imagePaths) {
			try (RasterImage image = (RasterImage) Image.load(imagePath)) {
				Rectangle bounds = new Rectangle(stitchedWidth, 0, image.getWidth(), image.getHeight());
				newImage.saveArgb32Pixels(bounds, image.loadArgb32Pixels(image.getBounds()));
				stitchedWidth += image.getWidth();
			}
		}
    
    		// Lưu hình ảnh đầu ra
		newImage.save(outputPath);
	}
}

Hình ảnh sau đây cho thấy kết quả của việc hợp nhất hai hình ảnh tương tự theo chiều ngang.

Hợp nhất hình ảnh theo chiều ngang trong Java

Hợp nhất hình ảnh theo chiều dọc trong Java

Để hợp nhất các hình ảnh theo chiều dọc, bạn chỉ cần chuyển đổi vai trò của các thuộc tính chiều cao và chiều rộng. Phần còn lại của mã sẽ giống nhau. Mẫu mã sau đây trình bày cách hợp nhất nhiều hình ảnh theo chiều dọc trong Java.

// Danh sách hình ảnh
String[] imagePaths = { "image.jpg", "image.jpg" };

// Đường dẫn của hình ảnh đầu ra
String outputPath = "output-vertical.jpg";

// Nhận kích thước hình ảnh kết quả
int newWidth = 0;
int newHeight = 0;
for (String imagePath : imagePaths) {
	try (RasterImage image = (RasterImage) Image.load(imagePath)) {
		Size size = image.getSize();
		newWidth = Math.max(newWidth, size.getWidth());
		newHeight += size.getHeight();
	}
}

// Kết hợp hình ảnh thành hình mới
try (JpegOptions options = new JpegOptions()) {
	options.setSource(new StreamSource()); // empty
	options.setQuality(100);
  
  	// Tạo hình ảnh kết quả
	try (JpegImage newImage = (JpegImage) Image.create(options, newWidth, newHeight)) {
		int stitchedHeight = 0;
		for (String imagePath : imagePaths) {
			try (RasterImage image = (RasterImage) Image.load(imagePath)) {
				Rectangle bounds = new Rectangle(0, stitchedHeight, image.getWidth(), image.getHeight());
				newImage.saveArgb32Pixels(bounds, image.loadArgb32Pixels(image.getBounds()));
				stitchedHeight += image.getHeight();
			}
		}
    		// Lưu hình ảnh kết quả
		newImage.save(outputPath);
	}
}

Hình ảnh sau đây cho thấy kết quả của việc hợp nhất hai hình ảnh giống nhau theo chiều dọc.

Hợp nhất hình ảnh theo chiều dọc trong Java

Hợp nhất hình ảnh PNG trong Java

Trong các phần trước, chúng tôi đã trình bày cách ghép ảnh ở định dạng JPG. Tuy nhiên, bạn cũng có thể cần hợp nhất hình ảnh ở định dạng PNG. Để hợp nhất hình ảnh PNG, bạn chỉ cần thay thế các lớp JpegImage và JpegOptions bằng các lớp PngImagePngOptions tương ứng và phần còn lại của mã sẽ được giữ nguyên.

Mẫu mã sau đây cho thấy cách hợp nhất nhiều hình ảnh ở định dạng PNG trong Java.

// Danh sách hình ảnh
String[] imagePaths = { "image.png", "image.png" };

// Đường dẫn hình ảnh đầu ra
String outputPath = "output-horizontal.png";
String tempFilePath = "temp.png";

// Nhận kích thước hình ảnh kết quả
int newWidth = 0;
int newHeight = 0;
for (String imagePath : imagePaths) {
	try (RasterImage image = (com.aspose.imaging.RasterImage) com.aspose.imaging.Image.load(imagePath)) {
		Size size = image.getSize();
		newWidth += size.getWidth();
		newHeight = Math.max(newHeight, size.getHeight());
	}
}

// Kết hợp hình ảnh thành hình mới
try (PngOptions options = new PngOptions()) {
	Source tempFileSource = new FileCreateSource(tempFilePath, true);
	options.setSource(tempFileSource);

  	// Tạo hình ảnh kết quả
	try (PngImage newImage = (PngImage) Image.create(options, newWidth, newHeight)) {
		int stitchedWidth = 0;
		for (String imagePath : imagePaths) {
			try (RasterImage image = (RasterImage) Image.load(imagePath)) {
				Rectangle bounds = new Rectangle(stitchedWidth, 0, image.getWidth(), image.getHeight());
				newImage.saveArgb32Pixels(bounds, image.loadArgb32Pixels(image.getBounds()));
				stitchedWidth += image.getWidth();
			}
		}
    		// Lưu hình ảnh
		newImage.save(outputPath);
	}
}

API hợp nhất hình ảnh Java - Nhận giấy phép miễn phí

Bạn có thể nhận giấy phép tạm thời miễn phí và hợp nhất các hình ảnh mà không có giới hạn đánh giá.

Sự kết luận

Trong bài này, bạn đã học cách ghép nhiều ảnh thành một ảnh duy nhất bằng Java. Các mẫu mã Java đã chứng minh cách kết hợp các hình ảnh theo chiều dọc và chiều ngang. Ngoài ra, bạn có thể khám phá thêm về API xử lý ảnh Java bằng tài liệu. Ngoài ra, bạn có thể chia sẻ các thắc mắc của mình với chúng tôi qua diễn đàn của chúng tôi.

Xem thêm

Thông tin: Aspose cung cấp ứng dụng web Ghép ảnh MIỄN PHÍ. Sử dụng dịch vụ trực tuyến này, bạn có thể hợp nhất hình ảnh JPG sang JPG hoặc PNG thành PNG, tạo lưới ảnh, v.v.