如何将十六进制转换为RGB?(Perl)

4

如何将十六进制颜色(例如,0000FF,FF00FF)转换为算术RGB格式(例如,0 0 1,1 0 1)?

我想在我的一些Perl脚本中实现一个命令来执行此操作,但我甚至不知道怎么手动完成。

能否有人帮助我在perl中完成这个任务,或者甚至向我展示如何手动完成,以便我可以自己编写perl命令?


@ikegami 我不知道你的意思是什么。 - Izaak Williamson
2个回答

10

已经有一个符合你要求的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'

抱歉,我没有尝试你的方法,因为另一个方法对我有效,但还是谢谢你的回复。 - Izaak Williamson

10
假设您想将 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

呃,又是一个只能写不能读的代码 - 但过一段时间后几乎可以理解了。+1 :) - clt60
1
这个很好用。我不确定它在做什么,但没关系。谢谢。 - Izaak Williamson
1
pack 'H*'"FF00FF" 转换为 "\xFF\x00\xFF"unpack 'C*'"\xFF\x00\xFF" 转换为 0xFF, 0x00, 0xFFmap $_ / 255,0xFF, 0x00, 0xFF 转换为 0xFF/255, 0x00/255, 0xFF/255 - ikegami
对于逗号分隔的 RGB 字符串,适用于 CSS 的 rgba(...):my $rgb = join(', ', map $_, unpack 'C*', pack 'H*', $rgb_hex); - yahermann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接