Created
February 19, 2020 09:12
-
-
Save Tugzrida/ba9f3b364042923899d512597d16c751 to your computer and use it in GitHub Desktop.
LaMetric Time icon overlayer in PHP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// This file defines the function lametricFormatNumber which accepts a filepath to an 8x8px PNG and string. | |
// The general idea is that an 8-digit number can be displayed on the LaMetric without scrolling by overlaying | |
// the left-most digit over the icon. By providing your desired icon PNG file(GIFs for animated icons not yet | |
// supported) and number to lametricFormatNumber, you will recieve as output your icon and number, with the first | |
// digit overlaid on the icon if the number has 8 or more digits. The alphabet A-Z is also included, however does not | |
// work as well, as the letters I, M, N, Q and W deviate from the 3-pixel width of all the other characters and digits. | |
// Theoretically, a 9-digit number could also be displayed as there is enough room on top of the icon, however then there | |
// won't be much room left for the actual icon, so it's not really worth it. At the end of this file is an example json | |
// output in LaMetric time format using the function. | |
$lametricFont = array( | |
"A" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 4), array(5, 5), array(6, 1), array(6, 3), array(7, 2), array(7, 3), array(7, 4), array(7, 5)), | |
"B" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 4), array(5, 5), array(6, 1), array(6, 3), array(6, 5), array(7, 2), array(7, 4)), | |
"C" => array(array(5, 2), array(5, 3), array(5, 4), array(6, 1), array(6, 5), array(7, 2), array(7, 4)), | |
"D" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 4), array(5, 5), array(6, 1), array(6, 5), array(7, 2), array(7, 3), array(7, 4)), | |
"E" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 4), array(5, 5), array(6, 1), array(6, 3), array(6, 5), array(7, 1), array(7, 3), array(7, 5)), | |
"F" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 4), array(5, 5), array(6, 1), array(6, 3), array(7, 1), array(7, 3)), | |
"G" => array(array(5, 2), array(5, 3), array(5, 4), array(6, 1), array(6, 5), array(7, 1), array(7, 3), array(7, 4), array(7, 5)), | |
"H" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 4), array(5, 5), array(6, 3), array(7, 1), array(7, 2), array(7, 3), array(7, 4), array(7, 5)), | |
"I" => array(array(7, 1), array(7, 2), array(7, 3), array(7, 4), array(7, 5)), | |
"J" => array(array(7, 1), array(7, 2), array(7, 3), array(7, 4), array(6, 5), array(5, 4)), | |
"K" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 4), array(5, 5), array(6, 3), array(7, 1), array(7, 2), array(7, 4), array(7, 5)), | |
"L" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 4), array(5, 5), array(6, 5), array(7, 5)), | |
"M" => array(array(3, 1), array(3, 2), array(3, 3), array(3, 4), array(3, 5), array(4, 2), array(5, 3), array(6, 2), array(7, 1), array(7, 2), array(7, 3), array(7, 4), array(7, 5)), | |
"N" => array(array(4, 1), array(4, 2), array(4, 3), array(4, 4), array(4, 5), array(5, 2), array(6, 3), array(7, 1), array(7, 2), array(7, 3), array(7, 4), array(7, 5)), | |
"O" => array(array(5, 2), array(5, 3), array(5, 4), array(6, 1), array(6, 5), array(7, 2), array(7, 3), array(7, 4)), | |
"P" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 4), array(5, 5), array(6, 1), array(6, 3), array(7, 1), array(7, 2)), | |
"Q" => array(array(4, 2), array(4, 3), array(4, 4), array(5, 1), array(5, 5), array(6, 2), array(6, 3), array(6, 4), array(6, 5), array(7, 5)), | |
"R" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 4), array(5, 5), array(6, 1), array(6, 3), array(7, 1), array(7, 2), array(7, 4), array(7, 5)), | |
"S" => array(array(7, 1), array(6, 1), array(5, 1), array(5, 2), array(5, 3), array(6, 3), array(7, 3), array(7, 4), array(7, 5), array(6, 5), array(5, 5)), | |
"T" => array(array(5, 1), array(6, 1), array(7, 1), array(6, 2), array(6, 3), array(6, 4), array(6, 5)), | |
"U" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 4), array(5, 5), array(6, 5), array(7, 1), array(7, 2), array(7, 3), array(7, 4), array(7, 5)), | |
"V" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 4), array(6, 5), array(7, 1), array(7, 2), array(7, 3), array(7, 4)), | |
"W" => array(array(3, 1), array(3, 2), array(3, 3), array(3, 4), array(4, 5), array(5, 4), array(6, 5), array(7, 1), array(7, 2), array(7, 3), array(7, 4)), | |
"X" => array(array(5, 1), array(5, 2), array(5, 4), array(5, 5), array(6, 3), array(7, 1), array(7, 2), array(7, 4), array(7, 5)), | |
"Y" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 5), array(6, 3), array(6, 5), array(7, 1), array(7, 2), array(7, 3), array(7, 4)), | |
"Z" => array(array(5, 1), array(6, 1), array(7, 1), array(7, 2), array(6, 3), array(5, 4), array(5, 5), array(6, 5), array(7, 5)), | |
"1" => array(array(5, 2), array(5, 5), array(6, 1), array(6, 2), array(6, 3), array(6, 4), array(6, 5), array(7, 5)), | |
"2" => array(array(7, 1), array(6, 1), array(5, 1), array(7, 2), array(5, 3), array(6, 3), array(7, 3), array(5, 4), array(7, 5), array(6, 5), array(5, 5)), | |
"3" => array(array(7, 1), array(6, 1), array(5, 1), array(7, 2), array(5, 3), array(6, 3), array(7, 3), array(7, 4), array(7, 5), array(6, 5), array(5, 5)), | |
"4" => array(array(5, 1), array(5, 2), array(5, 3), array(6, 3), array(7, 1), array(7, 2), array(7, 3), array(7, 4), array(7, 5)), | |
"5" => array(array(7, 1), array(6, 1), array(5, 1), array(5, 2), array(5, 3), array(6, 3), array(7, 3), array(7, 4), array(7, 5), array(6, 5), array(5, 5)), | |
"6" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 4), array(5, 5), array(6, 1), array(6, 3), array(6, 5), array(7, 1), array(7, 3), array(7, 4), array(7, 5)), | |
"7" => array(array(5, 1), array(6, 1), array(7, 1), array(7, 2), array(7, 3), array(7, 4), array(7, 5)), | |
"8" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 4), array(5, 5), array(6, 1), array(6, 3), array(6, 5), array(7, 1), array(7, 2), array(7, 3), array(7, 4), array(7, 5)), | |
"9" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 5), array(6, 1), array(6, 3), array(6, 5), array(7, 1), array(7, 2), array(7, 3), array(7, 4), array(7, 5)), | |
"0" => array(array(5, 1), array(5, 2), array(5, 3), array(5, 4), array(5, 5), array(6, 1), array(6, 5), array(7, 1), array(7, 2), array(7, 3), array(7, 4), array(7, 5)) | |
); | |
function lametricFormatNumber($baseIconPath, $txt) { | |
$txt = strtoupper(strval($txt)); | |
$txtLen = strlen($txt); | |
$img = imagecreatefrompng($baseIconPath); | |
if ($txtLen > 7) { | |
global $lametricFont; | |
$firstCharPxls = $lametricFont[substr($txt, 0, 1)]; | |
$white = imagecolorallocate($img, 255, 255, 255); | |
$txt = substr($txt, 1); | |
foreach ($firstCharPxls as $pxl) { | |
imagesetpixel($img, $pxl[0], $pxl[1], $white); | |
} | |
} | |
ob_start(); | |
imagepng($img); | |
$iconData = "data:image/png;base64," . base64_encode(ob_get_clean()); | |
return array($iconData, $txt); | |
} | |
// Demo usage: | |
header('Content-Type: application/json'); | |
list($ico, $tex) = lametricFormatNumber('ico.png', '12345678'); | |
echo json_encode(array("frames" => array( | |
array( | |
"text" => $tex, | |
"icon" => $ico, | |
"index" => 0 | |
) | |
))); | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment