Tutoriales de WordPress de Confianza, cuando más los necesitas.
Guía para Principiantes de WordPress
Copa WPB
25 Millones+
Sitios web que usan nuestros plugins
16+
Años de experiencia en WordPress
3000+
Tutoriales de WordPress de expertos

Cómo poner imágenes en escala de grises en WordPress

¿Te encuentras cambiando constantemente entre WordPress y un editor de fotos solo para poner las imágenes en escala de grises antes de subirlas? Es un proceso tedioso e ineficiente editar cada foto individualmente de antemano.

Afortunadamente, a través de años de experimentación con WordPress, hemos descubierto una forma sencilla de poner automáticamente las imágenes en escala de grises durante la carga, ahorrándote un tiempo valioso.

En este artículo, te mostraremos cómo poner imágenes en escala de grises en WordPress mientras las subes a tu sitio, paso a paso.

Imágenes en escala de grises en WordPress

¿Cuándo deberías usar imágenes en escala de grises en WordPress?

Las imágenes en escala de grises eliminan toda la información de color, dejando que los colores de la imagen muestren solo tonos de gris, variando entre blanco y negro.

Bajo ciertas situaciones, usar imágenes en escala de grises puede ser beneficioso para tu sitio web de WordPress. Por ejemplo, puedes usarlo para mejorar la legibilidad de los objetos que se muestran en la imagen.

O, simplemente puedes querer usar imágenes en escala de grises para crear un look clásico y atemporal para tu sitio web.

Por otro lado, las imágenes en escala de grises también se usan comúnmente para el procesamiento de imágenes debido a su pequeño tamaño. Esto permite a los desarrolladores ejecutar operaciones complejas en un tiempo menor.

Dicho esto, veamos cómo puedes convertir tus imágenes a escala de grises en WordPress al subirlas.

Poner imágenes en escala de grises al subirlas en WordPress

Cuando se trata de agregar imágenes en WordPress, tendrías que editarlas antes de subirlas usando un software de edición de fotos como Photoshop y convertir imágenes a color a escala de grises.

Si tienes cientos o miles de imágenes para subir, entonces puede llevar mucho tiempo editar cada imagen manualmente.

Sin embargo, puedes convertirlas automáticamente en imágenes en escala de grises al subirlas. Para empezar, todo lo que tienes que hacer es agregar el siguiente código al archivo functions.php de tu tema:

add_filter('wp_generate_attachment_metadata','rb_bw_filter');
   
function rb_bw_filter($meta) {
   
    $path = wp_upload_dir(); // get upload directory
    $file = $path['basedir'].'/'.$meta['file']; // Get full size image
   
    $files[] = $file; // Set up an array of image size urls
   
    foreach ($meta['sizes'] as $size) {
        $files[] = $path['path'].'/'.$size['file'];
    }
   
    foreach ($files as $file) { // iterate through each image size
   
        // Convert image to grayscale credit to http://ottopress.com/2011/customizing-wordpress-images/
   
        list($orig_w, $orig_h, $orig_type) = @getimagesize($file);
        $image = wp_load_image($file);
        imagefilter($image, IMG_FILTER_GRAYSCALE);
        switch ($orig_type) {
            case IMAGETYPE_GIF:
                imagegif( $image, $file );
                break;
            case IMAGETYPE_PNG:
                imagepng( $image, $file );
                break;
            case IMAGETYPE_JPEG:
                imagejpeg( $image, $file );
                break;
        }
    }
    return $meta;
}

Una forma sencilla de agregar código a los archivos del tema es usando el plugin WPCode para WordPress.

Es el mejor plugin de fragmentos de código que te ayuda a ejecutar fragmentos de código sin necesidad de editar manualmente el archivo functions.php de tu tema. De esa manera, no tienes que preocuparte por romper tu sitio.

WPCode

Primero, necesitarás descargar e instalar el plugin gratuito WPCode en tu sitio. Si necesitas ayuda, sigue nuestra guía sobre cómo instalar un plugin de WordPress.

Nota: La versión gratuita de WPCode ofrece todo lo que necesitas para agregar fácilmente código personalizado en WordPress. Para funciones más avanzadas como una biblioteca de fragmentos en la nube privada, fragmentos programados, píxeles de conversión y más, puedes actualizar a WPCode Pro.

Tras la activación, puedes dirigirte a Fragmentos de Código » + Agregar Nuevo desde tu panel de WordPress.

Luego, navega a la opción ‘Agregar tu código personalizado (Nuevo fragmento)’ y haz clic en el botón ‘+ Agregar fragmento personalizado’.

