Como selecionar e exibir uma imagem (HTML)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente ]

Descreve como usar os objetos Window.Storage.Pickers.FileOpenPicker e Blob para carregar e exibir uma imagem que o usuário seleciona.

O que você precisa saber

Tecnologias

Pré-requisitos

Instruções

Etapa 1: Crie elementos para seleção e exibição da imagem

  1. Isso cria um botão que o usuário clica para abrir o FileOpenPicker, um parágrafo para exibir informações sobre a imagem e um elemento img para exibir a imagem.

    <button id="selectImageButton">Select an image...</button>
    <p id="imageInformation"></p>
    <img id="imageControl" src="placeholder.png" alt="The selected image" />
    
  2. Adicione o manipulador de evento loadImage ao seu evento de clique do botão. Este exemplo adiciona o manipulador de evento quando a função WinJS.UI.processAll é concluída. Para saber mais sobre onde anexar manipuladores de eventos, veja Início rápido: Adicionando controles e manipulando eventos.

                WinJS.UI.processAll().done(function () {
                    document.getElementById("selectImageButton").addEventListener("click", loadImage, false);
                });
    

    Defina o manipulador de evento loadImage na próxima etapa.

Etapa 2: Selecionar uma imagem

Para permitir que o usuário selecione uma imagem, crie um novo Window.Storage.Pickers.FileOpenPicker no seu JavaScript e defina o seu fileTypeFilter de acordo com os tipos que você quer disponibilizar. Para exibir o FileOpenPicker, chame o método pickSingleFileAsync.

O pickSingleFileAsync retorna uma promessa para a imagem selecionada; especifique uma função para processar os resultados e uma função para processar erros. Implementamos esses métodos posteriormente neste tópico.

Este exemplo define uma função, loadImage, que cria e exibe um FileOpenPicker. Essa função é chamada quando o usuário clica no selectImageButton que você definiu na etapa anterior.

function loadImage(eventInfo) {

    var picker = new Windows.Storage.Pickers.FileOpenPicker();
    picker.fileTypeFilter.replaceAll([".jpg", ".bmp", ".gif", ".png"]);
    picker.pickSingleFileAsync().then(processResults, displayError);
}

Etapa 3: Processe o arquivo selecionado

Defina a função que é chamada quando o usuário seleciona uma imagem com sucesso.

  1. Defina uma função que aceita um StorageFile como parâmetro.

    function processResults(file)
    {
    
    }
    
  2. Verifique se o arquivo existe.

    function processResults(file) {
    
        // Check that the picker returned a file. 
        // The picker returns null if the user clicked Cancel.
        if (file) {
    
        } else {
            displayError("An image wasn't selected."); 
        }
    }
    
  3. Use o método URL.createObjectURL para criar um Blob a partir do StorageFile.

    function processResults(file) {
    
        // Check that the picker returned a file. 
        // The picker returns null if the user clicked Cancel.
        if (file) {
            var imageBlob = URL.createObjectURL(file);
    
        } else {
            displayError("An image wasn't selected."); 
        }
    }
    
  4. Use o Blob para definir a propriedade src do seu elemento img. Este exemplo também exibe o nome do arquivo da imagem selecionada.

    function processResults(file) {
    
        // Check that the picker returned a file. 
        // The picker returns null if the user clicked Cancel.
        if (file) {
            var imageBlob = URL.createObjectURL(file);
            document.getElementById("imageControl").src = imageBlob;
    
    
            document.getElementById("imageInformation").innerText =
            "The src of the first image has been set to " + file.name;
    
        } else {
            displayError("An image wasn't selected."); 
        }
    }
    
  5. Libere o Blob.

    function processResults(file) {
    
        // Check that the picker returned a file. 
        // The picker returns null if the user clicked Cancel.
        if (file) {
            var imageBlob = URL.createObjectURL(file);
            document.getElementById("imageControl").src = imageBlob;
    
    
            document.getElementById("imageInformation").innerText =
            "The src of the first image has been set to " + file.name;
    
            // Release the blob resources.
            URL.revokeObjectURL(imageBlob);
        } else {
            displayError("An image wasn't selected."); 
        }
    }
    

Etapa 4: Manipulando erros

Implemente um método que notifica o usuário quando ocorre um erro. Ele aceita uma mensagem de erro como parâmetro.

    function displayError(error) {
        if (imageBlob) {
            URL.revokeObjectURL(imageBlob);
        }
        document.getElementById("imageInformation").innerText = error;
    }