【发布时间】:2013-07-10 06:40:28
【问题描述】:
如何将十六进制颜色(例如 0000FF、FF00FF)转换为算术 RGB 格式(例如 0 0 1、1 0 1)?
我想在我的一些 perl 脚本中实现一个命令来执行此操作,但我什至不知道如何手动操作。
有人可以帮我在 perl 中执行此操作,或者甚至教我如何手动执行此操作,以便我可以提出自己的 perl 命令吗?
【问题讨论】:
-
@ikegami 我不知道你的意思是什么
如何将十六进制颜色(例如 0000FF、FF00FF)转换为算术 RGB 格式(例如 0 0 1、1 0 1)?
我想在我的一些 perl 脚本中实现一个命令来执行此操作,但我什至不知道如何手动操作。
有人可以帮我在 perl 中执行此操作,或者甚至教我如何手动执行此操作,以便我可以提出自己的 perl 命令吗?
【问题讨论】:
假设您尝试将 00..FF16 映射到实数 0..1,
my @rgb = map $_ / 255, unpack 'C*', pack 'H*', $rgb_hex;
pack 'H*', 将 "FF00FF" 更改为 "\xFF\x00\xFF"。unpack 'C*', 将 "\xFF\x00\xFF" 更改为 0xFF, 0x00, 0xFF。map $_ / 255, 将 0xFF, 0x00, 0xFF 更改为 0xFF/255, 0x00/255, 0xFF/255
【讨论】:
pack 'H*' 将 "FF00FF" 更改为 "\xFF\x00\xFF"。 unpack 'C*' 将 "\xFF\x00\xFF" 更改为 0xFF, 0x00, 0xFF。 map $_ / 255, 将 0xFF, 0x00, 0xFF 更改为 0xFF/255, 0x00/255, 0xFF/255
my $rgb = join(', ', map $_, unpack 'C*', pack 'H*', $rgb_hex);
已经有一个 CPAN 模块可以满足您的需求:https://metacpan.org/pod/Color::Rgb
use Color::Rgb;
my $hex = '#0000FF';
my @rgb = $rgb->hex2rgb($hex); # returns list of 0, 0, 255
my $rgb_string = $rgb->hex2rgb($hex,','); # returns string '0,0,255'
也可以往另一个方向发展:
my @rgb = (0, 0, 255);
my $hex_string = $rgb->rgb2hex(@rgb); # returns '0000FF'
【讨论】: