【问题标题】:How to convert Hex to RGB? (perl)如何将十六进制转换为 RGB? (perl)
【发布时间】:2013-07-10 06:40:28
【问题描述】:

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

我想在我的一些 perl 脚本中实现一个命令来执行此操作,但我什至不知道如何手动操作。

有人可以帮我在 perl 中执行此操作,或者甚至教我如何手动执行此操作,以便我可以提出自己的 perl 命令吗?

【问题讨论】:

  • @ikegami 我不知道你的意思是什么

标签: perl hex rgb


【解决方案1】:

假设您尝试将 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

【讨论】:

  • uhhh,又是一个只写代码 - 但过了一会儿,它几乎可以理解了。 +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
  • 对于逗号分隔的rgb字符串,适用于CSS rgba(...):my $rgb = join(', ', map $_, unpack 'C*', pack 'H*', $rgb_hex);
【解决方案2】:

已经有一个 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'

【讨论】:

  • 抱歉,我没有尝试您的方法,因为另一种方法对我有用,但感谢您的回复。
猜你喜欢
  • 2015-05-09
  • 2011-05-14
  • 2011-08-09
  • 2020-11-14
  • 2015-01-31
  • 2021-03-22
相关资源
最近更新 更多