skins.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. var lwip = require('lwip');
  2. var exp = {};
  3. // extracts the face from an image +buffer+
  4. // result is saved to a file called +outname+
  5. // +callback+ contains error
  6. exp.extract_face = function(buffer, outname, callback) {
  7. lwip.open(buffer, "png", function(err, image) {
  8. if (err) {
  9. callback(err);
  10. } else {
  11. image.batch()
  12. .crop(8, 8, 15, 15) // face
  13. .writeFile(outname, function(err) {
  14. if (err) {
  15. callback(err);
  16. } else {
  17. callback(null);
  18. }
  19. });
  20. }
  21. });
  22. };
  23. // extracts the helm from an image +buffer+ and lays it over a +facefile+
  24. // +facefile+ is the filename of an image produced by extract_face
  25. // result is saved to a file called +outname+
  26. // +callback+ contains error
  27. exp.extract_helm = function(facefile, buffer, outname, callback) {
  28. lwip.open(buffer, "png", function(err, skin) {
  29. if (err) {
  30. callback(err);
  31. } else {
  32. lwip.open(facefile, function(err, face_img) {
  33. if (err) {
  34. callback(err);
  35. } else {
  36. skin.crop(42, 8, 49, 15, function(err, helm_img) {
  37. if (err) {
  38. callback(err);
  39. } else {
  40. face_img.paste(0, 0, helm_img, function(err, face_helm_img) {
  41. if (err) {
  42. callback(err);
  43. } else {
  44. face_helm_img.writeFile(outname, function(err) {
  45. if (err) {
  46. callback(err);
  47. } else {
  48. callback(null);
  49. // JavaScript callback hell <3
  50. }
  51. });
  52. }
  53. });
  54. }
  55. });
  56. }
  57. });
  58. }
  59. });
  60. };
  61. // resizes the image file +inname+ to +size+ by +size+ pixels
  62. // +callback+ contains error, image buffer
  63. exp.resize_img = function(inname, size, callback) {
  64. lwip.open(inname, function(err, image) {
  65. if (err) {
  66. callback(err, null);
  67. } else {
  68. image.batch()
  69. .resize(size, size, "nearest-neighbor") // nearest-neighbor doesn't blur
  70. .toBuffer('png', function(err, buffer) {
  71. callback(null, buffer);
  72. });
  73. }
  74. });
  75. };
  76. module.exports = exp;