گاهی اوقات نیاز داریم تا تصاویری را با ترکیب چند تصویر JPG ایجاد کنیم. این مقاله توضیح می‌دهد که چگونه این کار را در C# انجام دهیم.

API تصویربرداری C# – دانلود رایگان

Aspose.Imaging for .NET مجموعه‌ای از توابع انعطاف‌پذیر برای ایجاد و دستکاری تصاویر در برنامه‌های .NET ارائه می‌دهد. این امکان را می‌دهد که فایل‌های JPG را در چند خط کد ترکیب کنید. شما می‌توانید آن را در داخل برنامه .NET خود با استفاده از NuGet نصب کنید یا download 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";

// Getting resulting image size.
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);
}

تصاویر ورودی

First Image

First Image

تصویر دوم

تصویر دوم

Output Image

تصویر ادغام شده به صورت افقی

تصویر ادغام شده به صورت افقی

تصاویر 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 انجام دهید (به جای .jpg از پسوند .pdf استفاده کنید).

// یک آرایه از تصاویری که می‌خواهید ادغام کنید.
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";

// Getting resulting image size.
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 ذخیره کنید. برای اطلاعات بیشتر، لطفاً به documentation Aspose.Imaging for .NET مراجعه کنید. اگر سؤالی دارید، لطفاً در تماس با ما در our Support Forum احساس راحتی کنید.

به همچنین نگاه کنید