В этой статье вы узнаете, как объединить или объединить несколько изображений в одно изображение программно с помощью C#. Пошаговое руководство и примеры кода продемонстрируют, как объединять изображения по горизонтали или по вертикали.
C# API для слияния изображений
Чтобы объединить несколько изображений в одно, мы будем использовать Aspose.Imaging for .NET. Это мощный и многофункциональный API для обработки изображений, который позволяет работать с широким спектром форматов изображений. Вы можете либо скачать API, либо установить его с помощью NuGet.
PM> Install-Package Aspose.Imaging
Объединение нескольких изображений с помощью C#
Существует два способа объединения изображений в одно: по вертикали и по горизонтали. В первом методе изображения присоединяются друг к другу по вертикали, тогда как во втором изображения объединяются одно за другим по горизонтали. В следующих разделах вы изучите оба метода с примерами кода.
Объединить изображения по вертикали
Ниже приведены шаги для вертикального объединения изображений с помощью C#.
- Сначала укажите пути к изображениям в массиве строк.
- Затем создайте список Size и сохраните в нем размер каждого изображения.
- Вычислите высоту и ширину результирующего изображения.
- Создайте объект класса StreamSource и инициализируйте его новым MemoryStream.
- Создайте объект класса JpegOptions и задайте его параметры.
- Создайте экземпляр класса JpegImage для нового изображения и инициализируйте его с помощью JpegOptions и вычисленных высоты и ширины.
- Пройдитесь по списку изображений и в каждой итерации загрузите изображение в объект RasterImage.
- Создайте Rectangle для каждого изображения и добавьте его к новому изображению, используя метод JpegImage.SaveArgb32Pixels().
- Увеличивайте высоту сшивания на каждой итерации.
- Наконец, сохраните новое изображение, используя метод JpegImage.Save(string).
В следующем примере кода показано, как объединить изображения по вертикали.
// Создайте список изображений
string[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg", "image5.png" };
// Получить размер результирующего изображения
List<Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
using (RasterImage image = (RasterImage)Image.Load(imagePath))
{
imageSizes.Add(image.Size);
}
}
int newWidth = imageSizes.Max(size => size.Width);
int newHeight = imageSizes.Sum(size => size.Height);
// Объединить изображения в новое
using (MemoryStream memoryStream = new MemoryStream())
{
// Создать источник вывода
StreamSource outputStreamSource = new StreamSource(memoryStream);
// Создать параметры jpeg
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("merged-image.jpg");
}
}
Объединить изображения по горизонтали
Ниже приведены шаги для объединения изображений по горизонтали с помощью C#.
- Сначала укажите пути к изображениям в массиве строк.
- Затем создайте список Size и сохраните в нем размер каждого изображения.
- Вычислите высоту и ширину результирующего изображения.
- Создайте новый источник, используя FileCreateSource(String, Boolean) и инициализируйте его путем к файлу.
- Создайте объект класса JpegOptions и установите его параметры.
- Создайте экземпляр класса JpegImage для нового изображения и инициализируйте его с помощью JpegOptions и вычисленных высоты и ширины.
- Пройдитесь по списку изображений и в каждой итерации загрузите изображение в объект RasterImage.
- Создайте Rectangle для каждого изображения и добавьте его к новому изображению, используя метод JpegImage.SaveArgb32Pixels().
- Увеличивайте ширину сшивания на каждой итерации.
- После этого сохраните новое изображение с помощью метода JpegImage.Save(string).
В следующем примере кода показано, как объединить несколько изображений по горизонтали.
// Создать список изображений
string[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg", "image4.JPG", "image5.png" };
// Чтобы создать временное изображение
string tempFilePath = "temp.jpg";
// Получить размер результирующего изображения
List <Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
using (RasterImage image = (RasterImage)Image.Load(imagePath))
{
imageSizes.Add(image.Size);
}
}
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);
// Объединить изображения в новое
Source tempFileSource = new FileCreateSource(tempFilePath, isTemporal: true);
// Создать параметры jpeg
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);
}
Получите бесплатную лицензию API
Вы можете получить бесплатную временную лицензию, чтобы использовать API без ограничений пробной версии.
Вывод
В этой статье вы узнали, как объединить несколько изображений в одно изображение с помощью C#. Примеры кода продемонстрировали, как комбинировать изображения по вертикали и горизонтали. Вы можете узнать больше об API обработки изображений .NET, используя документацию. Кроме того, вы можете поделиться с нами своими вопросами через наш форум.
Смотрите также
- Преобразование изображений в оттенки серого в C#
- Добавить водяной знак к изображениям с помощью C#
- Сжатие изображений PNG, JPEG и TIFF с помощью C#
Информация: Aspose предоставляет БЕСПЛАТНОЕ веб-приложение для создания коллажей. Используя этот онлайн-сервис, вы можете объединять изображения JPG в JPG или PNG в PNG, создавать фотосетки и т. д.