using Aspose.Imaging;
using Aspose.Imaging.FileFormats.Apng;
using Aspose.Imaging.FileFormats.Dicom;
using Aspose.Imaging.FileFormats.Gif;
using Aspose.Imaging.FileFormats.Gif.Blocks;
using Aspose.Imaging.FileFormats.Tiff;
using Aspose.Imaging.FileFormats.Tiff.Enums;
using Aspose.Imaging.FileFormats.Webp;
using Aspose.Imaging.ImageOptions;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

string templatesFolder = @"c:\Users\USER\Downloads\templates\";
string dataDir = templatesFolder;

MultipageFromVector();

File.Delete(dataDir + "result.tiff");
File.Delete(dataDir + "result.png");
File.Delete(dataDir + "result2.png");
File.Delete(dataDir + "result3.png");

void MultipageFromVector()
{
    // Rasterize vector images
    RasterizeSvgToPng(dataDir + "template.svg", dataDir + "result.png");
    RasterizeSvgToPng(dataDir + "template.svg", dataDir + "result2.png");
    RasterizeSvgToPng(dataDir + "template.svg", dataDir + "result3.png");    

    // Load frames
    var frames = LoadFrames().ToArray();

    // Create TIFF image using the first frame
    using (var image = new TiffImage(new TiffFrame(frames[0])))
    {
        // Add frames to the TIFF image using the AddPage method
        for (var index = 1; index < frames.Length; index++)
        {
            image.AddPage(frames[index]);
        }

        // Save TIFF image using options
        var options = new TiffOptions(TiffExpectedFormat.TiffJpegRgb);
        image.Save(dataDir + "result.tiff", options);
    }

    foreach (RasterImage image in frames)
    {
        image.Dispose();
    }
}

void RasterizeSvgToPng(string inputPath, string outputPath)
{
    // Load vector image
    using (var image = Image.Load(inputPath))
    {
        // Save PNG image
        image.Save(outputPath, new PngOptions
        {
            // Create rasterization options
            VectorRasterizationOptions = new SvgRasterizationOptions
            {
                PageWidth = image.Width,
                PageHeight = image.Height
            }
        });
    }
}

IEnumerable<RasterImage> LoadFrames()
{
    foreach (var filePath in new string[] { "result.png", "result2.png", "result3.png" })
    {
        yield return (RasterImage)Image.Load(dataDir + filePath);
    }
}