<# .SYNOPSIS Converts images to ASCII art .DESCRIPTION This PowerShell script converts an image to ASCII art. .EXAMPLE PS> ./convert-image2ascii -InFile "C:\Folder\Image.jpg" -Width 32 -Height 32 .NOTES Author: Fxbyy #> function Convert-ImageToAscii { [CmdletBinding(DefaultParameterSetName = 'AutoSize')] param ( [Parameter(Mandatory = $true)] [string] $InFile, [Parameter(Mandatory = $false, ParameterSetName = 'CustomSize')] [int] $Width, [Parameter(Mandatory = $false, ParameterSetName = 'CustomSize')] [int] $Height, [Parameter(Mandatory = $false)] [switch] $Invert ) begin { $tempFile = "$PSScriptRoot\temp.jpg" [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") $img = [System.Drawing.Image]::FromFile((Get-Item $InFile)) if ($PSCmdlet.ParameterSetName -eq 'AutoSize') { [int]$Height = $Host.UI.RawUI.WindowSize.Height * ($img.Size.Width / $img.Size.Height) [int]$Width = $Height * ($img.Size.Width / $img.Size.Height) } else { if ($null -eq $Height -or $Height -eq 0) { [int]$Height = $Width * ($img.Size.Height / $img.Size.Width) } elseif ($null -eq $Width -or $Width -eq 0) { [int]$Width = $Height * ($img.Size.Width / $img.Size.Height) } } } process { $bmp = New-Object System.Drawing.Bitmap($Width, $Height) $graph = [System.Drawing.Graphics]::FromImage($bmp) $graph.DrawImage($img, 0, 0, $Width, $Height) $graph.Dispose() $img.Dispose() if ($Invert) { $symbols = " .,:~+t?xmoX#M%@" } else { $symbols = "@%M#Xomx?t+~:,. " } $res = "" foreach ($h in 1..$bmp.Height) { foreach ($w in 1..$bmp.Width) { $px = $bmp.GetPixel($w - 1, $h - 1) $brightness = (0.2126 * $px.R + 0.7152 * $px.G + 0.0722 * $px.B) if ($brightness -le 15) { $res += $symbols[0] + " " } elseif ($brightness -le 31) { $res += $symbols[1] + " " } elseif ($brightness -le 47) { $res += $symbols[2] + " " } elseif ($brightness -le 63) { $res += $symbols[3] + " " } elseif ($brightness -le 79) { $res += $symbols[4] + " " } elseif ($brightness -le 95) { $res += $symbols[5] + " " } elseif ($brightness -le 111) { $res += $symbols[6] + " " } elseif ($brightness -le 127) { $res += $symbols[7] + " " } elseif ($brightness -le 143) { $res += $symbols[8] + " " } elseif ($brightness -le 159) { $res += $symbols[9] + " " } elseif ($brightness -le 175) { $res += $symbols[10] + " " } elseif ($brightness -le 191) { $res += $symbols[11] + " " } elseif ($brightness -le 207) { $res += $symbols[12] + " " } elseif ($brightness -le 223) { $res += $symbols[13] + " " } elseif ($brightness -le 249) { $res += $symbols[14] + " " } else { $res += $symbols[15] + " " } } $res += "`n" } } end { $BitMap.Dispose() Remove-Item $tempFile -Force $res } }