///
///
class ImagePrinter {
WIDTH = 384;
threshold = 0.6;
bluetoothMACInput = document.getElementById('bt_mac');
thresholdInput = document.getElementById('filter_threshold');
fileSelection = document.getElementById('file_selection');
dummyImage = new Image();
imagePreview = document.getElementById('image_preview');
previewButton = document.getElementById('preview_button');
printButton = document.getElementById('print_button');
preview() {
let reader = new FileReader();
reader.onload = event1 => {
this.dummyImage.src = event1.target.result;
let height = this.WIDTH / this.dummyImage.width * this.dummyImage.height;
this.imagePreview.width = this.WIDTH;
this.imagePreview.height = height;
let context = this.imagePreview.getContext('2d');
context.drawImage(this.dummyImage, 0, 0, this.WIDTH, height);
let data = context.getImageData(0, 0, this.WIDTH, height);
context.putImageData(this.monoMethod(data, this.threshold), 0, 0);
}
reader.readAsDataURL(this.fileSelection.files[0]);
}
constructor() {
this.monoMethod = imageDataColorToMonoSquare;
this.fileSelection.addEventListener('input', this.preview.bind(this));
this.previewButton.addEventListener('click', this.preview.bind(this));
this.thresholdInput.onchange = event => {
this.threshold = this.thresholdInput.value;
}
this.printButton.addEventListener('click', event => {
// this.preview();
if (this.imagePreview.height == 0) {
notice(i18N.get('Please preview image first'));
return;
}
let mac_address = this.bluetoothMACInput.value;
if (mac_address == '') {
notice(i18N.get('Please select a device'));
return;
}
notice(i18N.get('Printing, please wait.'));
let context = this.imagePreview.getContext('2d');
let pbm_data = imageDataMonoToPBM(context.getImageData(0, 0, this.WIDTH, this.imagePreview.height));
let xhr = new XMLHttpRequest();
xhr.open('POST', '/~print?address=' + mac_address);
xhr.setRequestHeader('Content-Type', 'application-octet-stream');
xhr.onload = () => {
notice(i18N.get(xhr.responseText));
}
xhr.send(pbm_data);
});
}
}
var image_printer = new ImagePrinter();