Advertisement
Guest User

Untitled

a guest
Nov 20th, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.43 KB | None | 0 0
  1. var logging = require("./logging");
  2. var lwip = require("lwip");
  3. var fs = require("fs");
  4.  
  5. var exp = {};
  6.  
  7. // extracts the face from an image +buffer+
  8. // result is saved to a file called +outname+
  9. // callback: error
  10. exp.extract_face = function(buffer, outname, callback) {
  11. lwip.open(buffer, "png", function(err, image) {
  12. if (err) {
  13. callback(err);
  14. } else {
  15. image.batch()
  16. .crop(8, 8, 15, 15) // face
  17. .writeFile(outname, function(write_err) {
  18. if (write_err) {
  19. callback(write_err);
  20. } else {
  21. callback(null);
  22. }
  23. });
  24. }
  25. });
  26. };
  27.  
  28. // extracts the helm from an image +buffer+ and lays it over a +facefile+
  29. // +facefile+ is the filename of an image produced by extract_face
  30. // result is saved to a file called +outname+
  31. // callback: error
  32. exp.extract_helm = function(rid, facefile, buffer, outname, callback) {
  33. lwip.open(buffer, "png", function(err, skin_img) {
  34. if (err) {
  35. callback(err);
  36. } else {
  37. lwip.open(facefile, function(open_err, face_img) {
  38. if (open_err) {
  39. callback(open_err);
  40. } else {
  41. face_img.toBuffer("png", { compression: "none" }, function(buf_err, face_buffer) {
  42. // FIXME: buf_err is not handled
  43. skin_img.crop(40, 8, 47, 15, function(crop_err, helm_img) {
  44. if (crop_err) {
  45. callback(crop_err);
  46. } else {
  47. face_img.paste(0, 0, helm_img, function(img_err, face_helm_img) {
  48. if (img_err) {
  49. callback(img_err);
  50. } else {
  51. face_helm_img.toBuffer("png", {compression: "none"}, function(buf_err2, face_helm_buffer) {
  52. // FIXME: buf_err2 is not handled
  53. if (face_helm_buffer.toString() !== face_buffer.toString()) {
  54. face_helm_img.writeFile(outname, function(write_err) {
  55. callback(write_err);
  56. });
  57. } else {
  58. logging.log(rid, "helm img == face img, not storing!");
  59. callback(null);
  60. }
  61. });
  62. }
  63. });
  64. }
  65. });
  66. });
  67. }
  68. });
  69. }
  70. });
  71. };
  72.  
  73. // resizes the image file +inname+ to +size+ by +size+ pixels
  74. // callback: error, image buffer
  75. exp.resize_img = function(inname, size, callback) {
  76. lwip.open(inname, function(err, image) {
  77. if (err) {
  78. callback(err, null);
  79. } else {
  80. image.batch()
  81. .resize(size, size, "nearest-neighbor") // nearest-neighbor doesn't blur
  82. .toBuffer("png", function(buf_err, buffer) {
  83. // FIXME: buf_err is not handled
  84. callback(null, buffer);
  85. });
  86. }
  87. });
  88. };
  89.  
  90. // returns "alex" or "steve" calculated by the +uuid+
  91. exp.default_skin = function(uuid) {
  92. if (uuid.length <= 16) {
  93. // we can't get the skin type by username
  94. return "steve";
  95. } else {
  96. // great thanks to Minecrell for research into Minecraft and Java's UUID hashing!
  97. // https://git.io/xJpV
  98. // MC uses `uuid.hashCode() & 1` for alex
  99. // that can be compacted to counting the LSBs of every 4th byte in the UUID
  100. // an odd sum means alex, an even sum means steve
  101. // XOR-ing all the LSBs gives us 1 for alex and 0 for steve
  102. var lsbs_even = parseInt(uuid[ 7], 16) ^
  103. parseInt(uuid[15], 16) ^
  104. parseInt(uuid[23], 16) ^
  105. parseInt(uuid[31], 16);
  106. return lsbs_even ? "alex" : "steve";
  107. }
  108. };
  109.  
  110. // helper method for opening a skin file from +skinpath+
  111. // callback: error, image buffer
  112. exp.open_skin = function(rid, skinpath, callback) {
  113. fs.readFile(skinpath, function(err, buf) {
  114. if (err) {
  115. logging.error(rid, "error while opening skin file:", err);
  116. callback(err, null);
  117. } else {
  118. callback(null, buf);
  119. }
  120. });
  121. };
  122.  
  123. // write the image +buffer+ to the +outpath+ file
  124. // callback: error
  125. exp.save_image = function(buffer, outpath, callback) {
  126. lwip.open(buffer, "png", function(err, image) {
  127. if (err) {
  128. callback(err);
  129. } else {
  130. image.batch()
  131. .writeFile(outpath, function(write_err) {
  132. if (write_err) {
  133. callback(write_err);
  134. } else {
  135. callback(null);
  136. }
  137. });
  138. }
  139. });
  140. };
  141.  
  142. module.exports = exp;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement