Skip to content

Instantly share code, notes, and snippets.

@HazemKhaled
Forked from FokkeZB/DOWNSIZE.md
Last active August 29, 2015 14:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save HazemKhaled/6edb9bb6432da551f712 to your computer and use it in GitHub Desktop.
Save HazemKhaled/6edb9bb6432da551f712 to your computer and use it in GitHub Desktop.
function downsize(event, logger) {
var wrench = require("wrench"),
path = require("path"),
fs = require("fs"),
imagemagick = require("imagemagick"),
U = require('../../utils');
// Generator
function generator(source, target, percentage) {
// File (or 9-patch version) doesn't exist or (non 9-patch) file is older
if (!fs.existsSync(target.replace(/(\.png)$/, '.9$1')) && (!fs.existsSync(target) || (fs.statSync(source).mtime > fs.statSync(target).mtime))) {
if (percentage === '100%') {
logger.info('Copying: ' + target);
U.copyFileSync(source, target);
} else {
logger.info('Downsizing ' + percentage + ': ' + target);
var target_dir = path.dirname(target);
if (!path.existsSync(target_dir)) {
wrench.mkdirSyncRecursive(target_dir, 0777);
}
imagemagick.convert([source, '-resize', percentage, target], function(error, m) {
error && logger.error('Failed generating "' + target + '" because of: ' + error.message);
});
}
}
}
// Walker
function walk(dir) {
wrench.readdirSyncRecursive(dir).forEach(function(file) {
// Catch retina files, except for iPhone 6+
if (file.indexOf('@3x') > 0 && file.indexOf('-736h@2x') < 0) {
var source = path.join(dir, file);
var target = path.join(dir, file.replace('@3x', ''));
// iOS
if (event.alloyConfig.platform === 'ios') {
// retina
generator(source, source.replace('@3x', '@2x'), '67%');
// Non-retina
generator(source, source.replace('@3x', ''), '33%');
// Android
} else if (event.alloyConfig.platform === 'android') {
target = target.replace(/(\/iphone)?(\/images)(\/.+\/)?(.+)$/, '/android$2/_DENSITY_$3$4');
// xxhdpi
generator(source, target.replace('_DENSITY_', 'res-xxhdpi'), '100%');
// xhdpi
generator(source, target.replace('_DENSITY_', 'res-xhdpi'), '67%');
// hdpi
generator(source, target.replace('_DENSITY_', 'res-hdpi'), '50%');
// mdpi
generator(source, target.replace('_DENSITY_', 'res-mdpi'), '33%');
}
}
});
}
// Un-retina /app to find main assets as well as in themes and widgets
walk(event.dir.home);
}
task("pre:load", function(event, logger) {
downsize(event, logger);
});
@FokkeZB
Copy link

FokkeZB commented Sep 28, 2014

If you have the TiCons CLI installed you can simply do:

task("pre:load", function(event, logger) {
    require('ticons').assets();
});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment