Src/Private/ConvertTo-RotateImage.ps1

function ConvertTo-RotateImage {
    <#
    .SYNOPSIS
        Funtion to rotate image.
    .DESCRIPTION
        Rotate image to 90, 180 or 270 angle.
    .NOTES
        Version: 0.1.8
        Author: Jonathan Colon
        Twitter: @jcolonfzenpr
        Github: rebelinux
    .LINK
        https://github.com/rebelinux/Diagrammer.Core
    #>

    [CmdletBinding()]
    [OutputType([String])]
    Param
    (
        [Parameter(
            Position = 0,
            Mandatory = $true,
            HelpMessage = 'Please provide image file path'
        )]
        [ValidateScript( {
                if (Test-Path -Path $_) {
                    $true
                } else {
                    throw "File $_ not found!"
                }
            })]
        [string] $ImageInput,
        [Parameter(
            Position = 1,
            Mandatory = $true,
            HelpMessage = 'Allow to rotate the diagram output image. valid rotation degree (90, 180, 270)'
        )]
        [ValidateSet(0, 90, 180, 270)]
        [int] $Angle,
        [Parameter(
            Position = 2,
            Mandatory = $false,
            HelpMessage = 'Delete the rotated image file'
        )]
        [switch] $DeleteImage,
        [Parameter(
            Position = 3,
            Mandatory = $false,
            HelpMessage = 'Please provide the complete filepath to export the diagram'
        )]
        [string] $DestinationPath
    )

    begin {
        Add-Type -AssemblyName System.Windows.Forms
    }

    process {

        $ImageName = Get-ChildItem -Path $ImageInput
        $FileName = $ImageName.BaseName + "_Rotated" + $ImageName.Extension

        $TempImageOutput = Join-Path -Path ([system.io.path]::GetTempPath()) -ChildPath $FileName

        # Load image from path as bitmap
        $RotatedIMG = [System.Drawing.image]::FromFile($ImageName.FullName)

        if ($RotatedIMG -and $TempImageOutput) {
            # Rotate image to specified angle
            $RotatedIMG.rotateflip("Rotate$($Angle)FlipNone")
            # Save/Replace imge to original path
            $RotatedIMG.Save($TempImageOutput)

            $RotatedIMG.Dispose()

            if ($TempImageOutput) {
                Write-Verbose "Successfully rotated $ImageInput image."
                if ($PSBoundParameters.ContainsKey('DestinationPath')) {
                    try {
                        Copy-Item -Path $TempImageOutput -Destination $DestinationPath
                        Write-Verbose "Successfully replaced $DestinationPath with $TempImageOutput rotated image."
                    } catch {
                        Write-Verbose "Unable to replace $DestinationPath rotated image to $TempImageOutput diagram."
                        Write-Verbose $($_.Exception.Message)
                    }
                } else {
                    Write-Verbose "Successfully rotated $ImageInput diagram."
                    Get-ChildItem -Path $TempImageOutput
                }
            }
        }
    }
    end {}
}