Fra le soluzioni possibili con i css:
1. usare per il div un line-height eguale alla sua altezza (ma il funzionamento di questo metodo è non proprio ottimale con le immagini, ho inserito uno spazio vuoto perché Firefox, Chrome, Opera e Safari allineino l'immagine, dovrebbe essere così anche per Explorer dalla versione 7 in poi, ma non ho testato)
codice:
#centra {
height: 400px;
line-height: 400px;
text-align:center;
background:pink;
}
#centra img{
vertical-align:middle;
}
...
<div id="centra">
&nbsp;[img]miaImmagine.jpg[/img]
</div>
2. usare le proprietà display:table e display:table-cell aggiungendo però codice di marcatura in più e un css apposito per vecchie versioni di Explorer
codice:
<style type="text/css">
#esterno{
display:table;
width:400px;
height:400px;
vertical-align:middle;
overflow: hidden;
background:yellow
}
#boxContenuto {
display:table-cell;
width:100%;
vertical-align:middle;
}
</style>
<!--[if lt IE 8]>
<style type="text/css">
#esterno{
position:relative;
}
#boxContenuto{top:50%;position:absolute;}
#contenuto{top:-50%;position:relative;}
</style>
<![endif]-->
...
<div id="esterno">
<div id="boxContenuto">
<div id="contenuto">
[img]miaImmagine.jpg[/img]
</div>
</div>
</div>
Altrimenti potrai ricorrere a javascript