Создание мозаичных расчётов вручную является скучным и ошибочным процессом, особенно при работе с десятками или сотнями изображений. Эта задача становится еще более сложным, если вам нужно поддерживать консистенцию по нескольким проектам или кампаниям. С появлением инструментов автоматизации, таких как Aspose.Imaging для .NET, разработчики теперь могут создавать идеальные, повторяемые изображения мозайки без труда.

В этом блоге мы исследуем, как автоматизировать процесс слияния множественных изображений в сетевое расположение с помощью Aspose.Imaging для .NET. Мы будем покрывать все от настройки вашего окружения и организации источника картин до рецидива и распределения их в сети.

Предупреждения

Прежде чем погрузиться в код, убедитесь, что у вас установлены следующие предпосылки:

  • Visual Studio 2019 или позднее
  • .NET 6.0 или более поздней версии (или .Net Framework 4.6.2+)
  • Aspose.Imaging для .NET от NuGet

Пример кода: Автоматизация изображения Мозаические расстройства C#

using System;
using System.Collections.Generic;
using System.Drawing;
using Aspose.Imaging;
using Aspose.Imaging.FileFormats;

public class ImageMosaicGenerator
{
    public static void Main(string[] args)
    {
        // Initialize metered license
        Metered metered = new Metered();
        metered.SetMeteredKey("your-public-key", "your-private-key");

        string inputFolder = @"path\to\input\images";
        int rows = 5;
        int columns = 4;

        List<string> imagePaths = GetImageFilePaths(inputFolder);
        
        // Calculate output canvas dimensions
        int totalWidth = columns * 200; // Assuming each image is resized to 200x200 pixels
        int totalHeight = rows * 200;
        
        using (Bitmap compositeImage = new Bitmap(totalWidth, totalHeight))
        {
            Graphics graphics = Graphics.FromImage(compositeImage);
            
            for (int i = 0; i < imagePaths.Count; i++)
            {
                string imagePath = imagePaths[i];
                
                // Load and resize images
                Image image = Image.Load(imagePath);
                int newWidth = 200;
                int newHeight = 200;

                if (image.VerticalResolution != 96 || image.HorizontalResolution != 96)
                {
                    image.ResizeFullFrame(newWidth, newHeight, ResizeType.Bicubic);
                }
                
                // Calculate position in grid
                int xPosition = (i % columns) * newWidth;
                int yPosition = (i / columns) * newHeight;

                graphics.DrawImage(image, xPosition, yPosition);
            }

            // Save the composite image
            string outputFilePath = @"path\to\output\mosaic.jpg";
            compositeImage.Save(outputFilePath);

            Console.WriteLine($"Mosaic layout saved to {outputFilePath}");
        }
    }

    private static List<string> GetImageFilePaths(string folderPath)
    {
        // Implement logic to get all image file paths from the specified folder
        return new List<string>();
    }
}

Понимать Кодекс

Рассмотрим основные части этой реализации:

Шаг 1: Первоначальная установка

Во-первых, мы инициируем измеренную лицензию и загружаем входные файлы:

// Initialize metered license
Metered metered = new Metered();
metered.SetMeteredKey("your-public-key", "your-private-key");

string inputFolder = @"path\to\input\images";
int rows = 5;
int columns = 4;

List<string> imagePaths = GetImageFilePaths(inputFolder);

Этот раздел устанавливает необходимую лицензию и загружает все изображения из указанной папки в список.

Шаг 2: Расчёт измерений выхода

Далее мы рассчитываем размеры выходной канавы на основе количества рядов и колонн:

int totalWidth = columns * 200; // Assuming each image is resized to 200x200 pixels
int totalHeight = rows * 200;

Здесь мы определяем ширину и высоту композитного изображения на основе сетевых измерений.

Шаг 3: Загрузка и восстановление изображений

Теперь мы загружаем каждую картину из списка и перенаправляем ее, чтобы соответствовать сети:

using (Bitmap compositeImage = new Bitmap(totalWidth, totalHeight))
{
    Graphics graphics = Graphics.FromImage(compositeImage);
    
    for (int i = 0; i < imagePaths.Count; i++)
    {
        string imagePath = imagePaths[i];
        
        // Load and resize images
        Image image = Image.Load(imagePath);
        int newWidth = 200;
        int newHeight = 200;

        if (image.VerticalResolution != 96 || image.HorizontalResolution != 96)
        {
            image.ResizeFullFrame(newWidth, newHeight, ResizeType.Bicubic);
        }
    }
}

Этот снайпер загружает каждую картину и рецистирует ее до единого размера, прежде чем поместить ее в сеть.

Шаг 4: Устройство изображений в сети

Затем мы рассчитываем положение каждого изображения в сети и рисуем его с помощью Graphics.DrawImage:

// Calculate position in grid
int xPosition = (i % columns) * newWidth;
int yPosition = (i / columns) * newHeight;

graphics.DrawImage(image, xPosition, yPosition);

Эта часть гарантирует, что каждая изображение правильно помещается в составную картину на основе ее индекса.

Шаг 5: Сохранение композитного изображения

Наконец, мы сохраним композитную картину на определенный выходный путь:

// Save the composite image
string outputFilePath = @"path\to\output\mosaic.jpg";
compositeImage.Save(outputFilePath);

Console.WriteLine($"Mosaic layout saved to {outputFilePath}");

Этот снайпт сохраняет конечную мозаическую картину в файл.

Заключение

В этом блоге мы исследовали, как автоматизировать процесс создания изображений мозаики с помощью Aspose.Imaging для .NET. Следуя шагам, описанным в этом руководстве, вы можете легко создавать последовательные и визуально привлекательные сетевые расположения программатически. Этот подход не только экономит время, но и гарантирует, что ваши проекты поддерживают высокий уровень качества и последовательности.

Чувствуйте себя свободным экспериментировать с различными конфигурациями и улучшениями, чтобы адаптировать решение к вашим специфическим потребностям!

More in this category