Scal obrazy w Javie

Istnieje szereg scenariuszy, w których edytowanie i manipulowanie obrazami odbywa się programowo. Podczas edycji obrazów łączenie obrazów jest ważną funkcją używaną do łączenia dwóch lub więcej obrazów, na przykład w celu utworzenia kolażu. W tym artykule dowiesz się, jak scalić wiele obrazów w jeden obraz w Javie. Wyraźnie zademonstrujemy, jak łączyć obrazy w poziomie iw pionie.

Java API do scalania obrazów — bezpłatne pobieranie

Aspose.Imaging for Java to potężny interfejs API do przetwarzania obrazów, który umożliwia pracę z szeroką gamą formatów obrazów. Zapewnia szereg funkcji wymaganych do edycji obrazu. Użyjemy tego interfejsu API do połączenia naszych obrazów w tym poście na blogu. Możesz pobrać interfejs API lub zainstalować go przy użyciu następujących konfiguracji Mavena.

<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>

Połącz wiele obrazów w Javie

Obrazy można łączyć na dwa sposoby: w pionie iw poziomie. W przypadku scalania pionowego obrazy są łączone jeden po drugim w kierunku pionowym. Natomiast w przypadku łączenia poziomego obrazy są dołączane do siebie w kierunku poziomym. Zobaczmy więc, jak scalić obrazy na dwa sposoby.

Scal obrazy poziomo w Javie

Poniżej przedstawiono kroki łączenia obrazów w poziomie przy użyciu języka Java.

  • Najpierw określ ścieżki obrazów w tablicy ciągów.
  • Oblicz wysokość i szerokość otrzymanego obrazu.
  • Utwórz obiekt klasy JpegOptions i ustaw wymagane opcje.
  • Utwórz obiekt klasy JpegImage i zainicjuj go obiektem JpegOptions oraz wysokością i szerokością wynikowego obrazu.
  • Przejrzyj listę obrazów i załaduj każdy obraz za pomocą klasy RasterImage.
  • Utwórz Rectangle dla każdego obrazu i dodaj go do wynikowego obrazu za pomocą metody JpegImage.saveArgb32Pixels().
  • Zwiększ szerokość ściegu w każdej iteracji.
  • Po zakończeniu zapisz wynikowy obraz za pomocą metody JpegImage.save(string).

Poniższy przykładowy kod pokazuje, jak scalać obrazy w poziomie w Javie.

// Lista obrazów
String[] imagePaths = { "image.jpg", "image.jpg" };

// Wyjściowa ścieżka obrazu
String outputPath = "output-horizontal.jpg";
String tempFilePath = "temp.jpg";

// Uzyskaj wynikowy rozmiar obrazu
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());
	}
}

// Połącz obrazy w nowy
try (JpegOptions options = new JpegOptions()) {
	Source tempFileSource = new FileCreateSource(tempFilePath, true);
	options.setSource(tempFileSource);
	options.setQuality(100);

  	// Utwórz wynikowy obraz
	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();
			}
		}
    
    		// Zapisz obraz wyjściowy
		newImage.save(outputPath);
	}
}

Poniższy obraz przedstawia wynik łączenia dwóch podobnych obrazów w poziomie.

Scal obrazy poziomo w Javie

Scal obrazy w pionie w Javie

Aby scalić obrazy w pionie, wystarczy zamienić role właściwości wysokości i szerokości. Reszta kodu będzie taka sama. Poniższy przykładowy kod demonstruje sposób scalania wielu obrazów w pionie w Javie.

// Lista obrazów
String[] imagePaths = { "image.jpg", "image.jpg" };

// Ścieżka obrazu wyjściowego
String outputPath = "output-vertical.jpg";

// Uzyskaj wynikowy rozmiar obrazu
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();
	}
}

// Połącz obrazy w nowy
try (JpegOptions options = new JpegOptions()) {
	options.setSource(new StreamSource()); // empty
	options.setQuality(100);
  
  	// Utwórz wynikowy obraz
	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();
			}
		}
    		// Zapisz wynikowy obraz
		newImage.save(outputPath);
	}
}

Poniższy obraz przedstawia wynik scalania dwóch podobnych obrazów w pionie.

Scal obrazy w pionie w Javie

Scal obrazy PNG w Javie

W poprzednich sekcjach pokazaliśmy, jak scalać obrazy w formacie JPG. Jednak może być konieczne scalenie obrazów również w formacie PNG. Aby scalić obrazy PNG, wystarczy zastąpić klasy JpegImage i JpegOptions odpowiednio klasami PngImage i PngOptions, a reszta kodu pozostanie taka sama.

Poniższy przykładowy kod pokazuje, jak scalić wiele obrazów w formacie PNG w Javie.

// Lista obrazów
String[] imagePaths = { "image.png", "image.png" };

// Wyjściowa ścieżka obrazu
String outputPath = "output-horizontal.png";
String tempFilePath = "temp.png";

// Uzyskaj wynikowy rozmiar obrazu
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());
	}
}

// Połącz obrazy w nowy
try (PngOptions options = new PngOptions()) {
	Source tempFileSource = new FileCreateSource(tempFilePath, true);
	options.setSource(tempFileSource);

  	// Utwórz wynikowy obraz
	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();
			}
		}
    		// Zapisać obraz
		newImage.save(outputPath);
	}
}

Java Image Merging API — uzyskaj bezpłatną licencję

Możesz uzyskać bezpłatną tymczasową licencję i scalać obrazy bez ograniczeń ewaluacyjnych.

Wniosek

W tym artykule nauczyłeś się łączyć wiele obrazów w jeden obraz przy użyciu języka Java. Próbki kodu Java pokazały, jak łączyć obrazy w pionie iw poziomie. Ponadto możesz dowiedzieć się więcej o interfejsie API przetwarzania obrazu Java, korzystając z dokumentacji. Możesz także podzielić się z nami swoimi pytaniami za pośrednictwem naszego forum.

Zobacz też

Informacje: Aspose zapewnia BEZPŁATNĄ aplikację internetową Collage. Korzystając z tej usługi online, możesz scalać obrazy JPG do JPG lub PNG do PNG, tworzyć siatki zdjęć i tak dalej.