Usando o <canvas>
elemento HTML5 , eu gostaria de carregar um arquivo de imagem (PNG, JPEG, etc.), desenhá-lo na tela de forma completamente transparente e depois desbotá-lo. Eu descobri como carregar a imagem e desenhá-la no tela, mas não sei como alterar sua opacidade depois de desenhada.
Aqui está o código que tenho até agora:
var canvas = document.getElementById('myCanvas');
if (canvas.getContext)
{
var c = canvas.getContext('2d');
c.globalAlpha = 0;
var img = new Image();
img.onload = function() {
c.drawImage(img, 0, 0);
}
img.src = 'image.jpg';
}
Alguém por favor me apontará na direção certa como uma propriedade para definir ou uma função para chamar que mudará a opacidade?
canvas
elemento que possui aglobalAlpha
propriedade, mas o contexto que você obtém da tela.canvas2d.fillStyle = "rgba(255, 255, 255, 0.5)";
não funciona. O valor deve estar em hexadecimal.Alguns exemplos de código mais simples para usar
globalAlpha
:Se você precisar
img
ser carregado:Notas:
Defina o
'src'
último, para garantir que seuonload
manipulador seja chamado em todas as plataformas, mesmo se a imagem já estiver no cache.Agrupe as alterações em itens como
globalAlpha
entre asave
erestore
(na verdade, use-as muito), para garantir que você não use configurações de outros lugares, principalmente quando partes do código de desenho serão chamadas a partir de eventos.fonte
globalAlpha
não desfoca nada. Ele definirá o alfa para todos os desenhos subseqüentes (não altera nada já desenhado), e é por isso que no código de exemplo eu o envolvosave
erestore
, para limitar o que ele se aplica.Editar:
A resposta marcada como "correta" não está correta.É fácil de fazer. Experimente este código, trocando "ie.jpg" por qualquer imagem que você tenha à mão:
A chave é a propriedade globalAlpha.
Testado com IE 9, FF 5, Safari 5 e Chrome 12 no Win7.
fonte
O post é antigo até agora, vou com a minha sugestão. A sugestão é baseada na manipulação de pixels no contexto da tela 2D. Do MDN:
Para manipular pixels, usaremos duas funções aqui - getImageData e putImageData
Uso da função getImageData:
e sintaxe putImageData:
Onde o contexto é o seu contexto 2D da tela
Portanto, para obter valores de verde, azul e alfa vermelhos, faremos o seguinte:
Onde x é x offset, y é y offset na tela
Portanto, ter código tornando a imagem semitransparente
Você pode criar seus próprios "shaders" - veja o artigo completo da MDN aqui
fonte
Você pode. A tela transparente pode ser desbotada rapidamente usando a operação composta global de destino final . Não é 100% perfeito, às vezes deixa alguns traços, mas pode ser aprimorado, dependendo do que for necessário (por exemplo, use 'source-over' e preencha-o com a cor branca com alfa em 0,13 e depois desbote para preparar a tela).
fonte
Eu acho que isso responde melhor à pergunta, na verdade altera o valor alfa de algo que já foi desenhado. Talvez isso não fizesse parte da API quando essa pergunta foi feita.
dado o 2d contexto
c
.fonte
Se você usar a biblioteca jCanvas, poderá usar a propriedade opacidade ao desenhar. Se você precisar de um efeito de desbotamento, basta redesenhar com valores diferentes.
fonte
Você não pode. São gráficos de modo imediato. Mas você pode simular isso desenhando um retângulo sobre ele na cor de fundo com uma opacidade.
Se a imagem ultrapassar algo que não seja uma cor constante, fica um pouco mais complicada. Você deve poder usar os métodos de manipulação de pixel neste caso. Apenas salve a área antes de desenhar a imagem e depois misture-a novamente com uma opacidade.
fonte