require 'fileutils'
require 'aspose-imaging-cloud'

IMAGE_FILE_NAME= 'example_image.emz';
IMAGES_FOLDER = 'ExampleImages';
CLOUD_FOLDER = 'CloudImages';
OUTPUT_FOLDER = 'Output';

# Get ClientId and ClientSecret from https://dashboard.aspose.cloud/ 
# or use on-premise version (https://docs.aspose.cloud/imaging/getting-started/how-to-run-docker-container/)
imaging_api = AsposeImagingCloud::ImagingApi.new(client_secret, client_id, 'https://api.aspose.cloud')

# Convert the image from cloud storage
def convert_image_from_storage

    input_image = File.join(IMAGES_FOLDER, IMAGE_FILE_NAME)
    upload_file_request = AsposeImagingCloud::UploadFileRequest.new(File.join(CLOUD_FOLDER, IMAGE_FILE_NAME), input_image)
    result = self.imaging_api.upload_file(upload_file_request)
    if result.errors.any?
        puts('Uploading errors count: ' + result.errors.size.to_s)

    # Please refer to
    # https://docs.aspose.cloud/imaging/supported-file-formats/#convert
    # for possible output formats
    format = 'jpeg2000' # Resulting image format
    folder = CLOUD_FOLDER # Input file is saved at the desired folder in the storage
    storage = nil # We are using default Cloud Storage

    request = AsposeImagingCloud::ConvertImageRequest.new(IMAGE_FILE_NAME, format, folder, storage)   
    converted_image = imaging_api.convert_image(request)

    # Save the image file to output folder
    filename_part = File.basename(IMAGE_FILE_NAME, ".*")
    image_name = filename_part + '.' + 'jpeg2000'
    path = File.absolute_path(File.join(OUTPUT_FOLDER, image_name))
    File.write(path, converted_image)

end

# Convert an image. Image data is passed in a request stream
def create_converted_image_from_request

    # Please refer to
    # https://docs.aspose.cloud/imaging/supported-file-formats/#convert
    # for possible output formats
    format = 'jpeg2000' # Resulting image format
    storage = nil # We are using default Cloud Storage
    out_path = nil # Path to updated file (if this is empty, response contains streamed image)

    input_stream = File.open(File.join(IMAGES_FOLDER, IMAGE_FILE_NAME), 'r')
    request = AsposeImagingCloud::CreateConvertedImageRequest.new(input_stream, format, out_path, storage)
    converted_image = imaging_api.create_converted_image(request)

    # Save the image file to output folder
    filename_part = File.basename(IMAGE_FILE_NAME, ".*")
    image_name = filename_part + '.' + 'jpeg2000'
    path = File.absolute_path(File.join(OUTPUT_FOLDER, image_name))
    File.write(path, converted_image)

end