在日常的网页开发中,经常需要进行颜色数值获取、转换,例如获取红色,获取蓝色,获取绿色,RGB转十六进制颜色,十六进制颜色转RGB等,因而在学习过程中,写了一个小工具类,仅供各位小主参考!

多不闲言,直接上码了,哈哈哈。。。

颜色工具类源码 ColorUtils.java 如下所示:

 /**
* Aaron.ffp Inc.
* Copyright (c) 2004-2016 All Rights Reserved.
*/
package cn.ffp.autotest.base.util; import org.apache.log4j.Logger; /**
* <strong>颜色工具类</strong><br>
* <ul>
* <li>颜色进制转换</li>
* <li>颜色合法性校验</li>
* </ul>
* <br>
* @author Aaron.ffp
* @version V1.0.0: autotest-base cn.ffp.autotest.base.util ColorUtils.java, 2016-03-02 11:32:40.447 Exp $
*/
public class ColorUtils {
private static Logger logger = Logger.getLogger(ColorUtils.class.getName());
private static String msg = ""; private static String regHex = "^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$";
private static String regRgb = "^(RGB\\(|rgb\\()([0-9]{1,3},){2}[0-9]{1,3}\\)$";
private static String regRepRgb = "(rgb|\\(|\\)|RGB)*"; public ColorUtils() {
} /**
* <strong>颜色十六进制转颜色RGB</strong><br>
* <ul>
* <li>颜色十六进制参数不合法时,返回null</li>
* </ul>
* <br>
* @author Aaron.ffp
* @version V1.0.0: autotest-base cn.ffp.autotest.base.util ColorUtils.java hex2Rgb, 2016-03-24 23:50:42.004 Exp $
*
* @param hex 颜色十六进制
* @return 颜色RGB
*/
public static String hex2Rgb(String hex) {
StringBuilder sb = new StringBuilder(); if (!ColorUtils.isHex(hex)) {
msg = "颜色十六进制格式 【" + hex + "】 不合法,请确认!";
logger.error(msg);
return null;
} String c = RegUtils.replace(hex.toUpperCase(), "#", ""); String r = Integer.parseInt((c.length() == 3 ? c.substring(0, 1) + c.substring(0, 1) : c.substring(0, 2)), 16) + "";
String g = Integer.parseInt((c.length() == 3 ? c.substring(1, 2) + c.substring(1, 2) : c.substring(2, 4)), 16) + "";
String b = Integer.parseInt((c.length() == 3 ? c.substring(2, 3) + c.substring(2, 3) : c.substring(4, 6)), 16) + ""; sb.append("RGB(" + r + "," + g + "," + b + ")"); return sb.toString();
} /**
* <strong>颜色RGB转十六进制</strong><br>
* <ul>
* <li>颜色RGB不合法,则返回null</li>
* </ul>
* <br>
* @author Aaron.ffp
* @version V1.0.0: autotest-base cn.ffp.autotest.base.util ColorUtils.java rgb2Hex, 2016-03-15 23:49:33.224 Exp $
*
* @param rgb 颜色RGB
* @return 合法时返回颜色十六进制
*/
public static String rgb2Hex(String rgb) {
StringBuilder sb = new StringBuilder(); if (!ColorUtils.isRgb(rgb)) {
msg = "颜色 RGB 格式【" + rgb + "】 不合法,请确认!";
logger.error(msg);
return null;
} String r = Integer.toHexString(ColorUtils.getRed(rgb)).toUpperCase();
String g = Integer.toHexString(ColorUtils.getGreen(rgb)).toUpperCase();
String b = Integer.toHexString(ColorUtils.getBlue(rgb)).toUpperCase(); sb.append("#");
sb.append(r.length() == 1 ? "0" + r : r);
sb.append(g.length() == 1 ? "0" + g : g);
sb.append(b.length() == 1 ? "0" + b : b); return sb.toString();
} /**
* <strong>获取颜色RGB红色值</strong><br>
* <br>
* @author Aaron.ffp
* @version V1.0.0: autotest-base cn.ffp.autotest.base.util ColorUtils.java getRed, 2016-03-22 23:48:50.501 Exp $
*
* @param rgb 颜色RGB
* @return 红色值
*/
public static int getRed(String rgb){
return Integer.valueOf(ColorUtils.getRGB(rgb)[0]);
} /**
* <strong>获取颜色RGB绿色值</strong><br>
* <br>
* @author Aaron.ffp
* @version V1.0.0: autotest-base cn.ffp.autotest.base.util ColorUtils.java getGreen, 2016-03-22 23:48:16.290 Exp $
*
* @param rgb 颜色RGB
* @return 绿色值
*/
public static int getGreen(String rgb){
return Integer.valueOf(ColorUtils.getRGB(rgb)[1]);
} /**
* <strong>获取颜色RGB蓝色值</strong><br>
* <br>
* @author Aaron.ffp
* @version V1.0.0: autotest-base cn.ffp.autotest.base.util ColorUtils.java getBlue, 2016-03-22 23:47:20.801 Exp $
*
* @param rgb 颜色RGB
* @return 蓝色数值
*/
public static int getBlue(String rgb){
return Integer.valueOf(ColorUtils.getRGB(rgb)[2]);
} /**
* <strong>获取颜色RGB数组</strong><br>
* <br>
* @author Aaron.ffp
* @version V1.0.0: autotest-base cn.ffp.autotest.base.util ColorUtils.java getRGB, 2016-03-21 23:46:00.944 Exp $
*
* @param rgb 颜色RGB
* @return 颜色数组[红,绿,蓝]
*/
public static String[] getRGB(String rgb){
return RegUtils.replace(RegUtils.replaceSpace(rgb), regRepRgb, "").split(",");
} /**
* <strong>验证颜色十六进制是否合法</strong><br>
* <ul>
* <li>规则:#号开头,三位或六位字母数字组成的字符串</li>
* </ul>
* <br>
* @author Aaron.ffp
* @version V1.0.0: autotest-base cn.ffp.autotest.base.util ColorUtils.java isHex, 2016-03-20 23:44:03.133 Exp $
*
* @param hex 十六进制颜色
* @return 合法则返回true
*/
public static boolean isHex(String hex) {
return RegUtils.reg(hex, regHex);
} /**
* <strong>验证颜色RGB是否合法</strong><br>
* <ul>
* <li>1、RGB符合正则表达式</li>
* <li>2、颜色值在0-255之间</li>
* </ul>
* <br>
* @author Aaron.ffp
* @version V1.0.0: autotest-base cn.ffp.autotest.base.util ColorUtils.java isRgb, 2016-03-12 23:41:19.925 Exp $
*
* @param rgb 颜色RGB
* @return 是否合法,合法返回true
*/
public static boolean isRgb(String rgb) {
boolean r = ColorUtils.getRed(rgb) >= 0 && ColorUtils.getRed(rgb) <= 255;
boolean g = ColorUtils.getGreen(rgb) >= 0 && ColorUtils.getGreen(rgb) <= 255;
boolean b = ColorUtils.getBlue(rgb) >= 0 && ColorUtils.getBlue(rgb) <= 255; return ColorUtils.isRgbFormat(rgb) && r && g && b;
} /**
* <strong>验证颜色RGB是否匹配正则表达式</strong><br>
* <ul>
* <li>匹配则返回true</li>
* </ul>
* <br>
* @author Aaron.ffp
* @version V1.0.0: autotest-base cn.ffp.autotest.base.util ColorUtils.java isRgbFormat, 2016-03-03 23:40:12.267 Exp $
*
* @param rgb 颜色RGB
* @return 是否匹配
*/
public static boolean isRgbFormat(String rgb) {
return RegUtils.reg(RegUtils.replaceSpace(rgb), regRgb);
}
}

