Minha situação provavelmente é um pouco diferente. Estou alterando dinamicamente o src de uma imagem via javascript e necessário para garantir que a nova imagem seja dimensionada proporcionalmente para caber em um contêiner fixo (em uma galeria de fotos). Inicialmente, acabei de remover os atributos de largura e altura da imagem depois de carregada (por meio do evento de carregamento da imagem) e redefini-los depois de calcular as dimensões preferidas. No entanto, isso não funciona no Safari e possivelmente no IE (eu não testei completamente no IE, mas a imagem nem aparece, então ...).
De qualquer forma, o Safari mantém as dimensões da imagem anterior, para que as dimensões estejam sempre uma imagem atrás. Presumo que isso tenha algo a ver com o cache. Portanto, a solução mais simples é clonar a imagem e adicioná-la ao DOM (é importante que ela seja adicionada ao DOM para obter o with e height). Atribua à imagem um valor de visibilidade oculto (não use nenhum, pois não funcionará). Depois de obter as dimensões, remova o clone.
Aqui está o meu código usando jQuery:
// Hack for Safari and others
// clone the image and add it to the DOM
// to get the actual width and height
// of the newly loaded image
var cloned,
o_width,
o_height,
src = 'my_image.jpg',
img = [some existing image object];
$(img)
.load(function()
{
$(this).removeAttr('height').removeAttr('width');
cloned = $(this).clone().css({visibility:'hidden'});
$('body').append(cloned);
o_width = cloned.get(0).width; // I prefer to use native javascript for this
o_height = cloned.get(0).height; // I prefer to use native javascript for this
cloned.remove();
$(this).attr({width:o_width, height:o_height});
})
.attr(src:src);
Esta solução funciona em qualquer caso.