Src/Private/Get-DiaImagePercent.ps1
|
function Get-DiaImagePercent { <# .SYNOPSIS Used by As Built Report to get base64 image percentage calculated from image width. .DESCRIPTION This allow the diagram image to fit the report page margins .NOTES Version: 0.2.33 Author: Jonathan Colon .EXAMPLE .LINK #> [CmdletBinding()] [OutputType([Hashtable])] param ( [Parameter ( Position = 0, Mandatory = $false, HelpMessage = 'Please provide Graphviz object' )] [string] $GraphObj, [Parameter( Position = 1, Mandatory = $false, HelpMessage = 'Please provide image file path' )] [ValidateScript( { if (Test-Path -Path $_) { $true } else { throw "File $_ not found!" } })] [string] $ImageInput, [Parameter ( Mandatory = $false, HelpMessage = 'Set the image size in percent (100% is default)' )] [ValidateRange(10, 100)] [int] $Percent ) begin { # Validate mandatory parameters if ((-not $PSBoundParameters.ContainsKey('ImageInput')) -and (-not $PSBoundParameters.ContainsKey('GraphObj'))) { throw "Error: Please provide a image path or a graphviz string to process." } } process { if ($GraphObj) { $ImagePrty = @{} $Image_FromStream = @{ Width = 0 Height = 0 } switch ($PSVersionTable.Platform) { 'Unix' { & { if ([ImageProcessor]) { $Image_FromStream.Width = [ImageProcessor]::GetImageWidthFromBase64($GraphObj) $Image_FromStream.Height = [ImageProcessor]::GetImageHeightFromBase64($GraphObj) } else { throw "Unable to convert Graphviz object to base64 format needed to get image dimensions" } } } default { try { $Image_FromStream = [System.Drawing.Image]::FromStream((New-Object System.IO.MemoryStream(, [convert]::FromBase64String($GraphObj)))) } catch { throw "Unable to convert Graphviz object to base64 format needed to get image dimensions" } } } if ($Image_FromStream) { if ($Percent) { $ImagePrty = @{ 'Width' = ($Image_FromStream.Width / 100) * $Percent 'Height' = ($Image_FromStream.Height / 100) * $Percent } } else { $ImagePrty = @{ 'Width' = $Image_FromStream.Width 'Height' = $Image_FromStream.Height } } return $ImagePrty } else { Write-Verbose -Message "Unable to validate image dimensions" } } else { $ImagePrty = @{} try { $ImageFromFile = @{ Width = 0 Height = 0 } switch ($PSVersionTable.Platform) { 'Unix' { & { if ([ImageProcessor]) { $ImageFromFile.Width = [ImageProcessor]::GetImageWidthFromFile((Get-ChildItem -Path $ImageInput).FullName) $ImageFromFile.Height = [ImageProcessor]::GetImageHeightFromFile((Get-ChildItem -Path $ImageInput).FullName) } else { throw "Unable to get image dimensions on Unix platforms." } } } default { $ImageFromFile = [System.Drawing.Image]::FromFile((Get-ChildItem -Path $ImageInput).FullName) } } } catch { Write-Verbose -Message "Unable to validate image path needed to get image dimensions" Write-Debug -Message $($_.Exception.Message) } if ($ImageFromFile) { if ($Percent) { $ImagePrty = @{ 'Width' = ($ImageFromFile.Width / 100) * $Percent 'Height' = ($ImageFromFile.Height / 100) * $Percent } } else { $ImagePrty = @{ 'Width' = $ImageFromFile.Width 'Height' = $ImageFromFile.Height } } return $ImagePrty } else { Write-Verbose -Message "Unable to validate image dimensions" } } } end {} } # end |