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í:
Happy scripting!
Comments