Конвертація кольору формату hex в rgba (з підтримкою прозорості)

В одному з проектів постало питання виставити колорпікер для фону заголовків в банерах. Завдання нескладне, тому я взяв перший ліпший скрипт, який дозволяє юзеру вибрати колір формату #000000.Проте через тиждень-другий клієнт попросив подбати про альфа канал — прозорість підкладки, а як відомо у hex з цим проблеми… При цьому замовник вже встиг попрацювати з даними і наповнити різними кольорами силу силенну об’єктів.

Відтак замість того аби шукати інший скрипт та перезаписувати дані, було доцільніше подумати над конвертацією на льоту. Через годину пошуку добрий дядько гугл видав сторінку з ось таким скарбом.

function hex2rgba($colorus, $opacity = false) {
 $default = 'rgb(0,0,0)'; 
 //Return default if no color provided
 if(empty($colorus))
 return $default; 
 //Sanitize $colorus if "#" is provided 
 if ($colorus[0] == '#' ) {
 $colorus = substr( $colorus, 1 );
 } 
 //Check if color has 6 or 3 characters and get values
 if (strlen($colorus) == 6) {
 $hex = array( $colorus[0] . $colorus[1], $colorus[2] . $colorus[3], $colorus[4] . $colorus[5] );
 } elseif ( strlen( $colorus ) == 3 ) {
 $hex = array( $colorus[0] . $colorus[0], $colorus[1] . $colorus[1], $colorus[2] . $colorus[2] );
 } else {
 return $default;
 } 
 //Convert hexadec to rgb
 $rgb = array_map('hexdec', $hex);
 
 //Check if opacity is set(rgba or rgb)
 if($opacity){
 if(abs($opacity) > 1)
 $opacity = 1.0;
 $output = 'rgba('.implode(",",$rgb).','.$opacity.')';
 } else {
 $output = 'rgb('.implode(",",$rgb).')';
 }
 
 //Return rgb(a) color string
 return $output;
}
/* END Convert hexdec color string to rgb(a) string */

Ви ставите цю функцію в затишне місце, а на виході залишаєте ось цей код:

echo hex2rgba(#000000, 0.7);

Річ ідеально підходить, якщо у вас до сотні об’єктів на виклик, які потрібно конвертувати. Смачного

Залишити відповідь