Convertir une image en Art ASCII avec PowerShell
I. Présentation
Dans cet article, on se retrouve pour voir quelques choses de plutôt fun : la conversion de n'importe quelle image en Art ASCII, à l'aide de PowerShell.
Pour rappel, l'Art ASCII consiste à créer une image uniquement à l'aide des caractères (lettres et caractères spéciaux) contenus dans le code ASCII. Voici la fameuse table ASCII :
L'astuce pour le réaliser en PowerShell nous provient d'Idera et de la section "PowerTips. Nous allons voir ensemble comment utiliser la fonction fournie.
Code source : PowerTips
II. Convert-ImageToAsciiArt
La fonction se nomme "Convert-ImageToAsciiArt" et contient le code suivant :
function Convert-ImageToAsciiArt { param( [Parameter(Mandatory)][String] $Path, [ValidateRange(20,20000)] [int]$MaxWidth=80, # character height:width ratio [float]$ratio = 1.5 ) # load drawing functionality Add-Type -AssemblyName System.Drawing # characters from dark to light $characters = '$#H&@*+;:-,. '.ToCharArray() $c = $characters.count # load image and get image size $image = [Drawing.Image]::FromFile($path) [int]$maxheight = $image.Height / ($image.Width / $maxwidth)/ $ratio # paint image on a bitmap with the desired size $bitmap = new-object Drawing.Bitmap($image,$maxwidth,$maxheight) # use a string builder to store the characters [System.Text.StringBuilder]$sb = "" # take each pixel line... for ([int]$y=0; $y -lt $bitmap.Height; $y++){ # take each pixel column... for ([int]$x=0; $x -lt $bitmap.Width; $x++){ # examine pixel $color = $bitmap.GetPixel($x,$y) $brightness = $color.GetBrightness() # choose the character that best matches the # pixel brightness [int]$offset = [Math]::Floor($brightness*$c) $ch = $characters[$offset] if (-not $ch){ $ch = $characters[-1] } # add character to line $null = $sb.Append($ch) } # add a new line $null = $sb.AppendLine() } # clean up and return string $image.Dispose() $sb.ToString() }
Pour l'utiliser, c'est relativement simple, nous allons appeler la fonction :
$Path = "C:\TEMP\image-source.jpg" $OutPath = "C:\TEMP\image-art-ascii.txt" Convert-ImageToAsciiArt -Path $Path -MaxWidth 400 | Set-Content -Path $OutPath -Encoding UTF8 Invoke-Item -Path $OutPath
Dans l'exemple ci-dessus, nous allons prendre le fichier "C:\TEMP\image-source.jpg" et créer le fichier "C:\TEMP\image-art-ascii.txt" en Art ASCII pour la sortie. Quant au paramètre MaxWidth, il sert à indiquer la largeur max du fichier de sortie.
Voilà le résultat, en vue dézoomé, ce qui donne l'impression d'avoir une photo alors qu'il s'agit d'un fichier texte uniquement avec des caractères ASCII (à droite, bien sûr) :
Plutôt cool, non ? 🙂
Bonjour,
Je voudrais essayer d’organiser des photos via powershell en utilisant la date de prise de vue.
L’idée serais que Powershell crée des fichiers nommés par date de prise de vue des photos et classe chaque photo dans son dossier respectif.
Est ce que cela semble faisable ?
Merci beaucoup