Sempre que faço uma “execução de desempenho” em um site, o primeiro lugar que procuro são as imagens. Por quê? Porque o senhor pode salvar uma imagem do Photoshop, colocá-la no ImageOptim ou até mesmo no TinyPNG e economizar 70% do tamanho do arquivo. O que a maioria dos desenvolvedores não considera? Pegar arquivos de imagem minúsculos e transformá-los em URIs de dados em vez de imagens tradicionais (outra solicitação HTTP). Infelizmente, isso precisa acontecer no arquivo CSS antes do carregamento da página, mas o senhor precisa obter esse URI de dados de algum lugar, certo?


Desconfio um pouco de sites aleatórios que permitem o upload de arquivos ou conteúdo e retornam um determinado resultado; o senhor não conhece o autor desse código. Portanto, eu fui para meu próprio código, modificando-o um pouco ao longo do caminho, para criar um utilitário para converter uma imagem em URI de dados!


Converter imagem em URI de dados


Como em minha postagem original, precisamos contar com o canvas para fazer o trabalho pesado:



function getDataUri(url, callback) {
    var image = new Image();

    image.onload = function () {
        var canvas = document.createElement('canvas');
        canvas.width = this.naturalWidth; // or 'width' if you want a special/scaled size
        canvas.height = this.naturalHeight; // or 'height' if you want a special/scaled size

        canvas.getContext('2d').drawImage(this, 0, 0);

        // Get raw image data
        callback(canvas.toDataURL('image/png').replace(/^data:image\/(png|jpg);base64,/, ''));

        // ... or get as Data URI
        callback(canvas.toDataURL('image/png'));
    };

    image.src = url;
}

// Usage
getDataUri('/logo.png', function(dataUri) {
    // Do whatever you'd like with the Data URI!
});


O senhor também poderia configurar isso para usar Promises em vez de um retorno de chamada.


Depois que a imagem é carregada, nós a colocamos no canvas e exportamos seus dados para um URI de dados. Em termos práticos, essa não é uma tarefa útil, pois a imagem já foi carregada, mas se o senhor quiser criar um utilitário local para executar essa tarefa, aqui está!

  • 5 APIs HTML5 que o senhor não sabia que existiam

    Quando se diz ou se lê “HTML5”, é de se esperar que dançarinas exóticas e unicórnios entrem na sala ao som de “I’m Sexy and I Know It”. Mas o senhor pode nos culpar? Assistimos à estagnação das APIs fundamentais por tanto tempo que um recurso básico…

  • Crie um efeito de logotipo brilhante com CSS
  • Exclusão animada de registros AJAX usando jQuery

    Sou um grande fã do método do WordPress de exclusão de artigos individuais. O usuário clica no link de exclusão, o item de menu fica vermelho e o item desaparece. Veja como obter essa funcionalidade com o jQuery JavaScript. O PHP – Content & Header O trecho a seguir vai para o…

  • Plug-in MooTools CountDown

    Há vários sites na Internet, como o RapidShare, por exemplo, que fazem com que o usuário espere um determinado período de tempo antes de receber sua recompensa. Usando o MooTools, criei um plug-in CountDown que permite implementar facilmente um sistema semelhante. O JavaScript do MooTools A classe CountDown…