Steg / script.js
CVNSS's picture
Upload script.js
eb0e42e verified
$('button.encode, button.decode').click(function(event) {
event.preventDefault();
});
function previewDecodeImage() {
var file = document.querySelector('input[name=decodeFile]').files[0];
previewImage(file, ".decode canvas", function() {
$(".decode").fadeIn();
});
}
function previewEncodeImage() {
var file = document.querySelector("input[name=baseFile]").files[0];
$(".images .nulled").hide();
$(".images .message").hide();
previewImage(file, ".original canvas", function() {
$(".images .original").fadeIn();
$(".images").fadeIn();
});
}
function previewImage(file, canvasSelector, callback) {
var reader = new FileReader();
var image = new Image;
var $canvas = $(canvasSelector);
var context = $canvas[0].getContext('2d');
if (file) {
reader.readAsDataURL(file);
}
reader.onloadend = function () {
image.src = URL.createObjectURL(file);
image.onload = function() {
$canvas.prop({
'width': image.width,
'height': image.height
});
context.drawImage(image, 0, 0);
callback();
}
}
}
function encodeMessage() {
$(".error").hide();
$(".binary").hide();
var text = $("textarea.message").val();
var $originalCanvas = $('.original canvas');
var $nulledCanvas = $('.nulled canvas');
var $messageCanvas = $('.message canvas');
var originalContext = $originalCanvas[0].getContext("2d");
var nulledContext = $nulledCanvas[0].getContext("2d");
var messageContext = $messageCanvas[0].getContext("2d");
var width = $originalCanvas[0].width;
var height = $originalCanvas[0].height;
// Check if the image is big enough to hide the message
if ((text.length * 8) > (width * height * 3)) {
$(".error")
.text("Text too long for chosen image....")
.fadeIn();
return;
}
$nulledCanvas.prop({
'width': width,
'height': height
});
$messageCanvas.prop({
'width': width,
'height': height
});
// Normalize the original image and draw it
var original = originalContext.getImageData(0, 0, width, height);
var pixel = original.data;
for (var i = 0, n = pixel.length; i < n; i += 4) {
for (var offset =0; offset < 3; offset ++) {
if(pixel[i + offset] %2 != 0) {
pixel[i + offset]--;
}
}
}
nulledContext.putImageData(original, 0, 0);
// Convert the message to a binary string
var binaryMessage = "";
for (i = 0; i < text.length; i++) {
var binaryChar = text[i].charCodeAt(0).toString(2);
// Pad with 0 until the binaryChar has a lenght of 8 (1 Byte)
while(binaryChar.length < 8) {
binaryChar = "0" + binaryChar;
}
binaryMessage += binaryChar;
}
$('.binary textarea').text(binaryMessage);
// Apply the binary string to the image and draw it
var message = nulledContext.getImageData(0, 0, width, height);
pixel = message.data;
counter = 0;
for (var i = 0, n = pixel.length; i < n; i += 4) {
for (var offset =0; offset < 3; offset ++) {
if (counter < binaryMessage.length) {
pixel[i + offset] += parseInt(binaryMessage[counter]);
counter++;
}
else {
break;
}
}
}
messageContext.putImageData(message, 0, 0);
$(".binary").fadeIn();
$(".images .nulled").fadeIn();
$(".images .message").fadeIn();
};
function decodeMessage() {
var $originalCanvas = $('.decode canvas');
var originalContext = $originalCanvas[0].getContext("2d");
var original = originalContext.getImageData(0, 0, $originalCanvas.width(), $originalCanvas.height());
var binaryMessage = "";
var pixel = original.data;
for (var i = 0, n = pixel.length; i < n; i += 4) {
for (var offset =0; offset < 3; offset ++) {
var value = 0;
if(pixel[i + offset] %2 != 0) {
value = 1;
}
binaryMessage += value;
}
}
var output = "";
for (var i = 0; i < binaryMessage.length; i += 8) {
var c = 0;
for (var j = 0; j < 8; j++) {
c <<= 1;
c |= parseInt(binaryMessage[i + j]);
}
output += String.fromCharCode(c);
}
$('.binary-decode textarea').text(output);
$('.binary-decode').fadeIn();
};