D. Bohdan
1 year ago
3 changed files with 61 additions and 44 deletions
@ -0,0 +1,58 @@ |
|||
#! /usr/bin/env -S deno run --allow-run --allow-read --allow-write |
|||
// Generate the screenshot and its thumbnail for a project.
|
|||
// To install the dependencies on Debian/Ubuntu:
|
|||
// $ sudo apt install imagemagick optipng wkhtmltopdf
|
|||
|
|||
const templateFile = "screenshot-page.html"; |
|||
const temporaryFile = "temp.html"; |
|||
|
|||
const slugify = (str: string) => |
|||
str |
|||
.toLowerCase() |
|||
.replace(/[^a-z0-9]+/g, "-") |
|||
.replace(/(^-|-$)/g, ""); |
|||
|
|||
if (Deno.args.length !== 2) { |
|||
console.error("usage: generate-screenshot.ts name css-file"); |
|||
Deno.exit(1); |
|||
} |
|||
|
|||
const screenshotFile = `${slugify(Deno.args[0])}.png`; |
|||
const cssFile = Deno.args[1]; |
|||
|
|||
try { |
|||
const htmlTemplate = await Deno.readTextFile(templateFile); |
|||
const css = await Deno.readTextFile(cssFile); |
|||
const html = htmlTemplate.replace(/%CSS_HERE%/, css); |
|||
await Deno.writeTextFile(temporaryFile, html); |
|||
|
|||
await Deno.run({ |
|||
cmd: ["wkhtmltoimage", temporaryFile, `screenshot/${screenshotFile}`], |
|||
}).status(); |
|||
await Deno.run({ |
|||
cmd: [ |
|||
"convert", |
|||
"-resize", |
|||
"25%", |
|||
"-adaptive-sharpen", |
|||
"10", |
|||
`screenshot/${screenshotFile}`, |
|||
`thumbnail/${screenshotFile}`, |
|||
], |
|||
}).status(); |
|||
await Deno.run({ |
|||
cmd: [ |
|||
"optipng", |
|||
"-o", |
|||
"5", |
|||
"-strip", |
|||
"all", |
|||
`screenshot/${screenshotFile}`, |
|||
`thumbnail/${screenshotFile}`, |
|||
], |
|||
}).status(); |
|||
} catch (err) { |
|||
console.error(err); |
|||
} finally { |
|||
Deno.remove(temporaryFile); |
|||
} |
@ -1,43 +0,0 @@ |
|||
#! /usr/bin/env tclsh |
|||
# Generate the screenshot and its thumbnail for a framework. Print the |
|||
# Markdown to add to README.md. To install the dependencies on Debian/Ubuntu: |
|||
# $ sudo apt install imagemagick optipng tcl tcllib wkhtmltopdf |
|||
|
|||
package require fileutil |
|||
|
|||
proc [info script] {name css github demo} { |
|||
set src screenshot-page.html |
|||
set dest temp.html |
|||
|
|||
set filename [slugify $name].png |
|||
|
|||
fileutil::writeFile $dest [regsub %CSS_HERE% [fileutil::cat $src] $css] |
|||
run wkhtmltoimage $dest screenshot/$filename |
|||
run convert \ |
|||
-resize 25% \ |
|||
-adaptive-sharpen 10 \ |
|||
screenshot/$filename \ |
|||
thumbnail/$filename |
|||
run optipng -o5 -strip all screenshot/$filename thumbnail/$filename |
|||
|
|||
puts ------\n[markup $name $github $demo $filename] |
|||
} |
|||
|
|||
proc slugify text { |
|||
string trim [regsub -all {[^[:alnum:]]+} [string tolower $text] -] - |
|||
} |
|||
|
|||
proc run args { |
|||
exec {*}$args >@ stdout 2>@ stderr |
|||
} |
|||
|
|||
proc markup {name github demo filename} { |
|||
subst -nocommands {### $name |
|||
|
|||
* [Repository](https://github.com/$github) ![GitHub stars](https://img.shields.io/github/stars/$github?style=flat-square) ![GitHub contributors](https://img.shields.io/github/contributors-anon/$github?style=flat-square) ![Last commit](https://img.shields.io/github/last-commit/$github?style=flat-square) ![GitHub open issues](https://img.shields.io/github/issues-raw/$github?style=flat-square) ![GitHub closed issues](https://img.shields.io/github/issues-closed-raw/$github?style=flat-square) |
|||
* [Demo]($demo) |
|||
|
|||
[![$filename](thumbnail/$filename)](screenshot/$filename)} |
|||
} |
|||
|
|||
[info script] {*}$argv |
Loading…
Reference in new issue