在本文中,您将学习如何使用 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 图像,创建 照片网格 等等。