mirror of
https://github.com/hampusborgos/country-flags.git
synced 2025-12-19 17:37:21 -05:00
133 lines
3.9 KiB
JavaScript
133 lines
3.9 KiB
JavaScript
var process = require('process')
|
|
var exec = require('child_process').exec
|
|
var execSync = require('child_process').execSync
|
|
var fs = require('fs')
|
|
|
|
var help_message = "You must pass one argument to build-pngs. It should be target dimension in the format `200:` for width 200px, or `:200` for height 200px."
|
|
var svg_directory = 'svg/'
|
|
|
|
// Check arguments
|
|
function get_output_directory() {
|
|
// Replace : with x, if two dimensions are specified
|
|
var dim = process.argv[2].split(':').filter(x => x.length > 0)
|
|
var dir = 'png' + (dim.length > 1 ? dim.join('x') : dim) + 'px'
|
|
|
|
return dir
|
|
}
|
|
|
|
function get_output_dimensions() {
|
|
return process.argv[2]
|
|
}
|
|
|
|
function check_arguments(callback) {
|
|
if (process.argv.length != 3) {
|
|
console.log(help_message)
|
|
process.exit(1)
|
|
}
|
|
|
|
var dimensions = process.argv[2]
|
|
if (/^[0-9]*:[0-9]*$/.test(dimensions) && dimensions.length > 2) {
|
|
var output_folder = get_output_directory()
|
|
console.log("Output folder: " + output_folder)
|
|
|
|
if (!fs.existsSync(output_folder)){
|
|
fs.mkdirSync(output_folder)
|
|
}
|
|
|
|
callback()
|
|
}
|
|
else {
|
|
console.log(help_message)
|
|
process.exit(1)
|
|
}
|
|
}
|
|
|
|
function check_for_svgexport(callback) {
|
|
// Check for presence of imagemin-cli and svgexport
|
|
console.log("Checking if `svgexport` is available...")
|
|
exec('svgexport', function(error, stdout, stderr) {
|
|
if (stdout.indexOf("Usage: svgexport") !== -1) {
|
|
callback()
|
|
}
|
|
else {
|
|
console.log("`svgexport` is not installed.")
|
|
console.log("Please run: npm install -g svgexport")
|
|
process.exit(1)
|
|
}
|
|
})
|
|
}
|
|
|
|
function check_for_imagemin(callback) {
|
|
// Check for presence of imagemin-cli and svgexport
|
|
console.log("Checking if `imagemin-cli` is available...")
|
|
exec("imagemin --version", function(error, stdout, stderr) {
|
|
if (!error) {
|
|
callback()
|
|
}
|
|
else {
|
|
console.log("`imagemin-cli` is not installed.")
|
|
console.log("Please run: npm install -g imagemin-cli")
|
|
process.exit(1)
|
|
}
|
|
})
|
|
}
|
|
|
|
function get_all_svgs(callback) {
|
|
fs.readdir(svg_directory, function(err, items) {
|
|
if (err) {
|
|
console.log("Could not list *.svg files. You probably ran this command from the wrong working directory.")
|
|
console.log(err)
|
|
process.exit(1)
|
|
}
|
|
|
|
items = items.filter(path => /^[a-z\-]+\.svg$/.test(path))
|
|
callback(items)
|
|
}, (error) => {})
|
|
}
|
|
|
|
function convert_and_compress_svg(path_to_svg) {
|
|
var path_to_tmp_png = path_to_svg.substring(0, path_to_svg.length - 4) + '.png'
|
|
|
|
var svgexport_command = "svgexport " + path_to_svg + " " + path_to_tmp_png + " pad " + get_output_dimensions()
|
|
console.log(svgexport_command)
|
|
execSync(svgexport_command, (error, stdout, stderr) => {
|
|
if (error) {
|
|
console.log("Failed to convert SVG: " + path_to_svg)
|
|
process.exit(1)
|
|
}
|
|
})
|
|
|
|
var image_min_command = "imagemin " + path_to_tmp_png + " --out-dir=" + get_output_directory()
|
|
console.log(image_min_command)
|
|
execSync(image_min_command, (error, stdout, stderr) => {
|
|
if (error) {
|
|
console.log("Failed to convert SVG: " + path_to_svg)
|
|
process.exit(1)
|
|
}
|
|
})
|
|
|
|
// Always remove temp file
|
|
fs.unlink(path_to_tmp_png, (error) => {
|
|
console.log(error)
|
|
})
|
|
}
|
|
|
|
function convert_all_files(svgs, callback) {
|
|
for (let i = 0; i < svgs.length; i++) {
|
|
console.log("Converting [" + (i + 1) + "/" + svgs.length + "] " + svgs[i])
|
|
convert_and_compress_svg(svg_directory + svgs[i])
|
|
}
|
|
|
|
callback()
|
|
}
|
|
|
|
// Run the program
|
|
check_arguments(() =>
|
|
check_for_imagemin(() =>
|
|
check_for_svgexport(() =>
|
|
get_all_svgs((svgs) => convert_all_files(svgs, () => {
|
|
console.log("All SVGs converted to PNG!")
|
|
process.exit(0)
|
|
})
|
|
))))
|