Crear dissenys de mosaic manualment és un procés tediós i per error, especialment quan es tracta de desenes o centenars d’imatges. Aquesta tasca es torna encara més desafiant si cal mantenir la coherència a través de diversos projectes o campanyes. Amb l’arribada de les eines d’automatització com Aspose.Imaging per .NET, els desenvolupadors ara poden crear perfectes, repetibles mòsiques de imatge sense esforç.

En aquest post de blog, explorarem com automatitzar el procés de fusió de múltiples imatges en un disseny de xarxa utilitzant Aspose.Imaging per .NET. Cobrirem tot des de la configuració del seu entorn i l’organització d’imatges fonts fins a resumir i arreglar-los en format de Xarxa.

Prerequisits

Abans de submergir-se en el codi, assegureu-vos que tingueu els següents requisits establerts:

  • Visual Studio 2019 o més tard
  • .NET 6.0 o posterior (o .Net Framework 4.6.2+)
  • Aspose.Imaging per a .NET de NuGet

Exemple de codi: Automatització de la imatge Mosaic Layouts 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>();
    }
}

Comprendre el codi

Anem a trencar les parts clau d’aquesta implementació:

Pas 1: Instal·lació inicial

Primer, iniciem la llicència mesurada i carregem els fitxers d’entrada:

// 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);

Aquesta secció estableix les llicències necessàries i carrega totes les imatges d’una carpeta especificada en una llista.

Pas 2: Calcular les dimensions de les canvas de sortida

A continuació, calcularem les dimensions de la canva de sortida basant-se en el nombre de files i columnes:

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

Aquí, determinem la amplada i l’altura de la imatge composita basada en les dimensions de xarxa.

Pas 3: Carregar i reservar imatges

Ara, carregem cada imatge de la llista i la rectificem per encaixar dins la xarxa:

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);
        }
    }
}

Aquest snippet carrega cada imatge i la resisa a una mida uniforme abans de col·locar-la a la xarxa.

Pas 4: Arreglar imatges a la xarxa

Després calcularem la posició de cada imatge dins de la xarxa i dibuixar-la utilitzant Graphics.DrawImage:

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

graphics.DrawImage(image, xPosition, yPosition);

Aquesta part assegura que cada imatge es col·loca correctament dins de la imatge comú basada en el seu índex.

Pas 5: Salvar la imatge compost

Finalment, emmagatzemem la imatge comú a una ruta de sortida especificada:

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

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

Aquest snippet salva la imatge mosaica final a un fitxer.

Conclusió

En aquest post de blog, hem explorat com automatitzar el procés de creació de mosaics d’imatge utilitzant Aspose.Imaging per .NET. Seguint els passos esmentats en aquest guia, podeu crear fàcilment dissenys de xarxa consistents i visualment atractius programàticament. Aquest enfocament no només estalvia temps sinó que també garanteix que els vostres projectes mantinguin un alt nivell de qualitat i coherència.

Senteu lliures d’experimentar amb diferents configuracions i millores per adaptar la solució a les vostres necessitats específiques!

More in this category