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

IMAGE_FILE_NAME= 'example_image.dng';
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')

# Grayscale an image from cloud storage
def grayscale_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)
    
    folder = CLOUD_FOLDER # Input file is saved at the desired folder in the storage
    storage = nil # We are using default Cloud Storage
    request = AsposeImagingCloud::GrayscaleImageRequest.new(
          IMAGE_FILE_NAME, folder, storage)   

    updated_image = imaging_api.grayscale_image(request)

    # Save the image file to output folder
    image_name = 'updated_' + IMAGE_FILE_NAME
    path = File.absolute_path(File.join(OUTPUT_FOLDER, image_name))
    File.write(path, updated_image)

end

# Grayscale an image. Image data is passed in a request stream
def create_grayscaled_image_from_request
    
    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::CreateGrayscaledImageRequest.new(
          input_stream, out_path, storage)

    updated_image = imaging_api.create_grayscaled_image(request)

    # Save the image file to output folder
    image_name = 'updated_' + IMAGE_FILE_NAME
    path = File.absolute_path(File.join(OUTPUT_FOLDER, image_name))
    File.write(path, updated_image)

end