PHP将24位颜色转换为4位

尼古拉斯·阿里帕兹

背景,我正在将图像转换为ASCII艺术。这可以完美工作,甚至可以使用24位颜色,将颜色转换为正确的rgb值。但是,我现在想以4位调色板而不是24位来渲染ascii艺术。

如何使用PHP将24位颜色转换为4位?

更具体地说,我有标准的IRC颜色托盘,我需要将任何给定的十六进制或RGB值转换为该颜色。当转换为4位颜色时,颜色最好尽可能匹配。

我对此的其他想法是在尝试从中获取颜色之前,将图像本身转换为4位调色板(使用GD,这是我现在用来读取颜色的颜色)。另一个想法可能是为以下每种颜色定义一个颜色范围,然后仅检查给定的24位颜色是否在该范围内,但是我不知道如何将所有颜色的范围都放入该调色板中。

在此处输入图片说明

尼古拉斯·阿里帕兹

最后,尽管围绕着imagemagick提出了很好的建议,但我还是使用了直接的php找到了一个很好的解决方案。我能够通过使用Delta E 2000和在github上找到的php-color-difference库的修改版本来计算最接近的颜色,这是我的叉子:https : //github.com/nalipaz/php-color-difference

相关示例是:

<?php
include('lib/color_difference.class.php');

$palette = array(
  '00' => array(255, 255, 255),
  '01' => array(0, 0, 0),
  '02' => array(0, 0, 139),
  '03' => array(0, 128, 0),
  '04' => array(255, 0, 0),
  '05' => array(139, 0, 0),
  '06' => array(128, 0, 128),
  '07' => array(255, 165, 0),
  '08' => array(255, 255, 0),
  '09' => array(50, 205, 50),
  '10' => array(0, 128, 128),
  '11' => array(173, 216, 230),
  '12' => array(0, 0, 255),
  '13' => array(255, 105, 180),
  '14' => array(128, 128, 128),
  '15' => array(211, 211, 211),
);

$color_rgb = array(255, 255, 128);
$color_delta_e = new color_difference($color_rgb);
$match_index = $color_delta_e->getClosestMatch($palette);
$color = $palette[$match_index];

我对这种解决方案和较少的开销感到非常满意。谢谢你们的建议。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP将24位颜色转换为4位

来自分类Dev

将8位值转换为24位值

来自分类Dev

将char强制转换为4位的位字段项

来自分类Dev

无法将 4 位整数值转换为 24 小时时间格式

来自分类Dev

C#将4位颜色(= ConsoleColor)转换为RGB并返回

来自分类Dev

将CSS颜色转换为16位RGB

来自分类Dev

从4位小数转换为2位

来自分类Dev

将int位转换为float位

来自分类Dev

将24位带符号的int信号转换为16位带符号的int信号

来自分类Dev

ImageMagick是否将BMP从24位转换为16位模式?

来自分类Dev

使用pypng将24位PNG文件转换为8位彩色索引图像

来自分类Dev

如何将24位JPEG图像转换为8位图像?

来自分类Dev

将4个原始字节转换为32位浮点

来自分类Dev

将4位整数转换为布尔值列表

来自分类Dev

将4位整数转换为十进制的金额

来自分类Dev

将按位操作Java代码转换为PHP

来自分类Dev

将8位十六进制颜色转换为RGBA颜色?

来自分类Dev

将2位数的年份转换为4位数的年份

来自分类Dev

Python:如何将4位数字数组按位转换为更大的数字?

来自分类Dev

将32位浮点DM4转换为带符号的16位

来自分类Dev

将2位数的年份转换为4位数的年份

来自分类Dev

Python:如何将4位数字数组按位转换为更大的数字?

来自分类Dev

wxpython> DatePickerCtrl obj-如何将“年”从2位转换为4位?

来自分类Dev

使用node.js中的opencv-node将24位RGB图像转换为8位灰度

来自分类Dev

MATLAB:将3通道24位bmp图像转换为1通道16位bmp图像

来自分类Dev

将24位二进制补码转换为float_32t

来自分类Dev

将int转换为24位值是什么意思?

来自分类Dev

将 Little-endian 24 位文件转换为 ASCII 数组

来自分类Dev

将int(32位)转换为char(8位)

Related 相关文章

热门标签

归档