Your equipment DOES NOT affect the quality of your image. The less time and effort you spend worrying about your equipment the more time and effort you can spend creating great images. The right equipment just makes it easier, faster or more convenient for you to get the results you need.
—Ken Rockwel, Your Camera Does Not Matter, 2005

Afbeeldingen

Afbeeldingsformaten

Er zijn twee soorten afbeeldingen: bitmaps en vectorafbeeldingen. Een bitmap (of rasterafbeelding) is een verzameling puntjes van verschillende kleur. Een foto is altijd een bitmap. Als je voldoende inzoomt, krijg je de individuele pixels te zien.

Een vectorafbeelding is een afbeelding die bestaat uit wiskundige krommen. Je kan er blijven op inzoomen. De afbeelding blijft haar kwaliteit behouden.

Hieronder vind je twee keer dezelfde afbeelding (bron: https://www.svgcrown.com/download.php?category=home&id=43). Zoom zelf in je browser om te bepalen welke van beide de bitmap en welke de vectorafbeelding is.

De bovenste afbeelding is een PNG en dus een bitmap. Ze is 114 KB groot. De onderste is een SVG en dus een vector. Aangezien een vectorafbeelding eigenlijk helemaal beschreven is in tekstvorm is ze veel kleiner: slechts 31 KB.

Bitmapafbeelding

Als een vectorafbeelding zoveel kleiner is als een bitmap en bovendien oneindig scherp blijft bij inzoomen, waarom gebruiken we dan niet altijd vectorafbeeldingen? De reden is simpel: foto's zijn eigenlijk per definitie altijd bitmaps.

De meest geschikte bitmapformaten voor het web zijn:

Vectorafbeelding

Voor vectorafbeeldingen is het standaarformaat op het web SVG. Een SVG is een wiskundige tekstbeschrijving van een figuur, opgebouwd uit punten, lijnstukken, cirkels, enz. Als voorbeeld: een opgevulde rechthoek met afgeronde hoeken. Onder de figuur vind je de SVG-code van deze figuur (bron: W3schools.com). Die code is hier trouwens in de HTML-pagina zelf gezet (doe eens een ‘toon paginabron’ in je browser of inspecteer de HTML-code van deze pagina).

Sorry, your browser does not support inline SVG.

<svg width="400" height="180">
  <rect x="50" y="20" rx="20" ry="20" width="150" height="150" 
      style="fill:red;stroke:black;stroke-width:5;opacity:0.5" />
</svg>

Aangezien SVG-afbeeldingen inline in HTML-code kunnen verwerkt worden, kan je ze manipuleren met JavaScript, bvb. om animaties te maken.

Het img element

Het img element is een leeg element. Je schrijft dus niet <img>…</img>. Alle informatie staat in de attributen: <img src="" alt="">

Locatie: src attribuut

Het attribuut src bevat de locatie van het afbeeldingsbestand. Dat kan een relatief adres zijn zoals <img src="../img/foto.jpg" alt="">. De twee puntjes betekenen ‘spring uit de map waar het huidig HTML-bestand in zit’. Op dit niveau (eentje hoger dus dan het niveau van het HTML-bestand) zou er een mapje ‘img’ moeten zijn. Deze map bevat dan het gevraagde bestand ‘foto.jpg’.

De src kan ook een absoluut adres bevatten, zoals src="https://eenbedrijf.be/afb/foto1.jpg". Opgepast: dit heet ‘hot linking’ en wordt gelijkgesteld met kopiëren wat betreft het auteursrecht.

Voor dit OPO maak je een statische website. We verwachten dat je het auteursrecht respecteert. Dat komt neer op ofwel je eigen foto gebruiken, ofwel toestemming vragen aan de auteur, ofwel gebruik maken van foto's met een licentie die toelaat om ze te gebruiken (zie ook een eerder topic ‘basisdocument’).

Alternatieve tekst: alt attribuut

Het tweede verplichte attribuut is alt. Je geeft hier alternatieve tekst op die kan voorgelezen worden door een screenreader van een slechtziende bezoeker. Probeer jezelf voor te stellen wat het betekent om enkel naar sites te kunnen luisteren en doe dan je best om een zo zinvol mogelijke alternatieve tekst te bedenken. Op de pagina van Anysurfer vind je een goed overzicht van hoe je goede alt-tekst kan schrijven.

Een afbeelding die puur versiering is en geen enkele inhoud toevoegt moet nog steeds een alt="" krijgen, maar je laat de inhoud van het attribuut leeg.

Afmetingen: width en height.

Vroeger was het simpel: elke img heeft ook een width en height attribuut. De waarde van die twee attributen wordt altijd in pixels genoteerd (maar je schrijft niet ‘px’ zoals dat wel moet in CSS). Dus iets in de stijl van <img src="img/vulkaan.jpg" width="800" heigth="500" alt="vulkaan Eyjafjallajökull">. Die twee afmetingen zijn nuttig, want zo weet de browser al – nog voor de afbeelding zelf door de server aangeleverd is – hoeveel plaats hij moet voorzien bij het berekenen wat waar op het scherm moet komen.

Toen kwam RWD (zie later bij CSS) en wilden we afbeeldingen die zich konden aanpassen qua grootte aan de beschikbare ruimte in hun container.

Er zijn veel meningen over al dan niet width en height voorzien. Ik zou vereenvoudigend het volgende stellen: als je afbeelding met zekerheid altijd een vaste grootte heeft, gebruik dan beide attributen in HTML. Als dat niet zo is, dan beschrijven we de breedte (en evt. de hoogte, maar meestal volstaat de breedte) liever in CSS.

SVG afbeeldingen

Een SVG kan zowel een extern bestand zijn, als in de HTML-code zelf (‘inline’ noemt men dat dan) gezet worden. Hierboven gaven we al een voorbeeld van beide manieren.

Embedded met het img element

Het img element kan niet alleen naar .png en .jpg (e.a.) verwijzen, maar ook naar een SVG-bestand. Dit is bvb. het icoontje dat ik gebruik om aan te geven dat je een opdracht moet doen: doe deze opdracht. De code die hiervoor gebruik is:

<img src="/assets/person-svgrepo-com.svg" alt="doe deze opdracht">

Het grote voordeel van een extern bestand is dat dit na de eerste keer laden op de computer van de gebruiker (in de browser cache) staat. Alle volgende plaatsen waar deze afbeelding nodig is, hoeft er geen request meer naar de server gestuurd te worden.

Inline in de HTML-code

Voor niet al te grote afbeeldingen kan je ook de code van de SVG zelf in de HTML zetten m.b.v. het element svg. Ik kan hetzelfde figuurtje ook tonen via dit element: . Ziet er hetzelfde uit, niet? De HTML-code maakt dit keer geen gebruik van img, maar van svg.

<svg width="30" height="30" viewBox="0 0 50 50" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
    <g transform="matrix(0.0976562,0,0,0.0976562,0,2)">
        <path d="M332.64,64.58C313.18,43.57 286,32 256,32C225.84,32 198.57,43.5 179.2,64.38C159.62,85.49 150.08,114.18 152.32,145.16C156.76,206.28 203.27,256 256,256C308.73,256 355.16,206.29 359.67,145.18C361.94,114.48 352.34,85.85 332.64,64.58Z" style="fill:rgb(0,0,170);fill-rule:nonzero;"/>
    </g>
    <g transform="matrix(0.0976562,0,0,0.0976562,0,2)">
        <path d="M432,480L80,480C70.675,480.121 61.777,476.029 55.8,468.87C49.3,461.1 46.68,450.49 48.62,439.76C57.06,392.94 83.4,353.61 124.8,326C161.58,301.49 208.17,288 256,288C303.83,288 350.42,301.5 387.2,326C428.6,353.6 454.94,392.93 463.38,439.75C465.32,450.48 462.7,461.09 456.2,468.86C450.225,476.022 441.326,480.119 432,480Z" style="fill:rgb(0,0,170);fill-rule:nonzero;"/>
    </g>
</svg>

Het nadeel van deze manier van werken is dat deze afbeelding niet in de cache kan opgenomen worden. Als je deze afbeelding twintig keer nodig hebt in één site, moet deze code effectief 20 keer geladen worden.

Maar dat is meteen ook het grote voordeel: er hoeft voor zo'n inline svg geen request gestuurd te worden naar de server. Zo'n request zorgt voor vertraging, zeker op mobiel. Daarom probeert men voor een snelle site het aantal requests te beperken.

Nog een voordeel van inline SVG is dat je deze code kan manipuleren met JS.

Embedded met het object element

Er is nog een derde mogelijkheid om SVG te gebruiken, nl het object element. We gaan hier echter niet op in.