Image HSL 180 Inversion And Left Mirror With Audio Reverse Tool
(Free & Supports Bulk Upload)
The result will appear here...
JavaScript Code (For Advanced Users)
You can edit the below JavaScript code to customize the image tool.
async function processImage(originalImg, visualAudioReverse = 1) {
/**
* Converts an RGB color value to HSL. Conversion formula
* adapted from http://en.wikipedia.org/wiki/HSL_color_space.
* Assumes r, g, and b are contained in the set [0, 255] and
* returns h, s, and l in the set [0, 1].
*/
const rgbToHsl = (r, g, b) => {
r /= 255;
g /= 255;
b /= 255;
const max = Math.max(r, g, b);
const min = Math.min(r, g, b);
let h = 0, s = 0, l = (max + min) / 2;
if (max !== min) {
const d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch (max) {
case r: h = (g - b) / d + (g < b ? 6 : 0); break;
case g: h = (b - r) / d + 2; break;
case b: h = (r - g) / d + 4; break;
}
h /= 6;
}
return [h, s, l];
};
/**
* Converts an HSL color value to RGB. Conversion formula
* adapted from http://en.wikipedia.org/wiki/HSL_color_space.
* Assumes h, s, and l are contained in the set [0, 1] and
* returns r, g, and b in the set [0, 255].
*/
const hslToRgb = (h, s, l) => {
let r, g, b;
if (s === 0) {
r = g = b = l; // achromatic
} else {
const hue2rgb = (p, q, t) => {
if (t < 0) t += 1;
if (t > 1) t -= 1;
if (t < 1 / 6) return p + (q - p) * 6 * t;
if (t < 1 / 2) return q;
if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
return p;
};
const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
const p = 2 * l - q;
r = hue2rgb(p, q, h + 1 / 3);
g = hue2rgb(p, q, h);
b = hue2rgb(p, q, h - 1 / 3);
}
return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
};
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d', { willReadFrequently: true });
// Ensure the image is fully loaded before processing.
if (!originalImg.complete) {
await new Promise((resolve, reject) => {
originalImg.onload = resolve;
originalImg.onerror = reject;
});
}
canvas.width = originalImg.naturalWidth;
canvas.height = originalImg.naturalHeight;
// Step 1: Draw original image to canvas to get pixel data
ctx.drawImage(originalImg, 0, 0);
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
const data = imageData.data;
// Step 2: Perform HSL 180 inversion on each pixel
for (let i = 0; i < data.length; i += 4) {
const r = data[i];
const g = data[i + 1];
const b = data[i + 2];
let [h, s, l] = rgbToHsl(r, g, b);
// Invert hue by 180 degrees (0.5 in the [0, 1] scale)
h = (h + 0.5) % 1;
const [newR, newG, newB] = hslToRgb(h, s, l);
data[i] = newR;
data[i + 1] = newG;
data[i + 2] = newB;
}
// Step 3: Put the HSL-inverted data back on the canvas.
ctx.putImageData(imageData, 0, 0);
// Step 4: Perform left mirror.
// The left half is already correct. We draw a mirrored version of it onto the right half.
const halfWidth = Math.ceil(canvas.width / 2);
ctx.save();
ctx.translate(canvas.width, 0);
ctx.scale(-1, 1);
ctx.drawImage(canvas, 0, 0, halfWidth, canvas.height, 0, 0, halfWidth, canvas.height);
ctx.restore();
// Step 5: Perform "Audio Reverse" (visualized as a vertical flip), if requested.
if (Number(visualAudioReverse) === 1) {
const tempCanvas = document.createElement('canvas');
tempCanvas.width = canvas.width;
tempCanvas.height = canvas.height;
const tempCtx = tempCanvas.getContext('2d');
tempCtx.drawImage(canvas, 0, 0);
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.save();
ctx.translate(0, canvas.height);
ctx.scale(1, -1);
ctx.drawImage(tempCanvas, 0, 0);
ctx.restore();
}
return canvas;
}
Free Image Tool Creator
Can't find the image tool you're looking for? Create one based on your own needs now!
The Image HSL 180 Inversion and Left Mirror with Audio Reverse Tool allows users to perform advanced image transformations. It converts images by inverting their hues by 180 degrees, creating a mirror effect on the left side of the image, and optionally reversing the visual representation, simulating an audio reverse effect. This tool is useful for artists and designers looking to create visually striking effects, as well as for anyone interested in experimenting with image processing techniques for creative projects.