document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. /*Now that we have prepared the two pictures, we combine them by adding the respective red, green and blue values of the respective pixels in the imageThatHides and imageToHide images and assign the resulting number to the pixel of the new picture that contains both the images.*/
  2. var imageThatHides = new SimpleImage("astrachan.jpg");//240 x 360
  3. var imageToHide = new SimpleImage("duvall.jpg");//200 x 300
  4. //print(imageThatHides);
  5. //print(imageToHide);
  6. var smallerPicture = whichOneIsSmaller(imageThatHides, imageToHide);
  7. var desiredWidth = smallerPicture.getWidth();
  8. var desiredHeight = smallerPicture.getHeight();
  9. imageThatHides = crop(imageThatHides, desiredWidth, desiredHeight);
  10.  
  11. imageToHide = crop(imageToHide, desiredWidth, desiredHeight);
  12. //print("Before applying the chopToHide function to the image imageThatHides:");
  13. //print(imageThatHides);
  14. print("Before applying the chopToHide function to the image imageThatHides:");
  15. for(i = 1; i <= 60; i+=20 ){
  16.     var pixel = imageThatHides.getPixel(i, i+5);
  17.     print("pixel at (" + pixel.getX() + "," + pixel.getY() + ")-> R= " + pixel.getRed() + " : G= " + pixel.getGreen() + " : B= " + pixel.getBlue() );
  18. }
  19.  
  20. imageThatHides = chopToHide(imageThatHides);
  21. print("After applying the chopToHide function to the image imageThatHides:");
  22. for(i = 1; i <= 60; i+=20 ){
  23.     var pixel = imageThatHides.getPixel(i, i+5);
  24.     print("pixel at (" + pixel.getX() + "," + pixel.getY() + ")-> R= " + pixel.getRed() + " : G= " + pixel.getGreen() + " : B= " + pixel.getBlue() );
  25. }
  26. //print("After applying the chopToHide function to the image imageThatHides:");
  27. //print(imageThatHides);
  28.  
  29. print("Before applying the shift function to the image imageToHide:");
  30. for(i = 1; i <= 60; i+=20 ){
  31.     var pixel = imageToHide.getPixel(i, i+5);
  32.     print("pixel at (" + pixel.getX() + "," + pixel.getY() + ")-> R= " + pixel.getRed() + " : G= " + pixel.getGreen() + " : B= " + pixel.getBlue() );
  33. }
  34. //Call the shift function on the image you want to hide to prepare it for hiding.
  35. imageToHide = shift(imageToHide);
  36. print("After applying the chopToHide function to the image imageToHide:");
  37. for(i = 1; i <= 60; i+=20 ){
  38.     var pixel = imageToHide.getPixel(i, i+5);
  39.     print("pixel at (" + pixel.getX() + "," + pixel.getY() + ")-> R= " + pixel.getRed() + " : G= " + pixel.getGreen() + " : B= " + pixel.getBlue() );
  40. }
  41. //Now combining the two images
  42. var imageWithInImage = combine(imageToHide, imageThatHides);
  43. print("After hiding the image imageToHide inside the image imageThatHides:");
  44. for(i = 1; i <= 60; i+=20 ){
  45.     var pixel = imageWithInImage.getPixel(i, i+5);
  46.     print("pixel at (" + pixel.getX() + "," + pixel.getY() + ")-> R= " + pixel.getRed() + " : G= " + pixel.getGreen() + " : B= " + pixel.getBlue() );
  47. }
  48. //print("The image below has an image hidden inside it.");
  49. //print(imageWithInImage);
  50. function combine(imageToHide, imageThatHides){
  51.     var combinedImage = new SimpleImage(imageToHide.getWidth(), imageToHide.getHeight());
  52.     for(var imageThatHidesPixel of imageThatHides.values()){
  53.         var x = imageThatHidesPixel.getX();
  54.         var y = imageThatHidesPixel.getY();
  55.         var imageToHidePixel = imageToHide.getPixel(x, y);
  56.         var combinedPixel = combinedImage.getPixel(x, y);
  57.         var red = add(imageThatHidesPixel.getRed(), imageToHidePixel.getRed());
  58.         var green = add(imageThatHidesPixel.getGreen(), imageToHidePixel.getGreen());
  59.         var blue = add(imageThatHidesPixel.getBlue(), imageToHidePixel.getBlue());
  60.         combinedPixel.setRed(red);
  61.         combinedPixel.setGreen(green);
  62.         combinedPixel.setBlue(blue);
  63.     }
  64.     return combinedImage;
  65. }
  66.  
  67. function add(num1, num2){
  68.     var result = num1 + num2;
  69.     if(result <= 255){
  70.         return result;
  71.     }else{
  72.         return 255;
  73.     }
  74. }
  75.  
  76. //Prepare the imageToHide by shifting the left most half of the bits to the right and replacing the leftmost half of the bits to 0.
  77. function shift(oldImage){
  78.     var newImage = new SimpleImage(oldImage.getWidth(), oldImage.getHeight());
  79.     for(var oldPixel of oldImage.values()){
  80.         var x = oldPixel.getX();
  81.         var y = oldPixel.getY();
  82.         var newPixel = newImage.getPixel(x, y);
  83.         newPixel.setRed( Math.floor(oldPixel.getRed()/16) );
  84.         newPixel.setGreen( Math.floor(oldPixel.getGreen()/16) );
  85.         newPixel.setBlue( Math.floor(oldPixel.getBlue()/16) );
  86.     }
  87.     return newImage;
  88. }
  89. //Type in the shift function from the lesson. How well did you understand it? Can you write it without looking at the code from the lesson?
  90.  
  91. function whichOneIsSmaller(image1, image2){
  92.     var smallerInHeight;
  93.     var smallerInWidth;
  94.     if(image1.getWidth() <= image2.getWidth()){
  95.         smallerInWidth = image1;
  96.     }else{
  97.         smallerInWidth = image2;
  98.     }
  99.     if(image1.getHeight() <= image2.getHeight()){
  100.         smallerInHeight = image1;
  101.     }else{
  102.         smallerInHeight = image2;
  103.     }
  104.     if(smallerInHeight === smallerInWidth){
  105.         return smallerInWidth;//Both pics have the same height and width
  106.     }else{
  107.         //Decide on the basis of the width which one is smaller pic.
  108.         if(smallerInHeight.getWidth() <= smallerInWidth.getWidth()){
  109.             return smallerInHeight;
  110.         }else{
  111.             return smallerInWidth;
  112.         }
  113.     }
  114. }
  115. function crop(image, width, height){
  116.     var newImage = new SimpleImage(width, height);
  117.     for(var pixel of newImage.values()){
  118.         var x = pixel.getX();
  119.         var y = pixel.getY();
  120.         var p = image.getPixel(x,y);
  121.         pixel.setRed(p.getRed());
  122.         pixel.setGreen(p.getGreen());
  123.         pixel.setBlue(p.getBlue());
  124.     }
  125.     return newImage;
  126. }
  127. function chopToHide(image){
  128.     for(var pixel of image.values()){
  129.         pixel.setRed(pixelChange(pixel.getRed()));
  130.         pixel.setGreen(pixelChange(pixel.getGreen()));
  131.         pixel.setBlue(pixelChange(pixel.getBlue()));
  132.     }
  133.     return image;
  134. }
  135. function pixelChange(pixelValue){
  136.     return Math.floor(pixelValue/16) * 16;
  137. }
');