El elemento image

facebook-svg gplus-svg twitter-svg

Podemos utilizar imágenes en SVG de la misma manera en que utilizamos un rectángulo, o sea: especificando tanto las coordenadas x e y de la esquina izquierda arriba, como la anchura ( width ) y altura ( height ) de la imagen. Para esto utilizamos el elemento <image>



  

Algunos atributos: x, y, width, height, xlink:href o href, preserveAspectRatio

La anchura width y la altura height

En SVG es importante especificar la anchura (width) y la altura (height) de las imagenes. Si no especificados estos atributos toman por defecto el valor 0 y la imagen no aparece. Observación: Hay algunos navegadores donde es posible especificar solo la anchura de la imagen, la altura siendo calculada respectando las proporciones.

Coordenadas x e y

Las imagenes SVG pueden ser posicionadas utilizando los atributos x e *y. Si no especificados, estos atributos toman el valor por defecto: x="0" y="0". También podemos posicionar una imagen con transformaciones.

El atributo xlink:href o href

El atributo xlink:href indica el URL o la fuente de la imagen que queremos enlazar. En SVG2 ya no es necesario utilizar el espacio de nombres xlink así que, en navegadores modernos, podemos utilizar solo href.

El atributo preserveAspectRatio

El atributo preserveAspectRatio decide como redimensionar la imagen si la anchura y la altura del elemento <image> no respectan las proporciones del archivo de imagen.

Lea más acerca del atributo preserveAspectRatio

See the Pen 8739185db30a55b4128b88c943d307b1 by Gabi (@enxaneta) on CodePen.

Utilizar imágenes como relleno de trazados

Hay varias maneras de utilizar imágenes como relleno de trazados:

1. Utilizar el trazado como trazado de recorte <clipPath> y recortar la imagen con este trazado.
2. Utilizar la imagen como patrón de relleno.

Recortar la imagen con <clipPath>

Supongamos que quiero utilizar una imagen como relleno de un trazado representando un grano de café. Para esto voy a transformar el grano de café en un trazado de recorte:

<clipPath id="clip">
     <path id="cafe"  d="..." />
</clipPath>

Y voy a recortar la imagen utilizando este trazado de recorte.

<image clip-path="url(#clip)" xlink:href="cafe.jpg" width="480" height="533"/>

Es importante utilizar un trazado cuya caja delimitadora (bounding box) es más pequeña que la imagen que queremos recortar

See the Pen Imagenes recortadas con clipPath**** by Gabi (@enxaneta) on CodePen.

Utilizar la imagen como patrón de relleno

Primero necesito saber el tamaño del trazado svg. Para esto en javascript voy a utilizar el método getBBox() para conseguir la anchura y la altura del trazado y voy a utilizar el más grande de los dos como anchura de la imagen. Es importante que la imagen sea más grande que el trazado para que no queden espacios en blanco.

<image xlink:href="café.jpg" width="448" />

La anchura y la altura del patrón es width="1" height="1". Alternativamente podría haber utilizado porcentajes: width="100%" height="100%" Esto quiere decir que el patrón cubre todo el trazado.

<pattern id="img" width="1" height="1">
      <image xlink:href="café.jpg" width="448" />
  </pattern>

Finalmente puedo utilizar el patrón como valor del atributo fill del trazado #cafe.

See the Pen Imagenes como patrones de relleno en svg**** by Gabi (@enxaneta) on CodePen.