import com.aspose.imaging.cloud.sdk.model.requests.CreateDeskewedImageRequest;
import com.aspose.imaging.cloud.sdk.model.requests.DeskewImageRequest;

import java.nio.file.Files;
import java.nio.file.Paths;

string ImageFileName = "example_image.jpeg";
string ImagesFolder = "ExampleImages";
string CloudFolder = "CloudImages";
string OutputFolder = "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/)
ImagingApi api = new ImagingApi(argumentValues.ClientSecret, argumentValues.ClientId, "https://api.aspose.cloud");

/**
* Deskew an image from cloud storage.
*
* @throws Exception
*/
public void deskewImageFromStorage() throws Exception {

    // Upload image to cloud storage
    byte[] inputImage = Files.readAllBytes(Paths.get(ImagesFolder, ImageFileName));
    UploadFileRequest request = new UploadFileRequest(Paths.get(CloudFolder, ImageFileName).toString(), image, null);
    FilesUploadResult response = api.uploadFile(request);
    if(response.getErrors() != null && response.getErrors().size() > 0)
        throw new Exception("Uploading errors count: " + response.getErrors().size());

    // Please refer to https://docs.aspose.cloud/imaging/supported-file-formats/#update
    // for possible formats
    Boolean resizeProportionally = true;
    String bkColor = "white";
    String folder = CloudFolder; // Input file is saved at the desired folder in the storage
    String storage = null; // We are using default Cloud Storage

    DeskewImageRequest request = new DeskewImageRequest(ImageFileName, resizeProportionally, bkColor, folder, storage);
    byte[] updatedImage = api.deskewImage(request);

    // Save the image file to output folder
    String updatedImageName = "deskewed_" + ImageFileName;
    Path path = Paths.get(OutputFolder, updatedImageName).toAbsolutePath();
    Files.write(path, updatedImage);
}

/// <summary>
/// Deskew an image. Image data is passed in a request stream.
/// </summary>
public void createDeskewedImageFromRequest() throws Exception {

    byte[] inputStream = Files.readAllBytes(Paths.get(ImagesFolder, ImageFileName));

    // Please refer to https://docs.aspose.cloud/imaging/supported-file-formats/#update
    // for possible formats
    Boolean resizeProportionally = true;
    String bkColor = "white";
    String outPath = null; // Path to updated file (if this is empty, response contains streamed image)
    String storage = null; //  We are using default Cloud Storage

    CreateDeskewedImageRequest request = new CreateDeskewedImageRequest(inputStream, resizeProportionally, bkColor, outPath, storage);
    byte[] updatedImage = api.createDeskewedImage(request);  
    
    // Save the image file to output folder
    String updatedImageName = "deskewed_" + ImageFileName;
    Path path = Paths.get(OutputFolder, updatedImageName).toAbsolutePath();
    Files.write(path, updatedImage);
}