Czasami zachodzi potrzeba stworzenia obrazu poprzez połączenie kilku obrazów JPG. W tym artykule wyjaśniono, jak to zrobić w języku C#.
- Interfejs API obrazowania C# – bezpłatne pobieranie
- Połącz obrazy JPG poziomo w języku C#
- Połącz obrazy JPG w pionie w języku C#
- Połącz obrazy JPG z formatem PDF w języku C#
- Połącz obrazy JPG w PNG w C#
Interfejs API obrazowania C# – bezpłatne pobieranie
Aspose.Imaging for .NET zapewnia szereg elastycznych procedur do tworzenia i manipulowania obrazami w aplikacjach .NET. Umożliwia łączenie plików JPG w kilku liniach kodu. Można go zainstalować w aplikacji .NET przy użyciu biblioteki DLL interfejsu API NuGet lub pobierz.
Install-Package Aspose.Imaging
Scal obrazy JPG poziomo w języku C#
Poniżej przedstawiono kroki scalania obrazów JPEG w poziomie w języku C#.
- Utwórz tablicę obrazów JPEG, które chcesz połączyć.
- Oblicz szerokość powstałego obrazu, dodając szerokość wszystkich obrazów w tablicy i wysokość, znajdując maksymalną wysokość obrazu w tablicy.
- Utwórz nowy obraz za pomocą klasy JpegImage i ustaw jego szerokość i wysokość na obliczoną w ostatnim kroku.
- Iteruj po tablicy obrazów (które chcesz połączyć) i wykonaj następujące zadania na każdym obrazie:
- Załaduj piksele obrazu za pomocą metody LoadArgb32Pixels i zapisz je w obrazie wynikowym za pomocą metody SaveArgb32Pixels. Ta metoda przyjmuje również obiekt Rectangle jako argument określający położenie obrazu w obrazie wynikowym.
- Zapisz wynikowy obraz jako obraz JPEG.
Poniższy przykładowy kod pokazuje, jak łączyć obrazy JPEG w poziomie w języku C#.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Aspose.Imaging;
using Aspose.Imaging.FileFormats.Jpeg;
using Aspose.Imaging.ImageOptions;
using Aspose.Imaging.Sources;
// Tablica obrazów, które chcesz scalić.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };
// Nazwa pliku wyjściowego/wynikowego.
string outputPath = "MergeImages_Horizontally.jpg";
// Uzyskiwanie wynikowego rozmiaru obrazu.
List<Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
using (RasterImage image = (RasterImage)Image.Load(imagePath))
{
imageSizes.Add(image.Size);
}
}
// Szerokość i wysokość powstałego obrazu
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);
// Łączenie obrazów w jeden.
Source tempFileSource = new FileCreateSource("temp.jpg", isTemporal: true);
JpegOptions options = new JpegOptions() { Source = tempFileSource, Quality = 100 };
using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
{
int stitchedWidth = 0;
foreach (string imagePath in imagePaths)
{
using (RasterImage image = (RasterImage)Image.Load(imagePath))
{
Rectangle bounds = new Rectangle(stitchedWidth, 0, image.Width, image.Height);
newImage.SaveArgb32Pixels(bounds, image.LoadArgb32Pixels(image.Bounds));
stitchedWidth += image.Width;
}
}
newImage.Save(outputPath);
}
Obrazy wejściowe

First Image

Second Image
Obraz wyjściowy