Añadir código personalizado en WPCode

A continuación, debes seleccionar ‘Fragmento de PHP’ como tipo de código de las opciones que aparecen.

Seleccionar fragmento de PHP como tipo de código

Ahora, en la página Crear fragmento personalizado, procede a ingresar un nombre para tu fragmento. Puede ser cualquier cosa que te ayude a recordar para qué es el código.

Luego, pega el código anterior en el área de ‘Vista previa del código’.

Agregar fragmento de código para imágenes en escala de grises

Después de ingresar el código, puedes desplazarte hacia abajo hasta la sección ‘Inserción’.

Aquí, puedes dejar seleccionada la opción ‘Inserción automática’. Esto insertará y ejecutará el código automáticamente por ti.

Métodos de inserción de fragmentos en WPCode

Por último, regresa a la parte superior de la pantalla y cambia el interruptor de ‘Inactivo’ a ‘Activo’ y haz clic en el botón ‘Guardar fragmento’.

Guarda y activa tu fragmento de código personalizado

A continuación, puedes probar el código editando o agregando una nueva página. Cuando estés en el editor de WordPress, haz clic en el botón ‘+’ y agrega un bloque de Imagen.

Ahora puedes subir cualquier imagen a tu blog de WordPress, y se convertirá automáticamente en una imagen en escala de grises.

Convertir imágenes a escala de grises al subirlas

Esperamos que este artículo te haya ayudado a aprender cómo poner imágenes en escala de grises en WordPress. También puedes consultar nuestra guía sobre cómo agregar modo oscuro a tu sitio de WordPress y nuestras selecciones expertas del mejor software de diseño web.

Si te gustó este artículo, suscríbete a nuestro canal de YouTube para obtener tutoriales en video de WordPress. También puedes encontrarnos en Twitter y Facebook.

Descargo de responsabilidad: Nuestro contenido es compatible con el lector. Esto significa que si haces clic en algunos de nuestros enlaces, podemos ganar una comisión. Consulta cómo se financia WPBeginner, por qué es importante y cómo puedes apoyarnos. Aquí está nuestro proceso editorial.

El Kit de herramientas definitivo para WordPress

Obtén acceso GRATUITO a nuestro kit de herramientas: ¡una colección de productos y recursos relacionados con WordPress que todo profesional debería tener!

Interacciones del lector

