Actualmente estoy construyendo una aplicación web HTML5 / aplicación nativa Phonegap y parece que no puedo entender cómo guardar mi lienzo como una imagen canvas.toDataURL()
. alguien me puede ayudar?
Aquí está el código, ¿qué tiene de malo?
// Mi lienzo se llamaba "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()
y luego uso window.location para apuntar el navegadorappname://[data url]
. En el extremo de la aplicación, UIWebView tiene un método delegado que dice si debe cargar o no una página. Escuchoappname://
y lo desgloso cuando entra, niega la carga de la página y captura la URL de datos en una cadena nativa ... ¿qué tan familiarizado está con el código real de iOS / Objective C?Respuestas:
Aquí hay un código. sin ningún error
fuente
Esta solución le permite cambiar el nombre del archivo descargado:
HTML:
JAVASCRIPT:
fuente
Puede usar canvas2image para solicitar la descarga.
Tuve el mismo problema, aquí hay un ejemplo simple que agrega la imagen a la página y obliga al navegador a descargarla:
fuente
Puedes probar esto; cree un ancla HTML ficticia y descargue la imagen desde allí como ...
fuente
Creé una pequeña biblioteca que hace esto (junto con algunas otras conversiones útiles). Se llama reimg , y es realmente fácil de usar.
ReImg.fromCanvas(yourCanvasElement).toPng()
fuente
Esto funciona para mí: (solo google chrome)
fuente
Similar a la respuesta de 1000Bugy pero más simple porque no tiene que hacer un ancla sobre la marcha y enviar un evento de clic manualmente (más una corrección de IE).
Si hace que su botón de descarga sea un ancla, puede hacer un jack directo justo antes de que se ejecute la funcionalidad de anclaje predeterminada. Por
onAnchorClick
lo tanto , puede establecer el href de anclaje en la imagen base64 del lienzo y el atributo de descarga de anclaje en el nombre que desee para su imagen.Esto no funciona en (el actual) IE porque no implementa el atributo de descarga y evita la descarga de datos uris. Pero esto se puede solucionar usando
window.navigator.msSaveBlob
lugar.Así que su ancla controlador de eventos click sería como sigue (donde
anchor
,canvas
yfileName
son las búsquedas de alcance):Aquí hay un violín
fuente
En lugar de
imageElement.src = myImage;
usted debe usarwindow.location = myImage;
E incluso después de eso, el navegador mostrará la imagen en sí. Puede hacer clic derecho y usar "Guardar enlace" para descargar la imagen.
Consulte este enlace para más información.
fuente
No puede utilizar los métodos mencionados anteriormente para descargar una imagen cuando se ejecuta en Cordova. Necesitará usar el complemento de archivos Cordova . Esto le permitirá elegir dónde guardarlo y aprovechar diferentes configuraciones de persistencia. Detalles aquí: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/
Alternativamente, puede convertir la imagen a base64 y luego almacenar la cadena en localStorage, pero esto llenará su cuota bastante rápido si tiene muchas imágenes o alta resolución.
fuente
@Wardenclyffe y @SColvin, ambos intentan guardar la imagen utilizando el lienzo, no utilizando el contexto del lienzo. ambos deberías intentar ctx.toDataURL (); Prueba esto:
También puede consultar los siguientes enlaces:
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
fuente
toDataURL
función: developer.mozilla.org/en-US/docs/Web/API/… . Desea llamartoDataURL
al elemento de lienzo: developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/…