C#で画像をマージする

この記事では、C#を使用してプログラムで複数の画像を1つの画像にマージまたは結合する方法を学習します。ステップバイステップガイドとコードサンプルは、画像を水平または垂直にマージする方法を示します。

画像をマージするC#API

複数の画像を1つの画像にマージするには、Aspose.Imaging for .NETを使用します。これは、強力で機能豊富な画像処理APIであり、さまざまな画像形式を操作できます。 APIをダウンロードするか、NuGetを使用してインストールできます。

PM> Install-Package Aspose.Imaging

C#を使用して複数の画像をマージする

画像を1つにマージするには、垂直方向と水平方向の2つの方法があります。前者の方法では、画像は垂直方向に互いに追加されますが、後者の方法では、画像は水平方向に次々に結合されます。次のセクションでは、コードサンプルを使用して両方の方法を学習します。

画像を垂直方向にマージ

以下は、C#を使用して画像を垂直方向にマージする手順です。

  • まず、文字列配列で画像のパスを指定します。
  • 次に、Sizeのリストを作成し、各画像のサイズを保存します。
  • 結果の画像の高さと幅を計算します。
  • StreamSourceクラスのオブジェクトを作成し、新しいMemoryStreamで初期化します。
  • JpegOptionsクラスのオブジェクトを作成し、そのオプションを設定します。
  • 新しい画像のJpegImageクラスをインスタンス化し、JpegOptionsと計算された高さと幅で初期化します。
  • 画像のリストを反復処理し、各反復でRasterImageオブジェクトに画像をロードします。
  • 画像ごとにRectangleを作成し、JpegImage.SaveArgb32Pixels()メソッドを使用して新しい画像に追加します。
  • 各反復でステッチの高さを増やします。
  • 最後に、JpegImage.Save(string)メソッドを使用して新しい画像を保存します。

次のコードサンプルは、画像を垂直方向にマージする方法を示しています。

// 画像のリストを作成する
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#を使用して画像を水平方向に結合する手順です。

  • まず、文字列配列で画像のパスを指定します。
  • 次に、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);
}

無料のAPIライセンスを取得する

評価の制限なしにAPIを使用するために、無料の一時ライセンスを取得できます。

結論

この記事では、C#を使用して複数の画像を1つの画像にマージする方法を学習しました。コードサンプルは、画像を垂直方向と水平方向に組み合わせる方法を示しています。 ドキュメントを使用して、.NET画像処理APIの詳細を調べることができます。また、フォーラムを介してクエリを共有することもできます。

関連項目

情報:Asposeは無料のコラージュWebアプリを提供しています。このオンラインサービスを使用すると、JPGからJPGまたはPNGからPNGの画像をマージしたり、写真グリッドを作成したりできます。