MCPcopy Create free account
hub / github.com/Useful-Scripts-Extension/useful-script / getAverageRGB

Function getAverageRGB

scripts/test.js:19–64  ·  view source on GitHub ↗
(img)

Source from the content-addressed store, hash-verified

17 popupScript: {
18 onClick: async () => {
19 function getAverageRGB(img) {
20 var blockSize = 5, // only visit every 5 pixels
21 defaultRGB = { r: 0, g: 0, b: 0 }, // for non-supporting envs
22 canvas = document.createElement("canvas"),
23 context = canvas.getContext && canvas.getContext("2d"),
24 data,
25 width,
26 height,
27 i = -4,
28 length,
29 rgb = { r: 0, g: 0, b: 0 },
30 count = 0;
31
32 if (!context) {
33 return defaultRGB;
34 }
35
36 height = canvas.height =
37 img.naturalHeight || img.offsetHeight || img.height;
38 width = canvas.width = img.naturalWidth || img.offsetWidth || img.width;
39
40 context.drawImage(img, 0, 0);
41
42 try {
43 data = context.getImageData(0, 0, width, height);
44 } catch (e) {
45 /* security error, img on diff domain */
46 return defaultRGB;
47 }
48
49 length = data.data.length;
50
51 while ((i += blockSize * 4) < length) {
52 ++count;
53 rgb.r += data.data[i];
54 rgb.g += data.data[i + 1];
55 rgb.b += data.data[i + 2];
56 }
57
58 // ~~ used to floor values
59 rgb.r = ~~(rgb.r / count);
60 rgb.g = ~~(rgb.g / count);
61 rgb.b = ~~(rgb.b / count);
62
63 return rgb;
64 }
65
66 function getAverageRGBFromUrl(url) {
67 return new Promise((resolve, reject) => {

Callers 1

getAverageRGBFromUrlFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected