Created
September 15, 2017 10:45
-
-
Save yuanoook/4aa7566c7e0cbab27fd41e16f5a4fd16 to your computer and use it in GitHub Desktop.
save_ui_to_bmp_electron_preload
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs'); | |
const Jimp = require('jimp'); | |
const electron = require('electron'); | |
const html2canvas = require('html2canvas'); | |
const remote = electron.remote; | |
const nativeImage = electron.nativeImage | |
const Menu = remote.Menu; | |
const MenuItem = remote.MenuItem; | |
let rightClickPosition = null | |
const menu = new Menu(); | |
menu.append(new MenuItem({ | |
label: 'Save Image', | |
click: () => { | |
html2canvas(printArea, { | |
background: '#fff', | |
onrendered: function(canvas) { | |
saveCanvasAsBMP(canvas); | |
} | |
}); | |
} | |
})) | |
function saveCanvasAsBMP(canvas) { | |
// canvas = contrastBlackWhiteCanvas(canvas, 150); | |
const imgFilenameBmp = `${ Date.now() }.bmp`; | |
const pngBuffer = nativeImage.createFromDataURL( | |
canvas.toDataURL('image/png', 1) | |
).toPng(); | |
Jimp.read(pngBuffer, function (err, image) { | |
if(err) { throw err } | |
console.log(`Jimp read buffer success!`); | |
image.write(imgFilenameBmp, function(err) { | |
if(err) { throw err } | |
console.log(`${imgFilenameBmp} save file success!`); | |
}); | |
}); | |
} | |
function contrastBlackWhiteCanvas(canvas, middle) { | |
var | |
context = canvas.getContext('2d'), | |
imageData = context.getImageData(0, 0, canvas.width, canvas.height), | |
canvasPixelArray = imageData.data, | |
canvasPixelArrayLength = canvasPixelArray.length, | |
i = 0; | |
for (; i < canvasPixelArrayLength; i += 4) { | |
canvasPixelArray[i] = canvasPixelArray[i] < middle ? 0 : 255; | |
canvasPixelArray[i + 1] = canvasPixelArray[i + 1] < middle ? 0 : 255; | |
canvasPixelArray[i + 2] = canvasPixelArray[i + 2] < middle ? 0 : 255; | |
} | |
context.putImageData(imageData, 0, 0); | |
return canvas; | |
} | |
window.addEventListener('contextmenu', (e) => { | |
e.preventDefault() | |
rightClickPosition = {x: e.x, y: e.y} | |
menu.popup(remote.getCurrentWindow()) | |
}, false); | |
window.nodeRequire = require; | |
delete window.require; | |
delete window.exports; delete window.module; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment