Đôi khi chúng ta có nhu cầu tạo một hình ảnh bằng cách kết hợp nhiều hình ảnh JPG lại với nhau. Bài viết này giải thích cách thực hiện điều này trong C#.

API hình ảnh C# – Tải xuống miễn phí

Aspose.Imaging for .NET cung cấp một số quy trình linh hoạt để tạo và thao tác hình ảnh trong các ứng dụng .NET. Nó cho phép bạn kết hợp các tệp JPG trong một vài dòng mã. Bạn có thể cài đặt nó trong ứng dụng .NET của mình bằng cách sử dụng NuGet hoặc tải xuống DLL của API.

Install-Package Aspose.Imaging

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

Sau đây là các bước để hợp nhất hình ảnh JPEG theo chiều ngang trong C#.

  • Tạo một mảng hình ảnh JPEG mà bạn muốn hợp nhất.
  • Tính chiều rộng của hình ảnh thu được bằng cách cộng chiều rộng của tất cả hình ảnh trong mảng và chiều cao bằng cách tìm chiều cao tối đa của hình ảnh trong mảng.
  • Tạo một hình ảnh mới bằng lớp JpegImage và đặt chiều rộng và chiều cao của nó thành chiều rộng và chiều cao được tính toán ở bước cuối cùng.
  • Lặp lại mảng hình ảnh (bạn muốn hợp nhất) và thực hiện các tác vụ sau trên mỗi hình ảnh:
    • Tải pixel của hình ảnh bằng phương pháp LoadArgb32Pixels và lưu chúng vào hình ảnh thu được bằng phương pháp SaveArgb32Pixels. Phương thức này cũng lấy đối tượng Hình chữ nhật làm đối số xác định vị trí của hình ảnh trong hình ảnh kết quả.
  • Lưu hình ảnh thu được dưới dạng hình ảnh JPEG.

Mẫu mã sau đây cho biết cách nối các hình ảnh JPEG theo chiều ngang trong C#.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Aspose.Imaging;
using Aspose.Imaging.FileFormats.Jpeg;
using Aspose.Imaging.ImageOptions;
using Aspose.Imaging.Sources;

// Mảng hình ảnh bạn muốn hợp nhất.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

// Tên của tập tin đầu ra/kết quả.
string outputPath = "MergeImages_Horizontally.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);
    }
}

// Chiều rộng và chiều cao của hình ảnh kết quả
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Hợp nhất các hình ảnh thành một.
Source tempFileSource = new FileCreateSource("temp.jpg", isTemporal: true);
JpegOptions options = new JpegOptions() { Source = tempFileSource, Quality = 100 };
using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
{
    int stitchedWidth = 0;
    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;
        }
    }

    newImage.Save(outputPath);
}

Nhập hình ảnh

First Image

First Image

Second Image

Second Image

Hình ảnh đầu ra

Horizontally Merged Image

Horizontally Merged Image

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

Các bước ghép ảnh JPEG theo chiều dọc cũng tương tự như trên. Một điểm khác biệt nhỏ là chúng tôi tính chiều cao của hình ảnh thu được bằng cách cộng chiều cao của tất cả hình ảnh trong mảng và chiều rộng bằng cách tìm chiều rộng tối đa của hình ảnh trong mảng. Mẫu mã sau đây cho biết cách nối các hình ảnh JPEG theo chiều dọc trong C#.

// Một mảng hình ảnh bạn muốn hợp nhất
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

string outputPath = "MergeImages_Vertically.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);
    }
}

// Chiều rộng và chiều cao của hình ảnh thu được
int newWidth = imageSizes.Max(size => size.Width);
int newHeight = imageSizes.Sum(size => size.Height);

// Hợp nhất các hình ảnh thành một.
using (MemoryStream memoryStream = new MemoryStream())
{
    StreamSource outputStreamSource = new StreamSource(memoryStream);
    JpegOptions options = new JpegOptions() { Source = outputStreamSource, Quality = 100 };
    using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
    {
        int stitchedHeight = 0;
        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;
            }
        }

        newImage.Save(outputPath);
    }
}
Vertically Merged Image

Vertically Merged Image

Hợp nhất hình ảnh JPG thành PDF trong C#

Bạn có thể có nhu cầu kết hợp các hình ảnh JPEG thành PDF. Bạn có thể thực hiện việc này chỉ bằng cách thực hiện một thay đổi nhỏ trong phương thức Image.Save(sử dụng phần mở rộng .pdf thay vì .jpg).

// Một mảng hình ảnh bạn muốn hợp nhất.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

string outputPath = "MergeHorizontalAsPDF";
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);
    }
}

// Chiều rộng và chiều cao của hình ảnh kết quả.
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Hợp nhất các hình ảnh thành một.
Source tempFileSource = new FileCreateSource(tempFilePath, isTemporal: true);
JpegOptions options = new JpegOptions() { Source = tempFileSource, Quality = 100 };
using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
{
    int stitchedWidth = 0;
    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;
        }
    }

    newImage.Save(outputPath + ".pdf", new PdfOptions());
}

Hợp nhất hình ảnh JPG thành PNG trong C#

Tương tự, bạn có thể muốn kết hợp các hình ảnh JPEG thành PNG. Như đã trình bày ở trên, bạn chỉ cần sử dụng phần mở rộng .png thay vì .jpg trong phương thức Image.Save.

// Một mảng hình ảnh bạn muốn hợp nhất.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

string outputPath = "MergeHorizontalAsPNG";

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

// Chiều rộng và chiều cao của hình ảnh kết quả.
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Hợp nhất hình ảnh thành một và lưu dưới dạng PNG
using (MemoryStream memoryStream = new MemoryStream())
{
    StreamSource outputStreamSource = new StreamSource(memoryStream);
    JpegOptions options = new JpegOptions() { Source = outputStreamSource, Quality = 100 };
    using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
    {
        int stitchedWidth = 0;
        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;
            }
        }

        newImage.Save(outputPath + ".png", new PngOptions());
    }
}

Phần kết luận

Trong bài viết này, bạn đã học cách nối các hình ảnh JPEG trong C#. Bạn có thể kết hợp chúng theo chiều ngang hoặc chiều dọc. Bạn cũng đã học cách lưu hình ảnh đã hợp nhất dưới dạng PDF hoặc PNG. Để biết thêm thông tin, vui lòng kiểm tra tài liệu của Aspose.Imaging for .NET. Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với chúng tôi tại Diễn đàn hỗ trợ của chúng tôi.

Xem thêm