Advertisement
Guest User

Untitled

a guest
May 30th, 2015
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. AWS.config.update({
  2. accessKeyId: 'YOUR_ACCESS_KEY_ID',
  3. secretAccessKey: 'YOUR_SECRET_ACCESS_KEY'
  4. });
  5.  
  6. window.URL = window.URL || window.webkitURL;
  7.  
  8. var BUCKET_NAME = "BUCKET_NAME",
  9. FOLDER_ROOT_PATH = "folder_root_path/",
  10. FILE_EXTENSION = ".jpg",
  11. ORIGINAL_SIZE = {w: 581, h: 608},
  12. IMAGE_SIZES = [{w: 160, h: 130}, {w: 169, h: 132}],
  13. FOLDER_IMAGE_SIZES = ["160x130", "169x132"],
  14. FOLDER_ORIGINAL_IMAGE_SIZE = ["581x608"];
  15.  
  16. var bucket = new AWS.S3({params: {Bucket: BUCKET_NAME}}),
  17. imageContainer = document.getElementById("cropped-images"),
  18. initialImageContainer = document.getElementById('initial-image'),
  19. fileChooser = document.getElementById('file-chooser'),
  20. uploadButton = document.getElementById('upload-button'),
  21. uuidContainer = document.getElementById('uuid'),
  22. initialImage;
  23.  
  24. fileChooser.addEventListener("change", function () {
  25. var files = this.files;
  26. if (files) {
  27. loadInitialImage(files[0]);
  28. }
  29. });
  30.  
  31. function loadInitialImage(file) {
  32. var img = document.createElement("img");
  33. img.src = window.URL.createObjectURL(file);
  34. img.onload = function () {
  35. window.URL.revokeObjectURL(this.src);
  36. var container = document.createElement("div"),
  37. canvasUrl, canvas;
  38.  
  39. for (var i = 0, len = FOLDER_IMAGE_SIZES.length; i < len; i++) {
  40. canvas = document.createElement("canvas");
  41. imgSize = IMAGE_SIZES[i];
  42.  
  43. canvas.id = "image" + imgSize.w + "x" + imgSize.h;
  44. canvas.width = imgSize.w;
  45. canvas.height = imgSize.h;
  46.  
  47. canvasUrl = drawCroppedImage(img, canvas, ORIGINAL_SIZE.w, ORIGINAL_SIZE.h, imgSize.w, imgSize.h);
  48. container.appendChild(canvas);
  49. canvas.url = canvasUrl;
  50. }
  51. imageContainer.appendChild(container);
  52. };
  53.  
  54. initialImageContainer.appendChild(img);
  55. initialImage = file;
  56. }
  57.  
  58. uploadButton.addEventListener('click', function () {
  59. var uuid,
  60. finalFilename,
  61. params;
  62.  
  63. uuid = generateUUID(initialImage.name);
  64. uuidContainer.innerHTML = 'UUID: ' + uuid;
  65.  
  66. //Cropped images
  67. for (var i = 0, len = FOLDER_IMAGE_SIZES.length; i < len; i++) {
  68. var imgSize = IMAGE_SIZES[i],
  69. canvas = document.getElementById("image" + imgSize.w + "x" + imgSize.h);
  70.  
  71. finalFilename = FOLDER_ROOT_PATH + FOLDER_IMAGE_SIZES[i] + "/" + uuid + FILE_EXTENSION;
  72. params = {Key: finalFilename, ContentType: "image/jpg", Body: dataURItoBlob(canvas.url)};
  73. uploadToBucket(params);
  74. }
  75.  
  76. //Original imagesx
  77. finalFilename = FOLDER_ROOT_PATH + FOLDER_ORIGINAL_IMAGE_SIZE + "/" + uuid + FILE_EXTENSION;
  78. params = {Key: finalFilename, ContentType: initialImage.type, Body: initialImage};
  79. uploadToBucket(params);
  80.  
  81. }, false);
  82.  
  83. function dataURItoBlob(dataURI) {
  84. var binary = atob(dataURI.split(',')[1]);
  85. var array = [];
  86. for(var i = 0; i < binary.length; i++) {
  87. array.push(binary.charCodeAt(i));
  88. }
  89. return new Blob([new Uint8Array(array)], {type: 'image/jpeg'});
  90. }
  91.  
  92. function generateUUID() {
  93. var d = new Date().getTime();
  94. return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
  95. var r = (d + Math.random() * 16) % 16 | 0;
  96. d = Math.floor(d / 16);
  97. return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
  98. });
  99. }
  100.  
  101. function uploadToBucket(params) {
  102. bucket.upload(params, function (err, data) {});
  103. }
  104.  
  105. function drawCroppedImage(img, canvas, sw, sh, dw, dh) {
  106. var ctx = canvas.getContext('2d');
  107. ctx.drawImage(img, 0, 0, sw, sh, 0, -dh * .15, dw, dh * 1.25);
  108.  
  109. return canvas.toDataURL("image/jpeg");
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement