在 C# 中合并图像

在本文中,您将学习如何使用 C# 以编程方式将多个图像合并或组合成单个图像。分步指南和代码示例将演示如何水平或垂直合并图像。

用于合并图像的 C# API - 免费下载

为了将多个图像合并为一个图像,我们将使用 Aspose.Imaging for .NET。它是一个功能强大且功能丰富的图像处理 API,可让您处理各种图像格式。您可以 下载 API 或使用 NuGet 安装它。

PM> Install-Package Aspose.Imaging

在 C# 中合并多个图像

有两种方法可以将图像合并为一个:垂直和水平。在前一种方法中,图像是垂直地相互附加的,而在后一种方法中,图像是水平地一个接一个地组合的。在以下部分中,您将通过代码示例学习这两种方法。

C# 垂直合并图像

以下是使用 C# 垂直合并图像的步骤。

  • 首先,在字符串数组中指定图像的路径。
  • 然后,创建一个 Size 列表并将每个图像的大小存储到其中。
  • 计算结果图像的高度和宽度。
  • 创建 StreamSource 类的对象并使用新的 MemoryStream 对其进行初始化。
  • 创建 JpegOptions 类的对象并设置其选项。
  • 为新图像实例化 JpegImage 类并使用 JpegOptions 和计算的高度和宽度对其进行初始化。
  • 遍历图像列表并在每次迭代中将图像加载到 RasterImage 对象中。
  • 为每个图像创建一个 Rectangle 并使用 JpegImage.SaveArgb32Pixels() 方法将其添加到新图像中。
  • 在每次迭代中增加缝合高度。
  • 最后,使用 JpegImage.Save(string) 方法保存新图像。

以下代码示例展示了如何在 C# 中垂直合并图像。

// 创建图像列表
string[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg", "image5.png" };

// 获取结果图像的大小
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);

// 将图像合并为新图像
using (MemoryStream memoryStream = new MemoryStream())
{
    // 创建输出源
    StreamSource outputStreamSource = new StreamSource(memoryStream);
    
    // 创建 jpeg 选项
    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("merged-image.jpg");
    }
}

在 C# 中水平合并图像

以下是使用 C# 水平组合图像的步骤。

  • 首先,在字符串数组中指定图像的路径。
  • 然后,创建一个 Size 列表并将每个图像的大小存储到其中。
  • 计算结果图像的高度和宽度。
  • 使用 FileCreateSource(String, Boolean) 创建一个新源并使用文件路径对其进行初始化。
  • 创建 JpegOptions 类的对象并设置其选项。
  • 为新图像实例化 JpegImage 类并使用 JpegOptions 和计算的高度和宽度对其进行初始化。
  • 遍历图像列表并在每次迭代中将图像加载到 RasterImage 对象中。
  • 为每个图像创建一个 Rectangle 并使用 JpegImage.SaveArgb32Pixels() 方法将其添加到新图像中。
  • 在每次迭代中增加缝合宽度。
  • 完成后,使用 JpegImage.Save(string) 方法保存新图像。

以下代码示例显示了如何水平合并多个图像。

// 创建图像列表
string[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg", "image4.JPG", "image5.png" };

// 创建临时映像
string tempFilePath = "temp.jpg";

// 获取结果图像的大小
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);

// 将图像合并为新图像
Source tempFileSource = new FileCreateSource(tempFilePath, isTemporal: true);

// 创建 jpeg 选项
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);
}

C# 图像合并 API - 获得免费许可证

您可以 获得免费的临时许可证 并合并图像而不受评估限制。

结论

在本文中,您学习了如何使用 C# 将多个图像合并为单个图像。代码示例演示了如何垂直和水平组合图像。此外,您可以使用 文档 探索有关 .NET 图像处理 API 的更多信息。此外,您可以通过我们的 论坛 与我们分享您的疑问。

也可以看看

信息:Aspose 提供了一个 免费拼贴网络应用程序。使用此在线服务,您可以合并 JPG 到 JPG 或 PNG 到 PNG 图像,创建 照片网格 等等。