From 3aee61a083237b4221eb6798461f8f8d8debca28 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 10 Feb 2020 09:04:22 +0100 Subject: [PATCH] Downloading PNG implemented --- Animation.js | 4 +--- Canvas.js | 34 ++++++++++++++++++++++++++++------ Utilities.js | 17 +++++++++++++++++ 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/Animation.js b/Animation.js index d141301f1..53fd737a7 100644 --- a/Animation.js +++ b/Animation.js @@ -121,10 +121,8 @@ function newAnimation () { browserCanvas.height = 1 } - /* Gif Recording */ - + /* Media Recording */ if (areWeRecording === true) { - console.log('ADDING FRAME') mediaRecorder.capture(browserCanvas) } diff --git a/Canvas.js b/Canvas.js index 1246f2476..3253906ca 100644 --- a/Canvas.js +++ b/Canvas.js @@ -194,15 +194,37 @@ function newCanvas () { } } - function checkGifRecording (event) { - if (event.keyCode === 121) { // F10 + function checkMediaRecording (event) { + if ((event.ctrlKey === true || event.metaKey === true)) { + let constructorParams + switch (event.keyCode) { + case 118: { // F7 + downloadCanvas('Superalgos.image.capture') + return + break + } + case 119: { // F8 + constructorParams = { format: 'png', name: 'Superalgos.image.capture' } + break + } + case 120: { // F9 + constructorParams = { format: 'gif', workersPath: 'externalScripts/', framerate: 12, name: 'Superalgos.video.capture'} + break + } + case 121: { // F10 + constructorParams = { format: 'webm', framerate: 12, name: 'Superalgos.video.capture' } + break + } + default: return + } + if (areWeRecording === false) { - mediaRecorder = new CCapture({ format: 'webm', framerate: 12, name: 'Superalgos.video' }) + console.log('RECORDING', constructorParams.format) + mediaRecorder = new CCapture(constructorParams) mediaRecorder.start() areWeRecording = true - console.log('RECORDING') } else { - console.log('SAVING') + console.log('SAVING', constructorParams.format) areWeRecording = false mediaRecorder.stop() mediaRecorder.save() @@ -210,7 +232,7 @@ function newCanvas () { } } function onKeyDown (event) { - checkGifRecording(event) + checkMediaRecording(event) let nodeOnFocus = canvas.designerSpace.workspace.getNodeThatIsOnFocus() if (nodeOnFocus !== undefined) { diff --git a/Utilities.js b/Utilities.js index d95e06b72..ddf1f302a 100644 --- a/Utilities.js +++ b/Utilities.js @@ -92,6 +92,23 @@ function downloadText (filename, text) { document.body.removeChild(element) } +function downloadCanvas (filename) { + let data = browserCanvas.toDataURL('image/png', 1) + /* Change MIME type to trick the browser to downlaod the file instead of displaying it */ + data = data.replace(/^data:image\/[^;]*/, 'data:application/octet-stream') + + /* In addition to 's "download" attribute, you can define HTTP-style headers */ + data = data.replace(/^data:application\/octet-stream/, 'data:application/octet-stream;headers=Content-Disposition%3A%20attachment%3B%20filename=' + filename + '.png') + + let element = document.createElement('a') + element.setAttribute('href', data) + element.setAttribute('download', filename + '.PNG') + element.style.display = 'none' + document.body.appendChild(element) + element.click() + document.body.removeChild(element) +}; + function transformThisPoint (point, container) { /* We make the point relative to the current frame */