No momento, estou criando um aplicativo nativo HTML5 da Web / Phonegap e não consigo descobrir como salvar minha tela como uma imagem canvas.toDataURL()
. Alguém pode me ajudar?
Aqui está o código, o que há de errado com isso?
// Minha tela foi nomeada "canvasSignature"
JavaScript:
function putImage()
{
var canvas1 = document.getElementById("canvasSignature");
if (canvas1.getContext) {
var ctx = canvas1.getContext("2d");
var myImage = canvas1.toDataURL("image/png");
}
var imageElement = document.getElementById("MyPix");
imageElement.src = myImage;
}
HTML5:
<div id="createPNGButton">
<button onclick="putImage()">Save as Image</button>
</div>
.toDataURL()
capturo os dados com e uso window.location para apontar o navegadorappname://[data url]
. No final do aplicativo, o UIWebView possui um método delegado que diz se deve ou não carregar uma página. Eu escutoappname://
e decompô-lo quando ele entra, negar o carregamento da página e capturar o URL de dados em uma string nativa ... quão familiarizado você está com o código iOS / Objective C real?Respostas:
Aqui está um código. sem nenhum erro.
fonte
Esta solução permite alterar o nome do arquivo baixado:
HTML:
JAVASCRIPT:
fonte
Você pode usar o canvas2image para solicitar o download.
Eu tive o mesmo problema, aqui está um exemplo simples que adiciona a imagem à página e força o navegador a fazer o download:
fonte
Você pode tentar isso; crie uma âncora fictícia em HTML e baixe a imagem de lá como ...
fonte
Eu criei uma pequena biblioteca que faz isso (junto com algumas outras conversões úteis). Chama-se reimg e é realmente simples de usar.
ReImg.fromCanvas(yourCanvasElement).toPng()
fonte
Este trabalho para mim: (apenas o google chrome)
fonte
Semelhante à resposta do 1000Bugy, mas mais simples, porque você não precisa fazer uma âncora instantaneamente e despachar um evento de clique manualmente (mais uma correção do IE).
Se você transformar o botão de download em uma âncora, poderá executá-lo rapidamente antes que a funcionalidade padrão da âncora seja executada. Assim,
onAnchorClick
você pode definir o href da âncora para a imagem base64 da tela e o atributo de download da âncora para o nome que desejar.Isso não funciona no IE (atual) porque não implementa o atributo de download e impede o download de uris de dados. Mas isso pode ser corrigido usando em
window.navigator.msSaveBlob
vez disso.Portanto, o seu manipulador de eventos clique âncora seria como seguido (onde
anchor
,canvas
efileName
são pesquisas de escopo):Aqui está um violino
fonte
Em vez de
imageElement.src = myImage;
você deve usarwindow.location = myImage;
E mesmo depois disso, o navegador exibirá a própria imagem. Você pode clicar com o botão direito e usar "Salvar link" para baixar a imagem.
Verifique este link para mais informações.
fonte
Você não pode usar os métodos mencionados anteriormente para baixar uma imagem ao executar no Cordova. Você precisará usar o Cordova File Plugin . Isso permitirá que você escolha onde salvá-lo e aproveite diferentes configurações de persistência. Detalhes aqui: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/
Como alternativa, você pode converter a imagem em base64 e armazenar a sequência no localStorage, mas isso preencherá sua cota rapidamente, se você tiver muitas imagens ou alta resolução.
fonte
@Wardenclyffe e @SColvin, vocês estão tentando salvar uma imagem usando a tela, não usando o contexto da tela. você deve tentar ctx.toDataURL (); Tente isto:
Você também pode consultar os seguintes links:
http://tutorials.jenkov.com/html5-canvas/todataurl.html
http://www.w3.org/TR/2012/WD-html5-author-20120329/the-canvas-element.html#the-canvas-element
fonte
toDataURL
função: developer.mozilla.org/en-US/docs/Web/API/… . Você deseja chamartoDataURL
o elemento canvas: developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/…