Enmascaramiento de GIF con otros GIF | Programar Plus

El otro día, Cassie Evans tuiteó un truco realmente genial que nunca había visto antes: usar SVG para enmascarar un GIF encima de otro. El efecto es bastante encantador, especialmente si tomas un GIF colorido y lo colocas encima de uno monocromático:

Ver la pluma
Enmascarando gifs con otros gifs… (el enmascaramiento svg es genial) por Cassie Evans (@ cassie-codes)
en CodePen.

Teniendo en cuenta que nunca antes había hecho nada con máscaras SVG, pensé que podría revisar rápidamente el código y diseccionarlo para ver cómo Cassie hizo esta demostración bastante encantadora. Sin embargo, lo interesante de todo esto es lo simple que es.

Para comenzar, tomamos el GIF que queremos usar como nuestra máscara SVG. Podemos obtener eso de GIPHY:

vía GIPHY

A continuación, podemos comenzar a escribir nuestro SVG directamente en el HTML de la página: comenzamos agregando una etiqueta que se puede usar para almacenar activos a los que nos referiremos en otra parte del mismo SVG:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 300">
  <defs>
    <mask id="MASK" maskunits="userSpaceOnUse"
              maskcontentunits="userSpaceOnUse">
      <image 
        xlink:href="https://media.giphy.com/media/tIwmTQ64D52XTuL8xd/giphy.gif" 
        height="100%"
        width="100%"/>
    </mask> 
  </defs>
</svg>

Si miras más de cerca eso <mask> elemento, verá que Cassie ha agregado un id="MASK" y así es como nos referiremos a la máscara más adelante en el archivo, apuntando a este id atributo.

Ahora podemos seguir adelante y buscar nuestra próxima imagen animada (pero esta vez un GIF genial del espacio exterior):

Agreguemos ese GIF en un <g> elemento y aplicar el mask atribuirle, así:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 300">
  <defs>
    <mask id="MASK" maskunits="userSpaceOnUse"
              maskcontentunits="userSpaceOnUse">
      <image 
        xlink:href="https://media.giphy.com/media/tIwmTQ64D52XTuL8xd/giphy.gif" 
        height="100%"
        width="100%"/>
    </mask>      
  </defs>
  <g mask="url(#MASK)">
    <image x="0" y="0%" class="space" href="https://media.giphy.com/media/MXQnyEQwBJ6eTj90L5/giphy.gif" 
        height="100%" width="100%"/>
  </g>
</svg>

El código SVG puede parecer bastante aterrador a primera vista, especialmente si no está familiarizado con él. Quizás sea mejor dividir todo esto en dos partes. Primero, definiendo la máscara …

  <defs>
    <mask id="MASK" maskunits="userSpaceOnUse"
              maskcontentunits="userSpaceOnUse">
      <image 
        xlink:href="https://media.giphy.com/media/tIwmTQ64D52XTuL8xd/giphy.gif" 
        height="100%"
        width="100%"/>
    </mask>      
  </defs>

… y posteriormente usando esa máscara …

<g mask="url(#MASK)">
  <image x="0" y="0%" class="space" href="https://media.giphy.com/media/MXQnyEQwBJ6eTj90L5/giphy.gif" 
         height="100%" width="100%"/>
</g>

Una vez que lo rompemos así, tiene mucho más sentido, ¿eh? ¡Y ahí lo tienes! Dos GIF animados utilizados como máscara SVG. Es un truco súper ingenioso.

Cassie hizo otro ejemplo, pero esta vez un monstruo espacial saltando:

Ver la pluma
Monstruo espacial (el enmascaramiento svg es genial) por Cassie Evans (@ cassie-codes)
en CodePen.

(Visited 10 times, 1 visits today)