File size: 4,146 Bytes
263b529 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | $('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();
}; |