Hợp nhất hình ảnh trong C#

Trong bài viết này, bạn sẽ tìm hiểu cách hợp nhất hoặc kết hợp nhiều hình ảnh thành một hình ảnh duy nhất theo lập trình bằng C#. Hướng dẫn từng bước và các mẫu mã sẽ trình bày cách hợp nhất hình ảnh theo chiều ngang hoặc chiều dọc.

C# API để hợp nhất hình ảnh - Tải xuống miễn phí

Để hợp nhất nhiều hình ảnh thành một hình ảnh duy nhất, chúng tôi sẽ sử dụng Aspose.Imaging for .NET. Đây là một API xử lý hình ảnh mạnh mẽ và giàu tính năng cho phép bạn thao tác với nhiều định dạng hình ảnh. Bạn có thể tải xuống API hoặc cài đặt nó bằng NuGet.

PM> Install-Package Aspose.Imaging

Hợp nhất nhiều hình ảnh trong C#

Có hai cách để hợp nhất hình ảnh thành một hình ảnh duy nhất: theo chiều dọc và chiều ngang. Trong phương pháp trước đây, các hình ảnh được nối với nhau theo chiều dọc, trong khi ở phương pháp sau, các hình ảnh được kết hợp lần lượt theo chiều ngang. Trong các phần sau, bạn sẽ học cả hai phương pháp với các mẫu mã.

C# Hợp nhất hình ảnh theo chiều dọc

Sau đây là các bước để ghép ảnh theo chiều dọc bằng C#.

  • Đầu tiên, chỉ định đường dẫn của các hình ảnh trong một mảng chuỗi.
  • Sau đó, tạo Danh sách Kích thước và lưu trữ kích thước của từng hình ảnh vào đó.
  • Tính chiều cao và chiều rộng của hình ảnh kết quả.
  • Tạo một đối tượng của lớp StreamSource và khởi tạo nó bằng một MemoryStream mới.
  • Tạo một đối tượng của lớp JpegOptions và thiết lập các tùy chọn của nó.
  • Khởi tạo lớp JpegImage cho hình ảnh mới và khởi tạo nó bằng JpegOptions cũng như chiều cao và chiều rộng được tính toán.
  • Lặp lại qua danh sách các hình ảnh và trong mỗi lần lặp lại, tải hình ảnh vào một đối tượng RasterImage.
  • Tạo Hình chữ nhật cho mỗi hình ảnh và thêm nó vào hình ảnh mới bằng phương thức JpegImage.SaveArgb32Pixels().
  • Tăng chiều cao đường khâu trong mỗi lần lặp.
  • Cuối cùng, lưu hình ảnh mới bằng phương thức JpegImage.Save (string).

Mẫu mã sau đây cho thấy cách hợp nhất hình ảnh theo chiều dọc trong C#.

// Tạo danh sách hình ảnh
string[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg", "image5.png" };

// Nhận kích thước của hình ảnh kết quả
List<Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
    using (RasterImage image = (RasterImage)Image.Load(imagePath))
    {
        imageSizes.Add(image.Size);
    }
}

int newWidth = imageSizes.Max(size => size.Width);
int newHeight = imageSizes.Sum(size => size.Height);

// Kết hợp các hình ảnh thành một hình mới
using (MemoryStream memoryStream = new MemoryStream())
{
    // Tạo nguồn đầu ra
    StreamSource outputStreamSource = new StreamSource(memoryStream);
    
    // Tạo các tùy chọn jpeg
    JpegOptions options = new JpegOptions() { Source = outputStreamSource, Quality = 100 };
    
    // Tạo hình ảnh đầu ra
    using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
    {
        int stitchedHeight = 0;
        // Hợp nhất hình ảnh
        foreach (string imagePath in imagePaths)
        {
            using (RasterImage image = (RasterImage)Image.Load(imagePath))
            {
                Rectangle bounds = new Rectangle(0, stitchedHeight, image.Width, image.Height);
                newImage.SaveArgb32Pixels(bounds, image.LoadArgb32Pixels(image.Bounds));
                stitchedHeight += image.Height;
            }
        }
        
        // Lưu hình ảnh đã hợp nhất
        newImage.Save("merged-image.jpg");
    }
}

