aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports/controls/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports/controls/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js')
-rw-r--r--src/imports/controls/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/imports/controls/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js b/src/imports/controls/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js
new file mode 100644
index 00000000..a7f9a459
--- /dev/null
+++ b/src/imports/controls/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js
@@ -0,0 +1,24 @@
+// 9-patch export
+//
+// This plugin crops upscaled 9-patch PNG assets when exported from Sketch,
+// to ensure that 9-patch borders remain 1px wide when upscaled.
+//
+function onExportSlices(context) {
+ var exports = context.actionContext.exports;
+ for (var i = 0; i < exports.count(); ++i) {
+ var name = exports[i].request.name();
+ var scale = exports[i].request.scale();
+ if (scale > 1 && name.endsWith(".9"))
+ cropAsset(exports[i].path, scale - 1);
+ }
+}
+
+function cropAsset(path, inset) {
+ var url = NSURL.fileURLWithPath(path);
+ var img = CIImage.imageWithContentsOfURL(url);
+ var rect = NSInsetRect(img.extent(), inset, inset);
+ var cropped = img.imageByCroppingToRect(rect);
+ var rep = NSBitmapImageRep.alloc().initWithCIImage(cropped);
+ var data = rep.PNGRepresentationWithInterlaced(false);
+ data.writeToFile(path);
+}