Como salvar uma imagem de um Canvas HTML
Neste artigo você verá como salvar uma imagem de um Canvas HTML, vamos utilizar JavaScript e também uma abordagem simples!

Fala programdor(a), beleza? Bora aprender mais sobre Canvas e JavaScript!
Salvar uma imagem a partir de um HTML canvas é uma tarefa simples, mas pode ser um pouco confusa para aqueles que não estão familiarizados com o processo.
O canvas é uma área no HTML onde é possível desenhar e manipular gráficos usando JavaScript.
Para salvar uma imagem do canvas, primeiro é preciso obter uma referência para o elemento canvas na página HTML. Isso pode ser feito usando o método getElementById do JavaScript.
Por exemplo, se o canvas tiver o ID “myCanvas”, você pode obter uma referência para ele usando o código abaixo:
const canvas = document.getElementById("myCanvas");
Uma vez que você tenha uma referência para o canvas, você pode usar o método toDataURL para obter a imagem em formato de URL.
Este método retorna uma string que representa a imagem do canvas em um formato específico, como PNG ou JPEG. Por exemplo, para obter a imagem do canvas como PNG, você pode usar o código abaixo:
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
const imgData = canvas.toDataURL("image/png");
Agora que você tem a imagem em formato de URL, você pode usar o método download para baixar a imagem para o dispositivo do usuário.
É necessário criar um elemento <a> e definir o atributo href como a URL da imagem e o atributo download com o nome do arquivo.
Por exemplo, para baixar a imagem com o nome “minha-imagem.png”, você pode usar o código abaixo:
const link = document.createElement("a");
link.href = imgData;
link.download = "minha-imagem.png";
link.click();
Em resumo, para salvar uma imagem a partir de um HTML canvas, é necessário obter uma referência para o canvas, obter a imagem em formato de URL usando o método toDataURL e baixar a imagem para o dispositivo do usuário usando o método download.
É importante notar que, navegadores diferentes podem ter suporte diferente para métodos e atributos descritos acima.
Certifique-se de testar seu código em diferentes navegadores para garantir que ele funcione corretamente.
E para enviar essa imagem a um servidor?
Para enviar uma imagem para um servidor a partir de um HTML canvas usando somente o método fetch() e sem a utilização de objetos FormData, você pode seguir os seguintes passos:
Obtenha a imagem a partir do canvas, como mencionado anteriormente, usando o método toDataURL().
Converta a imagem para um objeto Blob usando o método fetch() e o objeto Response:
fetch(imgData)
.then(res => res.blob())
.then(blob => {
// código para enviar o blob para o servidor
});
Crie um objeto Headers e defina o cabeçalho Content-Type como multipart/form-data
let headers = new Headers();
headers.append("Content-Type", "multipart/form-data");
Envie a requisição HTTP POST para o servidor, incluindo o objeto Blob como o corpo da requisição e o objeto Headers como cabeçalhos da requisição:
fetch("https://seuservidor.com/upload", {
method: "POST",
body: blob,
headers: headers
})
.then(response => {
if(response.ok){
console.log("Upload completo!");
} else {
console.log("Erro ao fazer upload: " + response.status);
}
})
.catch(error => console.log("Erro: " + error));
É importante notar que essa abordagem pode ser diferente de acordo com a implementação do servidor, e pode ser necessário adicionar mais informações ou cabeçalhos a requisição para que o upload seja realizado corretamente.
Além disso, é importante verificar se o seu servidor está preparado para lidar com requisições multipart/form-data.
Deixe um comentário contando o que achou deste artigo 🙂
Quer aprender mais sobre JavaScript? Confira o vídeo abaixo:
Conclusão
Em conclusão, salvar uma imagem a partir de um HTML canvas é uma tarefa simples que pode ser realizada usando JavaScript.
O processo envolve obter uma referência para o canvas, usar o método toDataURL para obter a imagem em formato de URL e baixar a imagem para o dispositivo do usuário usando o método download.
Além disso, também foi mostrado como enviar a imagem para um servidor usando o objeto XMLHttpRequest ou o método fetch.
É importante notar que, navegadores diferentes podem ter suporte diferente para métodos e atributos descritos acima.
Certifique-se de testar seu código em diferentes navegadores para garantir que ele funcione corretamente.
Além disso, é importante levar em consideração questões de segurança e de negócios ao trabalhar com uploads de arquivos em produção.
Ainda assim, usando as técnicas descritas neste artigo, você pode facilmente salvar e enviar imagens de um canvas HTML para um servidor.
Está buscando a sua primeira vaga como Programador? Confira o nosso treinamento completo clicando aqui.
Uma plataforma de cursos com projetos completos, comunidade de alunos e muito mais!
Há também o nosso canal no YouTube, com muito conteúdo gratuito de qualidade!
E se você quiser salvar em JPG em vez de PNG?
O toDataURL aceita um segundo argumento pra qualidade, que vale só pra JPEG e WebP
É um número de 0 a 1, quanto mais perto de 1, mais qualidade (e arquivo maior)
const imgData = canvas.toDataURL("image/jpeg", 0.8);
O resto do fluxo é igual, cria o link, joga a URL no href e dispara o download
Se liga numa diferença importante: JPEG não tem fundo transparente, então se o teu canvas tem áreas vazias elas viram preto ou branco no arquivo final
Quer transparência? Fica no PNG mesmo
Por que aparece o erro de SecurityError ao salvar?
Esse é o tropeço clássico e vale te avisar antes
Se o teu canvas desenhou uma imagem que veio de OUTRO domínio, o navegador "suja" o canvas (o famoso tainted canvas) por segurança
Aí na hora que tu chama o toDataURL ele estoura um erro de SecurityError e não deixa exportar
Como resolver? Duas coisas precisam bater juntas:
No lado do JavaScript, marca a imagem como crossOrigin antes de carregar
const img = new Image(); img.crossOrigin = "anonymous"; img.src = "https://outrodominio.com/imagem.png";
E o servidor que hospeda a imagem PRECISA liberar isso no cabeçalho de CORS
Se o servidor não colaborar, não tem jeito no front, o navegador vai continuar bloqueando
Se a imagem for do teu próprio domínio, relaxa, esse erro nem aparece
Dá pra trocar o nome do arquivo baixado?
Dá sim, é só mudar o valor do atributo download do link
link.download = "o-nome-que-eu-quiser.png";
O navegador usa exatamente esse texto como nome do arquivo salvo
Precisa de biblioteca pra salvar imagem de canvas?
Não precisa de nada, tudo que você viu aqui é JavaScript puro, direto do navegador
toDataURL e o atributo download já resolvem o caso mais comum sem instalar nada
Leia também
Formações
Formação SAAS com IA
Tire usas ideias do papel criando softwares com IA, integre pagamentos e lance seu projeto!
- 291 aulas
- 18 projetos
- 24h 17min
Blog | Mais populares
As diferenças de var, let e const
Como fazer redirecionamento com PHP
Neste artigo você vai aprender a como fazer redirecionamento com PHP, utilizaremos abordagens fáceis de entender e de aplicar Fala programador(a), beleza? Bora aprender mais […]
ChatGPT: o que é, como usar, dicas e como acessar login
ChatGPT é uma ferramenta de processamento de linguagem natural (NLP) baseada na arquitetura GPT-3.5, desenvolvida pela OpenAI. Sua criação representa um marco significativo no campo […]