颜色工具类单元测试源码 ColorUtilsTest.java 如下所示:

 package cn.ffp.autotest.base.util;

 import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; public class ColorUtilsTest {
String[][] rgb = new String[8][2];
String[][] hex = new String[11][2]; @BeforeClass
public void beforeClass() {
rgb[0][0] = "RGB(0,0,0)";
rgb[1][0] = "RGB(0,128,255)";
rgb[2][0] = "RGB(128,0,75)";
rgb[3][0] = "RGB(128,0,0)";
rgb[4][0] = "rgb(128,23,200)";
rgb[5][0] = "rgb(128, 128, 128)";
rgb[6][0] = "rgb(255, 255, 255)";
rgb[7][0] = "rgb(128, 128, 300)"; rgb[0][1] = "#000000";
rgb[1][1] = "#0080FF";
rgb[2][1] = "#80004B";
rgb[3][1] = "#800000";
rgb[4][1] = "#8017C8";
rgb[5][1] = "#808080";
rgb[6][1] = "#FFFFFF";
rgb[7][1] = null; hex[0][0] = "#000000";
hex[1][0] = "#000";
hex[2][0] = "#FAFAFA";
hex[3][0] = "#000080";
hex[4][0] = "#008080";
hex[5][0] = "#F0FF80";
hex[6][0] = "#EA00FA";
hex[7][0] = "#00EAEA";
hex[8][0] = "#876";
hex[9][0] = "#000xEA";
hex[10][0] = "#ghi"; hex[0][1] = "RGB(0,0,0)";
hex[1][1] = "RGB(0,0,0)";
hex[2][1] = "RGB(250,250,250)";
hex[3][1] = "RGB(0,0,128)";
hex[4][1] = "RGB(0,128,128)";
hex[5][1] = "RGB(240,255,128)";
hex[6][1] = "RGB(234,0,250)";
hex[7][1] = "RGB(136,119,102)";
hex[8][1] = "RGB(0,0,0)";
hex[9][1] = null;
hex[10][1] = null;
} @Test
public void getBlue() {
for (int i = 0; i < rgb.length; i++) {
System.out.println("获取蓝色:\t" + rgb[i][0] + "\t" + ColorUtils.getBlue(rgb[i][0]));
}
} @Test
public void getGreen() {
for (int i = 0; i < rgb.length; i++) {
System.out.println("获取绿色:\t" + rgb[i][0] + "\t" + ColorUtils.getGreen(rgb[i][0]));
}
} @Test
public void getRed() {
for (int i = 0; i < rgb.length; i++) {
System.out.println("获取红色:\t" + rgb[i][0] + "\t" + ColorUtils.getRed(rgb[i][0]));
}
} @Test
public void hex2Rgb() {
for (int i = 0; i < hex.length; i++) {
System.out.println("十六进制转 RGB:\t" + hex[i][0] + "\t期望结果:" + hex[i][1] + "\t实际结果:" + ColorUtils.hex2Rgb(hex[i][0]));
}
} @Test
public void isHex() {
for (int i = 0; i < hex.length; i++) {
System.out.println(hex[i][0] + "\t\t" + ColorUtils.isHex(hex[i][0]));
}
} @Test
public void isRgb() {
for (int i = 0; i < rgb.length; i++) {
System.out.println(rgb[i][0] + "\t\t" + ColorUtils.isRgb(rgb[i][0]));
}
} @Test
public void rgb2Hex() {
for (int i = 0; i < rgb.length; i++) {
System.out.println("RGB 转十六进制:\t" + rgb[i][0] + "\t期望结果:" + rgb[i][1] + "\t实际结果:" + ColorUtils.rgb2Hex(rgb[i][0]));
}
}
}