17 CommentsLeave a Reply

  1. Gran consejo, solo me gustaría mencionar que para muchos usos podría ser mejor hacerlo simplemente a través del filtro CSS, por ejemplo:
    img.bw {
    filter: grayscale(1);
    }
    Incluso puedes, por ejemplo, mostrar en blanco y negro por defecto y a color al pasar el ratón por encima, o puedes hacer una animación de escala de grises a color completo y de vuelta, por ejemplo:
    img.bw {
    filter: grayscale(0);
    }

    img.bw.grey { filter: grayscale(1); transition-property: filter; transition-duration: 1s; }

    Yo tampoco creo que el filtro wp_generate_attachment_metadata sea el adecuado, ya que se llama en la creación de metadatos y no solo en la creación de imágenes, y realiza una segunda manipulación de imágenes, pero la solución adecuada sería mucho más larga, así que entiendo por qué se hace de esta manera

  2. Funciona bien, pero al subir, WP 4.3 arroja un error en la biblioteca de medios.
    Creo que he aplicado todas las correcciones escritas en los comentarios, pero todavía hay un error.

    mi código se ve así:

    add_filter(‘wp_generate_attachment_metadata’,’themename_bw_filter’);
    function themename_bw_filter($meta) {
    $time = substr( $meta[‘file’], 0, 7); // <- obtener la hora correcta de la carga
    $file = wp_upload_dir( $time ); // <- ubica el directorio de carga correcto
    $file = trailingslashit($file[‘path’]).$meta['sizes']['slide-pic']['file'];
    if( $file ) {
    list($orig_w, $orig_h, $orig_type) = @getimagesize($file);
    }
    $image = wp_load_image($file);
    imagefilter($image, IMG_FILTER_GRAYSCALE);
    switch ($orig_type) {
    case IMAGETYPE_GIF:
    imagegif( $image, $file );
    break;
    case IMAGETYPE_PNG:
    imagepng( $image, $file );
    break;
    case IMAGETYPE_JPEG:
    imagejpeg( $image, $file );
    break;
    }
    return $meta;
    }

  3. Sé que llego un poco tarde a la discusión, pero acabo de tener el mismo problema con un error (que otros reportan):

    imagefilter() espera que el parámetro 1 sea un recurso, se recibió una cadena

    Esto sucede cuando intentas subir una imagen a través de la ventana modal de medios mientras editas una publicación, anterior al mes actual, lo que aparentemente confunde a WordPress sobre en qué directorio está la imagen original y en qué directorio debe guardar la imagen en escala de grises.

    Esta es la solución:


    <?php
    add_filter('wp_generate_attachment_metadata','themename_bw_filter');
    function themename_bw_filter($meta) {
    $time = substr( $meta['file'], 0, 7); // <- obtener la hora correcta de la carga
    $file = wp_upload_dir( $time ); // <- localiza el directorio de carga correcto
    $file = trailingslashit($file['path']).$meta['sizes']['themename-bw-image']['file'];
    list($orig_w, $orig_h, $orig_type) = @getimagesize($file);
    $image = wp_load_image($file);
    imagefilter($image, IMG_FILTER_GRAYSCALE);
    switch ($orig_type) {
    case IMAGETYPE_GIF:
    imagegif( $image, $file );
    break;
    case IMAGETYPE_PNG:
    imagepng( $image, $file );
    break;
    case IMAGETYPE_JPEG:
    imagejpeg( $image, $file );
    break;
    }
    return $meta;
    }

    • @geertvdheide

      Si quisieras agregar soporte para múltiples tamaños, prueba lo que yo uso:

      if ( function_exists( ‘add_theme_support’ ) ){

      add_theme_support( ‘post-thumbnails’ );

      set_post_thumbnail_size( 50, 50, true );

      add_image_size( ‘medium-thumb’, 660, ”, true );

      add_image_size( ‘large-thumb’, 960, ”, true );

      add_image_size( ‘small-thumb’, 100, ”, true );

      }

      (La altura no está definida, solo el ancho.)

      tendrías que agregar los diferentes nombres para que la función se aplique a todos:

      [‘medium-thumb’ , ‘large-thumb’ , ‘small-thumb’] en el código del filtro.

      Llamar a la miniatura en tu tema es lo mismo que se indica en el artículo:

  4. ¡Gracias por compartir este código! Excepto que me encuentro con un problema extraño al intentar implementarlo. Está relacionado con el tamaño de la imagen subida (tamaño en píxeles, es decir, sus dimensiones). Copié el código literalmente en el functions.php de mi tema, y funciona de maravilla con imágenes más grandes que el tamaño especificado en la llamada a add_image_size. Pero al usar una imagen más pequeña o igual al tamaño especificado, el cargador de WordPress me da errores y no procesa el tamaño de la imagen (ya sea desde la sección de medios del entorno de administración, o desde una publicación o página específica). El error:

    Warning: imagefilter() expects parameter 1 to be resource, string given.

    Salgo de otra cosa en el error también, pero esta parece ser la causa principal. ¿Los datos de la imagen proporcionados a la función imagefilter no son válidos o no existen?

    ¿Alguna idea de qué está causando esto? La única diferencia real entre mi situación y una instalación limpia es que también he agregado algunas otras llamadas a add_image_size para otros propósitos en mi sitio. También estoy agregando el mismo tamaño dos veces (uno en blanco y negro, uno normal), pero eso no parece ser un problema con las imágenes más grandes.

    • @GEERTVDHEIDE

      y para otros que necesiten esto:

      Cuando el script está convirtiendo la imagen a escala de grises y el archivo subido no cumple con el tamaño de archivo, esto causa que el script falle. Para evitar esto, simplemente agregue una condición if() rápida para asegurarse de que tiene el $file.

      $file = trailingslashit($file[‘path’]).$meta[‘sizes’][‘themename-bw-image’][‘file’];
      if( $file ) {
      list($orig_w, $orig_h, $orig_type) = @getimagesize($file);
      ——– remainder of code until ——–
      return $meta;
      }

      Esto verificará para asegurarse de que el tamaño de archivo que ha solicitado exista antes de que intente convertirlo.

      ¡Espero que eso ayude!

  5. @Otto42 thank you! I had a bit of a hard time, actually and had to undoe it :( will pick it up tomorrow. It’s a good way to mix it up onsite

Deja una respuesta

Gracias por elegir dejar un comentario. Ten en cuenta que todos los comentarios son moderados de acuerdo con nuestra política de comentarios, y tu dirección de correo electrónico NO será publicada. Por favor, NO uses palabras clave en el campo del nombre. Tengamos una conversación personal y significativa.