Improved image-minimizer

* Don't minimize images that are too wide -> they will get stretched otherwise
* Don't try to modify the issue/comment when nothing changed
* Fixed typo
This commit is contained in:
litetex 2022-02-15 20:09:21 +01:00 committed by GitHub
parent 9f8e8c0856
commit c08a4e851b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 26 additions and 3 deletions

View File

@ -4,7 +4,12 @@
module.exports = async ({github, context}) => { module.exports = async ({github, context}) => {
const IGNORE_KEY = '<!-- IGNORE IMAGE MINIFY -->'; const IGNORE_KEY = '<!-- IGNORE IMAGE MINIFY -->';
const IGNORE_ALT_NAME_END = 'ignoreImageMinify'; const IGNORE_ALT_NAME_END = 'ignoreImageMinify';
// Targeted maximum height
const IMG_MAX_HEIGHT_PX = 600; const IMG_MAX_HEIGHT_PX = 600;
// maximum width of GitHub issues/comments
const IMG_MAX_WIDTH_PX = 800;
// all images that have a lower aspect ration (-> have a smaller width) than this will be minimized
const MIN_ASPECT_RATION = IMG_MAX_WIDTH_PX / IMG_MAX_HEIGHT_PX
// Get the body of the image // Get the body of the image
let initialBody = null; let initialBody = null;
@ -38,6 +43,8 @@ module.exports = async ({github, context}) => {
// Require the probe lib for getting the image dimensions // Require the probe lib for getting the image dimensions
const probe = require('probe-image-size'); const probe = require('probe-image-size');
var wasMatchModified = false;
// Try to find and replace the images with minimized ones // Try to find and replace the images with minimized ones
let newBody = await replaceAsync(initialBody, REGEX_IMAGE_LOOKUP, async (match, g1, g2) => { let newBody = await replaceAsync(initialBody, REGEX_IMAGE_LOOKUP, async (match, g1, g2) => {
@ -48,7 +55,7 @@ module.exports = async ({github, context}) => {
return match; return match;
} }
let shouldModifiy = false; let shouldModify = false;
try { try {
console.log(`Probing ${g2}`); console.log(`Probing ${g2}`);
let probeResult = await probe(g2); let probeResult = await probe(g2);
@ -58,15 +65,26 @@ module.exports = async ({github, context}) => {
if (probeResult.hUnits != 'px') { if (probeResult.hUnits != 'px') {
throw `Unexpected probeResult.hUnits (expected px but got ${probeResult.hUnits})`; throw `Unexpected probeResult.hUnits (expected px but got ${probeResult.hUnits})`;
} }
if (probeResult.height <= 0) {
throw `Unexpected probeResult.height (height is invalid: ${probeResult.height})`;
}
if (probeResult.wUnits != 'px') {
throw `Unexpected probeResult.wUnits (expected px but got ${probeResult.wUnits})`;
}
if (probeResult.width <= 0) {
throw `Unexpected probeResult.width (width is invalid: ${probeResult.width})`;
}
console.log(`Probing resulted in ${probeResult.width}x${probeResult.height}px`);
shouldModifiy = probeResult.height > IMG_MAX_HEIGHT_PX; shouldModify = probeResult.height > IMG_MAX_HEIGHT_PX && (probeResult.width / probeResult.height) < MIN_ASPECT_RATION;
} catch(e) { } catch(e) {
console.log('Probing failed:', e); console.log('Probing failed:', e);
// Immediately abort // Immediately abort
return match; return match;
} }
if (shouldModifiy) { if (shouldModify) {
wasMatchModified = true;
console.log(`Modifying match '${match}'`); console.log(`Modifying match '${match}'`);
return `<img alt="${g1}" src="${g2}" height=${IMG_MAX_HEIGHT_PX} />`; return `<img alt="${g1}" src="${g2}" height=${IMG_MAX_HEIGHT_PX} />`;
} }
@ -74,6 +92,11 @@ module.exports = async ({github, context}) => {
console.log(`Match '${match}' is ok/will not be modified`); console.log(`Match '${match}' is ok/will not be modified`);
return match; return match;
}); });
if (!wasMatchModified) {
console.log('Nothing was modified. Skipping update');
return;
}
// Update the corresponding element // Update the corresponding element
if (context.eventName == 'issue_comment') { if (context.eventName == 'issue_comment') {