Como difuminar areas dentro de imágenes con Ubuntu

Como mencioné en un post anterior, ultimamente he estado trabajando en Ubuntu. Es curioso, estoy usando una MacBuntu le llamo yo. En casa teníamos esta Macbook Air, de 2012 (estamos en 2025 al momento de escribir este post) y es tan vieja, que Apple ya no dejaba actualizar el sistema operativo. Lo que terminé haciendo fue formatearla, instalar Ubuntu y heme aquí, posteando desde ella.

Tenía rato sin usar ninguna distro de Linux, trabajando normalmente en Mac OS, no tenía mucha necesidad. Hace poco estaba trabajando en un blog post y queria agregar unas imágenes a éste y estaba queriendo difuminar ciertas áreas en la imagen, para esconder cierta información.

Me encontré que no hay una aplicación grafica que venga pre-instalada en Ubuntu para lograr esto, una investigación rapidita en internet me dijo que se puede hacer con ImageMagick en la terminal.

El comando es:

convert input.jpg -region WxH+X+Y -blur RadiusxSigma +region output.jpg

Donde
convert es el comando para usar ImageMagick
input.jpg sería la imagen que queremos modificar, ya sea el path completo o si ya estamos en el directorio donde se encuentra, solo el nombre del archivo
con -region le decimos que es lo que queremos difuminar y tenemos que agregar un string que esta armado con varios parametros:
W es el width (ancho) del area que queremos difuminar
H es el height (alto) del mismo
X es la coordenada horizontal, de la esquina superior izquierda
Y es la coordenada vertical de esa misma esquina

Entonces, por ejemplo, si escribimos 100x50+200+30 le estamos diciendo que queremos una “caja” que mida 100 px de ancho por 50 pixeles de alto, y que la esquina superior izquierda de esa caja está en el punto (200,30)

Luego nos vamos al comando para hacer el difuminado. -blur toma 2 valores, radio y sigma. En la documentación dice que “El radio solo se utiliza para determinar el tamaño de la matriz que contiene la distribución gaussiana calculada. Debe ser un número entero. Si no se proporciona o se establece en cero, IM calculará el radio más grande posible que proporcione resultados significativos para la distribución gaussiana.”

Y acerca de Sigma dice lo siguiente: “El valor de sigma es el argumento importante y determina la cantidad real de desenfoque que se aplicará.” Entonces realmente hay que darle 2 números, donde el segundo es el importante, sigma para determinar que tan borrado lo queremos. En mi caso yo usé 0x5 y me funcionó bien, es cuestion de probar algunas combinaciones. Por ultimo el comando +region segun lo que leí es para excluir el resto de la imagen y que no se difumine toda, solo el recuadro establecido anteriormente

Y por ultimo se escribe el nombre del archivo (con path, si no estamos ahí) en donde se quiere generar la imagen. Si quieres sustituír la imagen original con la nueva con las secciones difuminadas, puedes escribir el mismo nombre de archivo como input y output y la va a reemplazar en su lugar (no lo recomiendo mucho porque si te equivocas, tu imagen original ya no está y no hay marcha atrás)

Ahora, ¿Cómo le hacemos para obtener esos valores?. Yo tomé mi imagen y la abrí con imageMagick la interfaz grafica… ¿No tenía, que no? pues si, pero no, para hacerlo vamos a donde esta el archivo, usando Nautilus o con lo que sea que navegues tus archivos y le das click derecho a la imagen que vas a usar. Ahí usas el menu para seleccionar Open with y buscamos ImageMagick en el diálogo.

open with dialog

Una vez hecho lo anterior, vamos a tener la imagen ahí visible, luego haremos los siguientes pasos:

  1. Click en la imagen para mostrar el menu
  2. Click en Image Edit…
  3. Click en Draw…

Eso nos va a abrir un pequeño recuadro en la parte superior izquierda de la imagen, con las coordenadas del puntero.

Ahora lo que vamos a hacer, es determinar las 2 esquinas diagonalmente opuestas del recuadro que queremos. ¿Para que? para de ahí determinar el width y el height. Utilicemos la imagen anterior para lograrlo, vamos a difuminar el tercer mensaje.

open with dialogopen with dialog

Entonces, en nuestro ejemplo tenemos las esquinas (92,183) y (394,211) entonces tenemos que hacer unos calculos.

width = 394-92
height = 211 - 183

Entonces con esto ya tenemos toda la informacion para armar nuestro comando, nos vamos a la terminal y ponemos lo siguiente.

convert image.jpg -region 302x28+92+183 -blur 0x5 +region image.jpg

Tuve que sacar la calculadora, hacer esas restas y editar esos resultados en el comando pero estamos bien. Vamos a intentar.

Ok. Ahora le vamos a subir el nivel un poco. Por ahí en un post anterior cuando empecé a buscar esto. Tuve que agregar tres areas difuminadas a una sola imagen. Entonces se convirto un poco engorroso, tener que buscar las coordenadas, sacar cuentas de las dimensiones del area a difuminar, recordar el formato del comando, que opciones son, y que valores asignarles a esas opciones.

Entonces lo que hice fue crear una funcion en Bash la cual va aceptar 4 datos.
1. El nombre del archivo que queremos modificiar
2. El nombre que queremos dar al archivo que vamos a crear (podemos nombrarlos igual para sobreescribir el archivo)
3. Coordenadas de la esquina superior izquierda del area de difuminado
4. Coordenadas de la esquina inferior derecha del area de difuminado

La función es la siguiente:

# Function for blurring images on specific regions
blur_images_region () {
    read -p "Input file path and name: " input_file
    read -p "Output file path and name: " output_file
    echo "Let get coordinates for the top-left corner"
    read -p "X point: " x_top_left
    read -p "Y point: " y_top_left
    echo "Now let's get the coordinates for the bottom-right corner"
    read -p "X point: " x_bottom_right
    read -p "Y point: " y_bottom_right
    width=$((x_bottom_right-x_top_left))
    height=$((y_bottom_right-y_top_left))
    region_string="${width}x${height}+${x_top_left}+${y_top_left}"
    convert ${input_file} -region ${region_string} -blur 0x5 +region ${output_file}
}

Que hace?
1. Obtiene todos los valores
2. Hace las restas para obtener el ancho y alto del area a difuminar
3. Genera, con esa información, el string que vamos a usar como parametro de la opción región
4. Y corre el comando, usando un blur 0x5.

Les dejo de tarea, agregar mas input reads para las dos variables del blur y así poder jugar con la apariencia del mismo.

Y eso es todo, felices difuminadas en Ubuntu!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.