单元测试源码 ColorUtilsTest.java

至此, Java学习-041-颜色工具类(RGB,HEX) 顺利完结,希望此文能够给初学 JavaWeb 的您一份参考。

最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^

Java学习-041-颜色工具类(RGB,HEX)的更多相关文章

  1. Java学习-049-正则工具类

    自去年九月份决定再次入学和职业资格进阶,开始备战二者考试至今,以及当下进行中的职称申请,犹如孤独的狼,不断前行在路上,而今凡凡总总的已历8月... 不感慨了,如下为一园友需要的正则工具类,直接上码: ...

  2. Java学习:数组工具类Arrays

    数组工具类Arrays java.util.Arrays是一个与数组相关的工具类,里面提供了大量的静态方法,用来实现数组常见的操作. public static String toString(数组) ...

  3. java学习_文件工具类

    工具类里面的方法全部都是静态的,调用的时候不需要实例化

  4. Java学习关于随机数工具类--Random类

    Random类是伪随机数生成器.之所以称为伪随机数(pseudorandom),是因为它们只是简单的均匀分布序列.Random类定义了以下构造函数: Random() Random(long seed ...

  5. 我的Java开发学习之旅------>工具类:Java获取字符串和文件进行MD5值

    ps:这几天本人用百度云盘秒传了几部大片到云盘上,几个G的文件瞬秒竟然显示"上传成功"!这真让我目瞪口呆,要是这样的话,那得多快的网速,这绝对是不可能的,也许这仅是个假象.百度了一 ...

  6. Rhino+envjs-1.2.js 在java运行网站js 工具类

    java爬虫遇到个页面加密的东西,找了些资料学习学习 做了个java运行js的工具类,希望对大家有用,其中用到client(获取js)可以自行换成自己的client.主要是用了 Rhino就是Java ...

  7. java 二进制数字符串转换工具类

    java 二进制数字符串转换工具类 将二进制转换成八进制 将二进制转换成十进制 将二进制转换成十六进制 将十进制转换成二进制 package com.iteye.injavawetrust.ad; i ...

  8. Java 后台验证的工具类

    Java 后台验证的工具类 public class ValidationUtil {         //手机号     public static String mobile = "^( ...

  9. Redis 工具类 java 实现的redis 工具类

    最近了解了一下非关系型数据库 redis 会使用简单的命令 在自己本地电脑 使用时必须先启动服务器端 在启动客户端 redis 简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内 ...

随机推荐

  1. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 K. King’s Rout

    K. King's Rout time limit per test 4 seconds memory limit per test 512 megabytes input standard inpu ...

  2. 笔记本做wifi热点

    你可以开启windows 7的隐藏功能:虚拟WiFi和SoftAP(即虚拟无线AP),就可以让电脑变成无线路由器,实现共享上网.点开始 所有程序 命令提示符右键管理员身份运行命令提示符 运行命令:ne ...

  3. spring aop两种配置方式(1)

    第一种:注解配置AOP注解配置AOP(使用 AspectJ 类库实现的),大致分为三步: 1. 使用注解@Aspect来定义一个切面,在切面中定义切入点(@Pointcut),通知类型(@Before ...

  4. android布局详解

      http://blog.163.com/zhangzheming_282/blog/static/117920962013072502787/   AbsoluteLayout——绝对布局   必 ...

  5. 【NOI2016】区间 题解

    题目大意: 有n个区间,当有m个区间有公共部分时,求m个区间长度的最大值与最小值之差的最小值. 思路: 按区间的长度从小到大排序,可知连续的几个区间最优,则用两个指针指其头尾,线性扫描,再用线段树区间 ...

  6. HDU3068最长回文 题解

    题目大意: 求字符串的最长回文子串的长度. 思路: Manacher板题,Hash可能会T.要学习Manacher,可参考https://www.felix021.com/blog/read.php? ...

  7. Thymeleaf分页

    网上找到的例子回来测试一下 <div class="table-pagination"> <ul class="pagination"> ...

  8. Java教程-Java 程序员们值得一看的好书推荐

    学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资 ...

  9. lua日期与时间操作

    os.date("%Y%m%d%H%M%S", os.time()) <== 20160405141211 yyyyMMddHHmmss os.time()          ...

  10. Java生成动态GIF图片

    写selenium自动化时,为了查看运行效果,后给浏览器截图,想到可以生成gif图片来快速预览.看到已经有人实现了,直接拿过来. 共涉及到三个java文件,分别是NeuQuant.java,LZWEn ...