Skip to content

Instantly share code, notes, and snippets.

@Tugzrida
Created February 19, 2020 09:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Tugzrida/ba9f3b364042923899d512597d16c751 to your computer and use it in GitHub Desktop.
Save Tugzrida/ba9f3b364042923899d512597d16c751 to your computer and use it in GitHub Desktop.
LaMetric Time icon overlayer in PHP
<?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