Scal obrazy JPG w pionie w języku C#
Kroki scalania obrazów JPEG w pionie są takie same jak powyżej. Mała różnica polega na tym, że wysokość wynikowego obrazu obliczamy, dodając wysokość wszystkich obrazów w tablicy i szerokość, znajdując maksymalną szerokość obrazu w tablicy. Poniższy przykładowy kod pokazuje, jak łączyć obrazy JPEG w pionie w języku C#.
// Tablica obrazów, które chcesz scalić
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };
string outputPath = "MergeImages_Vertically.jpg";
// Uzyskiwanie wynikowego rozmiaru obrazu.
List<Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
using (RasterImage image = (RasterImage)Image.Load(imagePath))
{
imageSizes.Add(image.Size);
}
}
// Szerokość i wysokość powstałego obrazu
int newWidth = imageSizes.Max(size => size.Width);
int newHeight = imageSizes.Sum(size => size.Height);
// Łączenie obrazów w jeden.
using (MemoryStream memoryStream = new MemoryStream())
{
StreamSource outputStreamSource = new StreamSource(memoryStream);
JpegOptions options = new JpegOptions() { Source = outputStreamSource, Quality = 100 };
using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
{
int stitchedHeight = 0;
foreach (string imagePath in imagePaths)
{
using (RasterImage image = (RasterImage)Image.Load(imagePath))
{
Rectangle bounds = new Rectangle(0, stitchedHeight, image.Width, image.Height);
newImage.SaveArgb32Pixels(bounds, image.LoadArgb32Pixels(image.Bounds));
stitchedHeight += image.Height;
}
}
newImage.Save(outputPath);
}
}

Scal obrazy JPG z plikami PDF w języku C#
Może zaistnieć potrzeba połączenia obrazów JPEG w formacie PDF. Możesz to zrobić, wprowadzając niewielką zmianę w metodzie Image.Save(użyj rozszerzenia .pdf zamiast .jpg).
// Tablica obrazów, które chcesz scalić.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };
string outputPath = "MergeHorizontalAsPDF";
string tempFilePath = "temp.jpg";
// Uzyskiwanie wynikowego rozmiaru obrazu.
List<Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
using (RasterImage image = (RasterImage)Image.Load(imagePath))
{
imageSizes.Add(image.Size);
}
}
// Szerokość i wysokość powstałego obrazu.
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);
// Łączenie obrazów w jeden.
Source tempFileSource = new FileCreateSource(tempFilePath, isTemporal: true);
JpegOptions options = new JpegOptions() { Source = tempFileSource, Quality = 100 };
using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
{
int stitchedWidth = 0;
foreach (string imagePath in imagePaths)
{
using (RasterImage image = (RasterImage)Image.Load(imagePath))
{
Rectangle bounds = new Rectangle(stitchedWidth, 0, image.Width, image.Height);
newImage.SaveArgb32Pixels(bounds, image.LoadArgb32Pixels(image.Bounds));
stitchedWidth += image.Width;
}
}
newImage.Save(outputPath + ".pdf", new PdfOptions());
}
Scal obrazy JPG w PNG w C#
Podobnie możesz połączyć obrazy JPEG w PNG. Jak pokazano powyżej, wystarczy użyć rozszerzenia .png zamiast .jpg w metodzie Image.Save.
// Tablica obrazów, które chcesz scalić.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };
string outputPath = "MergeHorizontalAsPNG";
// Uzyskiwanie wynikowego rozmiaru obrazu.
List<Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
using (RasterImage image = (RasterImage)Image.Load(imagePath))
{
imageSizes.Add(image.Size);
}
}
// Szerokość i wysokość powstałego obrazu.
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);
// Łączenie obrazów w jeden i zapisywanie jako PNG
using (MemoryStream memoryStream = new MemoryStream())
{
StreamSource outputStreamSource = new StreamSource(memoryStream);
JpegOptions options = new JpegOptions() { Source = outputStreamSource, Quality = 100 };
using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
{
int stitchedWidth = 0;
foreach (string imagePath in imagePaths)
{
using (RasterImage image = (RasterImage)Image.Load(imagePath))
{
Rectangle bounds = new Rectangle(stitchedWidth, 0, image.Width, image.Height);
newImage.SaveArgb32Pixels(bounds, image.LoadArgb32Pixels(image.Bounds));
stitchedWidth += image.Width;
}
}
newImage.Save(outputPath + ".png", new PngOptions());
}
}
Wniosek
W tym artykule dowiedziałeś się, jak łączyć obrazy JPEG w języku C#. Można je łączyć poziomo lub pionowo. Dowiedziałeś się również, jak zapisać scalony obraz w formacie PDF lub PNG. Aby uzyskać więcej informacji, sprawdź dokumentację Aspose.Imaging for .NET. Jeśli masz jakieś pytania, skontaktuj się z nami na naszym forum pomocy technicznej.