mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
75 lines
3.0 KiB
JavaScript
75 lines
3.0 KiB
JavaScript
(function () {
|
|
var ns = $.namespace('pskl.controller.settings.exportimage');
|
|
|
|
ns.ZipExportController = function (piskelController, exportController) {
|
|
this.piskelController = piskelController;
|
|
this.exportController = exportController;
|
|
};
|
|
|
|
pskl.utils.inherit(ns.ZipExportController, pskl.controller.settings.AbstractSettingController);
|
|
|
|
ns.ZipExportController.prototype.init = function () {
|
|
this.pngFilePrefixInput = document.querySelector('.zip-prefix-name');
|
|
this.pngFilePrefixInput.value = 'sprite_';
|
|
|
|
this.splitByLayersCheckbox = document.querySelector('.zip-split-layers-checkbox');
|
|
|
|
var zipButton = document.querySelector('.zip-generate-button');
|
|
this.addEventListener(zipButton, 'click', this.onZipButtonClick_);
|
|
};
|
|
|
|
ns.ZipExportController.prototype.onZipButtonClick_ = function () {
|
|
var zip = new window.JSZip();
|
|
|
|
if (this.splitByLayersCheckbox.checked) {
|
|
this.splittedExport_(zip);
|
|
} else {
|
|
this.mergedExport_(zip);
|
|
}
|
|
|
|
var fileName = this.getPiskelName_() + '.zip';
|
|
|
|
var blob = zip.generate({
|
|
type : 'blob'
|
|
});
|
|
|
|
pskl.utils.FileUtils.downloadAsFile(blob, fileName);
|
|
};
|
|
|
|
ns.ZipExportController.prototype.mergedExport_ = function (zip) {
|
|
var paddingLength = ('' + this.piskelController.getFrameCount()).length;
|
|
var zoom = this.exportController.getExportZoom();
|
|
for (var i = 0; i < this.piskelController.getFrameCount(); i++) {
|
|
var render = this.piskelController.renderFrameAt(i, true);
|
|
var canvas = pskl.utils.ImageResizer.scale(render, zoom);
|
|
var basename = this.pngFilePrefixInput.value;
|
|
var id = pskl.utils.StringUtils.leftPad(i, paddingLength, '0');
|
|
var filename = basename + id + '.png';
|
|
zip.file(filename, pskl.utils.CanvasUtils.getBase64FromCanvas(canvas) + '\n', {base64: true});
|
|
}
|
|
};
|
|
|
|
ns.ZipExportController.prototype.splittedExport_ = function (zip) {
|
|
var layers = this.piskelController.getLayers();
|
|
var framePaddingLength = ('' + this.piskelController.getFrameCount()).length;
|
|
var layerPaddingLength = ('' + layers.length).length;
|
|
var zoom = this.exportController.getExportZoom();
|
|
for (var j = 0; this.piskelController.hasLayerAt(j); j++) {
|
|
var layer = this.piskelController.getLayerAt(j);
|
|
var layerid = pskl.utils.StringUtils.leftPad(j, layerPaddingLength, '0');
|
|
for (var i = 0; i < this.piskelController.getFrameCount(); i++) {
|
|
var render = pskl.utils.LayerUtils.renderFrameAt(layer, i, true);
|
|
var canvas = pskl.utils.ImageResizer.scale(render, zoom);
|
|
var basename = this.pngFilePrefixInput.value;
|
|
var frameid = pskl.utils.StringUtils.leftPad(i + 1, framePaddingLength, '0');
|
|
var filename = 'l' + layerid + '_' + basename + frameid + '.png';
|
|
zip.file(filename, pskl.utils.CanvasUtils.getBase64FromCanvas(canvas) + '\n', {base64: true});
|
|
}
|
|
}
|
|
};
|
|
|
|
ns.ZipExportController.prototype.getPiskelName_ = function () {
|
|
return this.piskelController.getPiskel().getDescriptor().name;
|
|
};
|
|
})();
|