Mosaikos išdėstymų sukūrimas rankiniu būdu yra nuobodus ir klaidinga procesas, ypač kai susiduriama su dešimtimis ar šimtais vaizdų. Ši užduotis tampa dar sudėtingesnė, jei jums reikia išlaikyti nuoseklumą per kelis projektus ar kampanijas. Su automatizacijos įrankių, tokių kaip Aspose.Imaging .NET, atsiradimu, kūrėjai dabar gali sukurti tobulą, pakartotinį vaizdo mosaiką be jokių pastangas.

Šiame tinklaraščio pranešime išnagrinėsime, kaip automatizuoti kelių vaizdų sujungimo procesą į tinklo išdėstymą naudojant Aspose.Imaging .NET. Mes apimsime viską nuo jūsų aplinkos nustatymo ir šaltinio nuotraukų organizavimo iki jų atkūrimo ir tvarkymo tinklainės formatu.

Prerequisites

Prieš nusileidžiant į kodą, įsitikinkite, kad turite šiuos reikalavimus:

  • Visual Studio 2019 arba vėliau
  • .NET 6.0 arba naujesnė (arba .Net Framework 4.6.2+)
  • Aspose.Imaging .NET iš NuGet

Kodo pavyzdys: Automatinis vaizdo mosaikos sudėtis 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>();
    }
}

Suprasti kodą

Pažvelkime į pagrindines šios įgyvendinimo dalis:

1 žingsnis: pradinis nustatymas

Pirma, mes pradedame matuojamą licenciją ir įkrauname įvesties failus:

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

Šiame skyriuje pateikiama reikalinga licencija ir į sąrašą įkelia visas nuotraukas iš konkrečios klasės.

2 žingsnis: išleidimo kanvas dydžio apskaičiavimas

Toliau mes apskaičiuojame išleidimo kanalų matmenis remiantis eilutės ir stulpelių skaičiumi:

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

Čia mes nustatome kompozitinio vaizdo plotį ir aukštį remiantis tinklo matmenimis.

3 žingsnis: atsisiųsti ir perkelti vaizdus

Dabar mes įkeliame kiekvieną paveikslą iš sąrašo ir atnaujiname jį, kad atitiktų tinklą:

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

Šis pjūvis įkrauna kiekvieną paveikslą ir atkuriamas iki vienodo dydžio, prieš įdėdamas jį į tinklą.

4 žingsnis: Sukurti vaizdus tinkle

Tada mes apskaičiuojame kiekvieno paveikslėlio padėtį tinklo viduje ir traukiame jį naudojant Graphics.DrawImage:

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

graphics.DrawImage(image, xPosition, yPosition);

Ši dalis užtikrina, kad kiekvienas paveikslėlis būtų teisingai įtrauktas į kompozicinį vaizdą, pagrįstą jo indeksu.

5 žingsnis: išsaugoti sudėtingą vaizdą

Galiausiai, mes išsaugojame kompozitinį vaizdą į nurodytą išleidimo maršrutą:

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

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

Šis purkštukas išsaugo galutinį mosaikos vaizdą į failą.

Conclusion

Šiame tinklaraštyje mes tyrėme, kaip automatizuoti vaizdo mosaikos kūrimo procesą naudojant „Aspose.Imaging“ .NET. Pažvelgiant į šiame vadove išdėstytus žingsnius, galite lengvai sukurti nuoseklų ir vizualiai patrauklią tinklo struktūrą.

Jaučiatės laisvi eksperimentuoti su skirtingomis konfigūracijomis ir patobulinimais, kad sprendimas atitiktų jūsų konkrečius poreikius!

More in this category