Слияние изображений в C#

В этой статье вы узнаете, как объединить или объединить несколько изображений в одно изображение программно с помощью 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, используя документацию. Кроме того, вы можете поделиться с нами своими вопросами через наш форум.

Смотрите также

Информация: Aspose предоставляет БЕСПЛАТНОЕ веб-приложение для создания коллажей. Используя этот онлайн-сервис, вы можете объединять изображения JPG в JPG или PNG в PNG, создавать фотосетки и т. д.