MCPcopy Create free account
hub / github.com/ajatkj/scriptable / tintSFSymbol

Function tintSFSymbol

LSWeather.js:1161–1198  ·  view source on GitHub ↗
(image, color)

Source from the content-addressed store, hash-verified

1159FUNCTION tintSFSymbol
1160------------------------------------------------------------------*/
1161async function tintSFSymbol(image, color) {
1162 let html = `
1163 <img id="image" src="data:image/png;base64,${Data.fromPNG(image).toBase64String()}" />
1164 <canvas id="canvas"></canvas>
1165 `;
1166
1167 let js = `
1168 let img = document.getElementById("image");
1169 let canvas = document.getElementById("canvas");
1170 let color = 0x${color.hex};
1171 canvas.width = img.width;
1172 canvas.height = img.height;
1173 let ctx = canvas.getContext("2d");
1174 ctx.drawImage(img, 0, 0);
1175 let imgData = ctx.getImageData(0, 0, img.width, img.height);
1176 // ordered in RGBA format
1177 let data = imgData.data;
1178 for (let i = 0; i < data.length; i++) {
1179 // skip alpha channel
1180 if (i % 4 === 3) continue;
1181 // bit shift the color value to get the correct channel
1182 data[i] = (color >> (2 - i % 4) * 8) & 0xFF
1183 }
1184 ctx.putImageData(imgData, 0, 0);
1185 canvas.toDataURL("image/png").replace(/^data:image\\/png;base64,/, "");
1186 `;
1187 let wv = new WebView();
1188 await wv.loadHTML(html);
1189 let base64 = await wv.evaluateJavaScript(js);
1190 const tintedImage = Image.fromData(Data.fromBase64String(base64));
1191
1192 // Above function expands the image based on Device scale, resize it to original image size
1193 const symbolCanvas=new DrawContext();
1194 symbolCanvas.opaque = false;
1195 symbolCanvas.size = image.size;
1196 symbolCanvas.drawImageInRect(tintedImage, new Rect(0,0,image.size.width,image.size.height));
1197 return symbolCanvas.getImage();
1198}
1199/*------------------------------------------------------------------
1200FUNCTION getTextWidth
1201------------------------------------------------------------------*/

Callers 1

prefixImageFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected