Modificar una imagen con PowerShell

Modificar una imagen con PowerShell es una de las cosas que quiero compartir ya que puede ser muy útil, como por ejemplo, en reportes.

Crear una imagen

Para crear una imagen desde PowerShell vamos a ejecutar lo siguiente:

  #Cargo las librerías necesarias    
  Add-Type -AssemblyName System.Drawing
  
  $Filename = "$HOME\Imagen.png" 
  $Bmp = New-Object System.Drawing.Bitmap(250,250)
  $BrushBackGround = [System.Drawing.Brushes]::Red
  $Graphics = [System.Drawing.Graphics]::FromImage($Bmp)
  $Graphics.FillRectangle($BrushBackGround,0,0,$Bmp.Width,$Bmp.Height)
  $Graphics.Dispose() 
  $Bmp.Save($Filename)
  
  #Abro la imagen
  Invoke-Item $Filename

Con todo el código anterior, generamos una imagen en la raíz de nuestro perfil, con el nombre Imagen.png que básicamente es un cuadrado de color rojo.

Ok, no es mucho, pero al menos solo usamos la consola 😉

Vamos a ver como agregar texto a nuestra dibujo anterior.

Añadir texto

Para agregar texto debemos ingresar, por ejemplo:

  $Font = New-Object System.Drawing.Font('Consolas',18)

Y digo por ejemplo, porque en realidad se podría elegir otra fuente y otro tamaño. Habiendo definido la fuente y el tamaño, vamos a definir el color:

  $BrushFont = [System.Drawing.Brushes]::White

Y luego el texto a ingresar y su posición:

  $Graphics.DrawString('Hello World',$Font,$BrushFont,50,50)

Todo junto quedaría en este orden:

  Add-Type -AssemblyName System.Drawing
  
  $Filename = "$HOME\Imagen.png" 
  $Bmp = New-Object System.Drawing.Bitmap(250,250)
  #Creo el objeto fuente, con el tipo y tamaño
  $Font = New-Object System.Drawing.Font('Consolas',18)
  $BrushBackGround = [System.Drawing.Brushes]::Red
  #Asigno el color correspondiente al texto
  $BrushFont = [System.Drawing.Brushes]::White
  $Graphics = [System.Drawing.Graphics]::FromImage($Bmp) 
  $Graphics.FillRectangle($BrushBackGround,0,0,$Bmp.Width,$Bmp.Height)
  #Defino el texto y lo ubico en el cuadrado que dibujamos
  $Graphics.DrawString('Hello World',$Font,$BrushFont,50,100) 
  $Graphics.Dispose() 
  $Bmp.Save($Filename)
  
  Invoke-Item $Filename

Crear un círculo

Solo agregando 2 líneas podemos dibujar un círculo:

  $BrushCircle = [System.Drawing.Brushes]::Green
  $Graphics.FillEllipse($BrushCircle, 50, 0, 80, 80)

Polígono

Para crear un polígono vamos a necesitar lo siguiente:

  $BrushPolygon = [System.Drawing.Brushes]::Green
  $PointsNumber = 5
  $PolygonPoints = @()
  For ($i=1; $i -le $PointsNumber; $i++) {
    $Point = New-Object System.Drawing.Point ((Get-Random -minimum 0 -maximum $Bmp.Width), (Get-Random -minimum 0 -maximum $Bmp.Height))
    $PolygonPoints += $Point
  }
  $Graphics.FillPolygon($BrushPolygon, $PolygonPoints)

Obteniendo como resultado, algo así:

Polígono dibujado

Happy scripting!

Comments