12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- /**
- * Extend proto.
- */
- module.exports = function (proto) {
- proto.thumb = function thumb (w, h, name, quality, align, callback) {
- var self = this
- , args = Array.prototype.slice.call(arguments);
- callback = args.pop();
- w = args.shift();
- h = args.shift();
- name = args.shift();
- quality = args.shift() || 63;
- align = args.shift() || 'topleft';
- self.size(function (err, size) {
- if (err) {
- return callback.apply(self, arguments);
- }
- w = parseInt(w, 10);
- h = parseInt(h, 10);
- var w1, h1;
- var xoffset = 0;
- var yoffset = 0;
- if (size.width < size.height) {
- w1 = w;
- h1 = Math.floor(size.height * (w/size.width));
- if (h1 < h) {
- w1 = Math.floor(w1 * (((h-h1)/h) + 1));
- h1 = h;
- }
- } else if (size.width > size.height) {
- h1 = h;
- w1 = Math.floor(size.width * (h/size.height));
- if (w1 < w) {
- h1 = Math.floor(h1 * (((w-w1)/w) + 1));
- w1 = w;
- }
- } else if (size.width == size.height) {
- var bigger = (w>h?w:h);
- w1 = bigger;
- h1 = bigger;
- }
- if (align == 'center') {
- if (w < w1) {
- xoffset = (w1-w)/2;
- }
- if (h < h1) {
- yoffset = (h1-h)/2;
- }
- }
- self
- .quality(quality)
- .in("-size", w1+"x"+h1)
- .scale(w1, h1)
- .crop(w, h, xoffset, yoffset)
- .noProfile()
- .write(name, function () {
- callback.apply(self, arguments)
- });
- });
- return self;
- }
- }
|