Hợp nhất hình ảnh theo chiều ngang trong C#

Sau đây là các bước ghép ảnh theo chiều ngang bằng C#.

  • Đầu tiên, chỉ định đường dẫn của các hình ảnh trong một mảng chuỗi.
  • Sau đó, tạo Danh sách Kích thước và lưu trữ kích thước của từng hình ảnh vào đó.
  • Tính chiều cao và chiều rộng của hình ảnh kết quả.
  • Tạo một nguồn mới bằng cách sử dụng FileCreateSource (String, Boolean) và khởi tạo nó bằng đường dẫn của tệp.
  • Tạo một đối tượng của lớp JpegOptions và thiết lập các tùy chọn của nó.
  • Khởi tạo lớp JpegImage cho hình ảnh mới và khởi tạo nó bằng JpegOptions cũng như chiều cao và chiều rộng được tính toán.
  • Lặp lại qua danh sách các hình ảnh và trong mỗi lần lặp lại, tải hình ảnh vào đối tượng RasterImage.
  • Tạo Hình chữ nhật cho mỗi hình ảnh và thêm nó vào hình ảnh mới bằng phương thức JpegImage.SaveArgb32Pixels().
  • Tăng chiều rộng đường khâu trong mỗi lần lặp.
  • Sau khi hoàn tất, hãy lưu hình ảnh mới bằng phương thức JpegImage.Save (string).

Mẫu mã sau đây cho thấy cách hợp nhất nhiều hình ảnh theo chiều ngang.

// Tạo danh sách hình ảnh
string[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg", "image4.JPG", "image5.png" };

// Để tạo một hình ảnh tạm thời
string tempFilePath = "temp.jpg";

// Nhận kích thước hình ảnh kết quả
List <Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
    using (RasterImage image = (RasterImage)Image.Load(imagePath))
    {
        imageSizes.Add(image.Size);
    }
}

int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Kết hợp hình ảnh thành hình mới
Source tempFileSource = new FileCreateSource(tempFilePath, isTemporal: true);

// Tạo các tùy chọn jpeg
JpegOptions options = new JpegOptions() { Source = tempFileSource, Quality = 100 };
using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
{
    int stitchedWidth = 0;
    
    // Hợp nhất hình ảnh
    foreach (string imagePath in imagePaths)
    {
        using (RasterImage image = (RasterImage)Image.Load(imagePath))
        {
            Rectangle bounds = new Rectangle(stitchedWidth, 0, image.Width, image.Height);
            newImage.SaveArgb32Pixels(bounds, image.LoadArgb32Pixels(image.Bounds));
            stitchedWidth += image.Width;
        }
    }
    
    // Lưu hình ảnh đã hợp nhất
    newImage.Save(outputPath);
}

API hợp nhất hình ảnh C# - Nhận giấy phép miễn phí

Bạn có thể nhận giấy phép tạm thời miễn phí và hợp nhất các hình ảnh mà không có giới hạn đánh giá.

Sự kết luận

Trong bài viết này, bạn đã học cách ghép nhiều ảnh thành một ảnh duy nhất bằng C#. Các mẫu mã đã chứng minh cách kết hợp các hình ảnh theo chiều dọc và chiều ngang. Ngoài ra, bạn có thể khám phá thêm về API xử lý ảnh .NET bằng cách sử dụng tài liệu. Ngoài ra, bạn có thể chia sẻ các thắc mắc của mình với chúng tôi qua diễn đàn của chúng tôi.

Xem thêm

Thông tin: Aspose cung cấp ứng dụng web Ghép ảnh MIỄN PHÍ. Sử dụng dịch vụ trực tuyến này, bạn có thể hợp nhất hình ảnh JPG sang JPG hoặc PNG thành PNG, tạo lưới ảnh, v.v.