Skip to content

Instantly share code, notes, and snippets.

@yuanoook
Created September 15, 2017 10:45
Show Gist options
  • Save yuanoook/4aa7566c7e0cbab27fd41e16f5a4fd16 to your computer and use it in GitHub Desktop.
Save yuanoook/4aa7566c7e0cbab27fd41e16f5a4fd16 to your computer and use it in GitHub Desktop.
save_ui_to_bmp_electron_preload
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