Skip to content

Instantly share code, notes, and snippets.

@ccagle8
Last active October 15, 2024 14:39
Show Gist options
  • Save ccagle8/1d009f791a1746fae1ac88903879402e to your computer and use it in GitHub Desktop.
Save ccagle8/1d009f791a1746fae1ac88903879402e to your computer and use it in GitHub Desktop.
PHP Function - Transform hex color to KML format. Used on https://cartographyvectors.com
/*
# KML files use a combined hexadecimal value in place of the normal HTML rgba value.
# The format is described in detail here: https://developers.google.com/kml/documentation/kmlreference#elements-specific-to-balloonstyle
#
# Syntax Example:
# $kmlColor = hexToKmlColor('#CC0000', 40); // returns `6600CC00`
#
# This function can handle all formats of hex values: with or without the hash, shorthand or long.
# It also handles opacity values either in percentage or decimal form.
#
# Developed for use on https://cartographyvectors.com
*/
function hexToKmlColor($hex, $opacity) {
# opacity lookup: percentage to hex value
$alpha = array(100 => 'FF', 99 => 'FC', 98 => 'FA', 97 => 'F7', 96 => 'F5', 95 => 'F2', 94 => 'F0', 93 => 'ED', 92 => 'EB', 91 => 'E8', 90 => 'E6', 89 => 'E3', 88 => 'E0', 87 => 'DE', 86 => 'DB', 85 => 'D9', 84 => 'D6', 83 => 'D4', 82 => 'D1', 81 => 'CF', 80 => 'CC', 79 => 'C9', 78 => 'C7', 77 => 'C4', 76 => 'C2', 75 => 'BF', 74 => 'BD', 73 => 'BA', 72 => 'B8', 71 => 'B5', 70 => 'B3', 69 => 'B0', 68 => 'AD', 67 => 'AB', 66 => 'A8', 65 => 'A6', 64 => 'A3', 63 => 'A1', 62 => '9E', 61 => '9C', 60 => '99', 59 => '96', 58 => '94', 57 => '91', 56 => '8F', 55 => '8C', 54 => '8A', 53 => '87', 52 => '85', 51 => '82', 50 => '80', 49 => '7D', 48 => '7A', 47 => '78', 46 => '75', 45 => '73', 44 => '70', 43 => '6E', 42 => '6B', 41 => '69', 40 => '66', 39 => '63', 38 => '61', 37 => '5E', 36 => '5C', 35 => '59', 34 => '57', 33 => '54', 32 => '52', 31 => '4F', 30 => '4D', 29 => '4A', 28 => '47', 27 => '45', 26 => '42', 25 => '40', 24 => '3D', 23 => '3B', 22 => '38', 21 => '36', 20 => '33', 19 => '30', 18 => '2E', 17 => '2B', 16 => '29', 15 => '26', 14 => '24', 13 => '21', 12 => '1F', 11 => '1C', 10 => '1A', 9 => '17', 8 => '14', 7 => '12', 6 => '0F', 5 => '0D', 4 => '0A', 3 => '08', 2 => '05', 1 => '03', 0 => '00');
# hex cleanup
$hex = str_replace('#', '', $hex);
# expand shorthand hex
if (strlen($hex) == 3) {
$hex[5] = $hex[2]; // f60##0
$hex[4] = $hex[2]; // f60#00
$hex[3] = $hex[1]; // f60600
$hex[2] = $hex[1]; // f66600
$hex[1] = $hex[0]; // ff6600
}
# opacity cleanup
if($opacity<1) $opacity = round($opacity*100);
# hex spitting. KML colors go 'brg' instead of 'rgb'
$b = substr($hex, -2);
$rg = substr($hex, 4);
return $alpha[$opacity].$b.$rg;
}
@YenHub
Copy link

YenHub commented Oct 15, 2024

Could you use bin2hex instead of mapping each possible value to it's corresponding hex?

$alpha = bin2hex("100");

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment