Tạo bố trí mosaic thủ công là một quá trình buồn bã và sai lầm, đặc biệt là khi đối phó với hàng chục hoặc hàng trăm hình ảnh. Nhiệm vụ này trở nên khó khăn hơn nếu bạn cần phải duy trì sự nhất quán trong nhiều dự án hoặc chiến dịch. Với sự xuất hiện của các công cụ tự động hóa như Aspose.Imaging cho .NET, các nhà phát triển bây giờ có thể tạo ra hoàn hảo, tái tạo hình dung mosoic mà không cần nỗ lực.

Trong bài viết blog này, chúng tôi sẽ khám phá làm thế nào để tự động hóa quá trình kết hợp nhiều hình ảnh vào một bố trí mạng bằng cách sử dụng Aspose.Imaging cho .NET. Chúng ta sẽ bao gồm tất cả mọi thứ từ thiết lập môi trường của bạn và tổ chức các bức ảnh nguồn để tái thiết và sắp xếp chúng trong định dạng mạng.

Nguyên tắc

Trước khi đi vào mã, hãy chắc chắn rằng bạn có các yêu cầu sau đây:

  • Visual Studio 2019 hoặc sau
  • .NET 6.0 hoặc mới hơn (hoặc .Net Framework 4.6.2+)
  • Aspose.Imaging for .NET từ NuGet

Ví dụ mã: Tự động hóa hình ảnh 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>();
    }
}

Hiểu Code

Chúng ta hãy chia sẻ những phần quan trọng của việc thực hiện này:

Bước 1: Cài đặt ban đầu

Đầu tiên, chúng tôi khởi động giấy phép đo lường và tải các tệp nhập:

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

Phần này bao gồm các giấy phép cần thiết và tải tất cả các hình ảnh từ một thư mục cụ thể vào một danh sách.

Bước 2: Tính toán kích thước canvas output

Tiếp theo, chúng tôi tính toán các kích thước của canvas output dựa trên số lượng hàng và cột:

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

Ở đây, chúng tôi xác định chiều rộng và chiều cao của hình ảnh kết hợp dựa trên kích thước lưới.

Bước 3: Tải về và tải lại hình ảnh

Bây giờ, chúng tôi tải lên mỗi hình ảnh từ danh sách và khôi phục nó để phù hợp trong mạng:

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

Bộ cắt này tải mỗi hình ảnh và khôi phục nó lên kích thước đồng nhất trước khi đặt nó vào lưới.

Bước 4: sắp xếp hình ảnh trong lưới

Sau đó chúng tôi tính vị trí của mỗi hình ảnh trong mạng và vẽ nó bằng cách sử dụng Graphics.DrawImage:

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

graphics.DrawImage(image, xPosition, yPosition);

Phần này đảm bảo rằng mỗi hình ảnh được đặt đúng bên trong hình thành dựa trên chỉ số của nó.

Bước 5: Tiết kiệm hình ảnh phức tạp

Cuối cùng, chúng tôi lưu hình ảnh phức tạp đến một con đường xuất phát cụ thể:

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

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

Snippet này lưu hình ảnh mosaic cuối cùng vào một tệp.

Kết luận

Trong bài viết trên blog này, chúng tôi đã khám phá cách tự động hóa quá trình tạo mosaics hình ảnh bằng cách sử dụng Aspose.Imaging cho .NET. Bằng cách làm theo các bước được liệt kê trong hướng dẫn này bạn có thể dễ dàng tạo ra các bố trí mạng liên tục và hấp dẫn về mặt thị giác một cách lập trình. Cách tiếp cận này không chỉ tiết kiệm thời gian mà còn đảm bảo rằng các dự án của bạn duy trì một mức độ chất lượng cao và nhất quán.

Hãy cảm thấy tự do để thử nghiệm với các cấu hình và cải tiến khác nhau để tùy chỉnh giải pháp cho nhu cầu cụ thể của bạn!

More in this category