Mencipta tataletak mosaik secara manual merupakan proses yang membosankan dan berisiko, terutamanya apabila berurusan dengan puluhan atau beratus-ratus imej. tugas ini menjadi lebih mencabar jika anda perlu mengekalkan konsistensi di seluruh pelbagai projek atau kempen. Dengan kemunculan alat automatik seperti Aspose.Imaging untuk .NET, pemaju kini boleh menubuhkan sempurna, berulang-ulang mozaik gambar tanpa usaha.

Dalam posting blog ini, kami akan meneroka bagaimana untuk mengautomatikkan proses menggabungkan beberapa imej ke dalam tataletak rangkaian menggunakan Aspose.Imaging untuk .NET. Kami akan meliputi segala-galanya dari tetapan persekitaran anda dan menganjurkan gambar sumber untuk memutar semula dan menyusun mereka dalam format grid.

Prerequisites

Sebelum menyelam ke dalam kod, pastikan anda mempunyai prasyarat berikut yang ditetapkan:

  • Visual Studio 2019 atau seterusnya
  • .NET 6.0 atau lebih baru (atau .Net Framework 4.6.2+)
  • Aspose.Imaging untuk .NET daripada NuGet

Contoh kod: Automating imej 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>();
    }
}

Memahami Kod

Mari kita membongkar bahagian-bahagian utama pelaksanaan ini:

Langkah 1 : Setup awal

Pertama, kami memulakan lesen yang diukur dan memuatkan fail input:

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

Bahagian ini menyusun lesen yang diperlukan dan memuat naik semua imej daripada folder tertentu ke dalam senarai.

Langkah 2: Mengira dimensi output canvas

Seterusnya, kami mengira saiz saluran output berdasarkan bilangan baris dan lajur:

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

Di sini, kita menentukan lebar dan ketinggian imej komposit berdasarkan dimensi rangkaian.

Langkah 3: Mengecas dan memulihkan imej

Sekarang, kami memuatkan setiap imej daripada senarai dan memutar semula untuk menyesuaikan diri dalam rangkaian:

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

Snippet ini memuatkan setiap imej dan mengembalikannya kepada saiz yang seragam sebelum meletakkannya di dalam grid.

Langkah 4: Mengatur imej dalam grid

Kemudian kita mengira kedudukan setiap imej di dalam rangkaian dan menggambarnya menggunakan Graphics.DrawImage:

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

graphics.DrawImage(image, xPosition, yPosition);

Bahagian ini memastikan bahawa setiap imej diletakkan dengan betul dalam gambar komposit berdasarkan indeksnya.

Langkah 5: Menyelamatkan imej komposit

Akhirnya, kami menyimpan imej komposit ke laluan output yang ditentukan:

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

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

Snippet ini menyimpan imej mosaik terakhir ke dalam fail.

Conclusion

Dalam posting blog ini, kami meneroka bagaimana untuk mengautomatikkan proses penciptaan mosaik imej menggunakan Aspose.Imaging untuk .NET. Dengan mengikuti langkah-langkah yang dinyatakan dalam panduan ini anda boleh dengan mudah mencipta tataletak rangkaian yang konsisten dan menarik secara visual secara programmatik. pendekatan ini bukan sahaja menjimatkan masa tetapi juga memastikan projek anda mengekalkan tahap kualiti dan keserasian yang tinggi.

Berasa bebas untuk bereksperimen dengan konfigurasi dan peningkatan yang berbeza untuk menyesuaikan penyelesaian kepada keperluan tertentu anda!

More in this category