Mosaikas izkārtojumu izveidošana manuāli ir noguris un kļūdains process, it īpaši, ja tiek risināts ar desmitiem vai simtiem attēlu. Šis uzdevums kļūst vēl sarežģītāks, kad jums ir nepieciešams saglabāt konsekvenci vairākos projektos vai kampaņās. Ar automācijas rīku, piemēram, Aspose.Imaging .NET, izstrādātāji tagad var radīt perfektu, atkārtotu attēla mosaiku bez pūles.

Šajā blogā mēs izpētīsim, kā automātiski apvienot vairākus attēlus tīkla izkārtojumā, izmantojot Aspose.Imaging .NET. Mēs aptveram visu no jūsu vides izveidošanas un avota attēlu organizēšanas, lai tos atjaunotu un organizētu tūrisma formātā.

Prerequisites

Pirms peldēšanās kodā, pārliecinieties, ka jums ir šādi nosacījumi:

  • Visual Studio 2019 vai vēlāk
  • .NET 6.0 vai jaunāks (vai .Net Framework 4.6.2+)
  • Aspose.Imaging for .NET no NuGet

Koda piemērs: Automātiskā attēla 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>();
    }
}

Izpratne par kodu

Apsveriet šādas īstenošanas galvenās daļas:

1. posms: sākotnējā uzstādīšana

Vispirms mēs sākam mērītās licences un uzlādējam ieejas 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);

Šī sadaļa nosaka nepieciešamo licencēšanu un uzlādē visas attēlus no noteiktas mapes uz sarakstu.

2. solis: Izskaidrot izmēru kanvas iznākumu

Turpmāk mēs aprēķināsim izplūdes kanvas izmērus, pamatojoties uz rādītāju un slāņu skaitu:

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

Šeit mēs nosakām kompozīta attēla platumu un augstumu, pamatojoties uz tīkla izmēriem.

3. solis: attēlu lejupielādēšana un atjaunošana

Tagad mēs uzlādējam katru attēlu no saraksta un pārveidojam to, lai pielāgotu tīklu:

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 snippet uzlādē katru attēlu un atjauno to līdz vienādam izmēram, pirms tas tiek ievietots tīkla.

4. solis: Izveidojiet attēlus tīklā

Tad mēs aprēķināsim katra attēla atrašanās vietu tīkla iekšienē un zīmēsim to, izmantojot Graphics.DrawImage:

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

graphics.DrawImage(image, xPosition, yPosition);

Šī daļa nodrošina, ka katrs attēls tiek pareizi ievietots kompozīta attēla iekšpusē, pamatojoties uz tā indeksu.

5. solis: ietaupīt kompozītu attēlu

Visbeidzot, mēs saglabājam kompozītu attēlu uz noteiktu iznākuma ceļu:

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

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

Šis snippet glabā galīgo mosaikas attēlu uz failu.

Conclusion

Šajā blogā mēs izpētījām, kā automatizēt attēla mosaikas veidošanas procesu, izmantojot Aspose.Imaging for .NET. Izpildot šajā vadlīnijā norādītos soļus, jūs varat viegli programmatiski izveidot konsekventu un vizuāli pievilcīgu tīkla izkārtojumu. Šī pieeja ne tikai ietaupa laiku, bet arī nodrošina, ka jūsu projekti uztur augstu kvalitātes un konsekvences līmeni.

Jūtieties brīvi eksperimentēt ar dažādām konfigurācijām un uzlabojumiem, lai pielāgotu risinājumu jūsu specifiskajām vajadzībām!

More in this category