Иногда нам нужно создать изображение, объединив несколько изображений JPG вместе. В этой статье объясняется, как это сделать на C#.
- C# API обработки изображений — скачать бесплатно
- Объединение изображений JPG по горизонтали в C#
- Объединение изображений JPG по вертикали в C#
- Объединение изображений JPG в PDF на С#
- Объединение изображений JPG в PNG в C#
C# API обработки изображений — скачать бесплатно
Aspose.Imaging for .NET предоставляет ряд гибких подпрограмм для создания изображений и управления ими в приложениях .NET. Он позволяет объединять файлы JPG в несколько строк кода. Вы можете установить его в своем приложении .NET с помощью NuGet или скачать DLL API.
Install-Package Aspose.Imaging
Слияние изображений JPG по горизонтали в C#
Ниже приведены шаги для горизонтального слияния изображений JPEG в C#.
- Создайте массив изображений JPEG, которые вы хотите объединить.
- Вычислите ширину результирующего изображения, добавив ширину всех изображений в массиве и высоту, найдя максимальную высоту изображения в массиве.
- Создайте новое изображение с помощью класса JpegImage и установите его ширину и высоту, вычисленные на последнем шаге.
- Переберите массив изображений (которые вы хотите объединить) и выполните следующие задачи для каждого изображения:
- Загрузите пиксели изображения с помощью метода LoadArgb32Pixels и сохраните их в результирующем изображении с помощью метода SaveArgb32Pixels. Этот метод также принимает объект Rectangle в качестве аргумента, определяющего положение изображения в результирующем изображении.
- Сохраните полученное изображение в формате JPEG.
В следующем примере кода показано, как соединить изображения JPEG по горизонтали в 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;
// Массив изображений, которые вы хотите объединить.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };
// Имя выходного/результирующего файла.
string outputPath = "MergeImages_Horizontally.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("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);
}
Входные изображения


Выходное изображение

Слияние изображений JPG по вертикали в C#
Шаги для объединения изображений JPEG по вертикали такие же, как описано выше. Небольшое отличие состоит в том, что мы вычисляем высоту результирующего изображения, складывая высоту всех изображений в массиве и ширину, находя максимальную ширину изображения в массиве. В следующем примере кода показано, как вертикально соединить изображения JPEG в C#.
// Массив изображений, которые вы хотите объединить
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };
string outputPath = "MergeImages_Vertically.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.Max(size => size.Width);
int newHeight = imageSizes.Sum(size => size.Height);
// Объединение изображений в одно.
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);
}
}

Объединение изображений JPG в PDF на C#
Вам может понадобиться объединить изображения JPEG в PDF. Вы можете сделать это, просто внеся небольшое изменение в метод Image.Save (используйте расширение .pdf вместо .jpg).
// Массив изображений, которые вы хотите объединить.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };
string outputPath = "MergeHorizontalAsPDF";
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);
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());
}
Объединение изображений JPG в PNG в C#
Точно так же вы можете объединить изображения JPEG в PNG. Как показано выше, вам просто нужно использовать расширение .png вместо .jpg в методе Image.Save.
// Массив изображений, которые вы хотите объединить.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };
string outputPath = "MergeHorizontalAsPNG";
// Получение результирующего размера изображения.
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);
// Объединение изображений в одно и сохранение в формате 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());
}
}
Вывод
В этой статье вы узнали, как объединять изображения JPEG в C#. Вы можете комбинировать их горизонтально или вертикально. Вы также узнали, как сохранить объединенное изображение в формате PDF или PNG. Для получения дополнительной информации ознакомьтесь с документацией Aspose.Imaging for .NET. Если у вас есть какие-либо вопросы, обращайтесь к нам на наш форум поддержки.