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!