Merge pull request #7884 from litetex/improve-image-minimizer

Improved image-minimizer
This commit is contained in:
litetex 2022-02-17 19:33:39 +01:00 committed by GitHub
commit 2814ae6d3c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

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 ratio (-> have a smaller width) than this will be minimized
const MIN_ASPECT_RATIO = 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;
@ -39,6 +44,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) => {
console.log(`Found match '${match}'`); console.log(`Found match '${match}'`);
@ -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_RATIO;
} 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} />`;
} }
@ -75,6 +93,11 @@ module.exports = async ({github, context}) => {
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') {
console.log('Updating comment with id', context.payload.comment.id); console.log('Updating comment with id', context.payload.comment.id);