将图片转换成黑白(灰色、置灰)


网站图片置灰现在已经很常见了,最近上网找了些资料,基本都是用css3 grayscale和grayscale.js,做了测试,发现用CSS或greyscale.js都不能完全兼容。

测试浏览器版本:google、firefox、opera、safari、IE7-9

css3 grayscale的,网上很多都是用这段CSS:

            -webkit-filter: grayscale(100%);/*兼容google、opera*/
            -moz-filter: grayscale(100%);/*FF下不生效*/
            -ms-filter: grayscale(100%);/*IE下不生效*/
            -o-filter: grayscale(100%);/*opera下不生效*/

            filter: grayscale(100%);/*无效*/
        filter: gray;/*兼容IE7-IE9,IE10不支持*/

测试结果如上面代码注释所示(咋这么多不生效(/ □ \)...,嘿咻嘿咻,自己测试测试~)。


自己做了一番测试。先不废话,上代码和测试结果:

1.方法1:CSS3 grayscale滤镜实现。

    只兼容google、opera、IE7-9

代码:

<!DOCTYPE html>
<head>
    <title></title>
    <style type="text/css">
        .gray {
              -webkit-filter: grayscale(100%);/*兼容google、opera*/            
        filter
: gray;/*兼容IE7-IE9,IE10不支持*/ } </style> </head> <body> <img src="button.png" class="gray"> </body> </html>

 

注意:要在需要变灰的img上加上类gray,再在.gray{}中写CSS。不能把CSS写在html{}中(因为在IE7-9中不支持).例如下面所示:

<!DOCTYPE html>
<head>
    <title></title>
    <style type="text/css">
        html{
            -webkit-filter: grayscale(100%);/*兼容google、opera*/
            filter: gray;/*兼容IE7-IE9,IE10不支持*/
        }
    </style>
</head>
<body>
    <img src="button.png" class="gray">
</body>
</html>

 


2.方法2:只使用grayscale.js

    只兼容google、opera、safari、firefox、IE9-10。   IE7-8不兼容!

代码:

 

<!DOCTYPE html>
<head>
    <title></title>
</head>
<body>
    <img src="button.png" class="gray">
</body>
<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
<script type="text/javascript" src="js/grayscale.js"></script>
<script type="text/javascript">
    $(function(){
        grayscale(document.getElementsByTagName("img"));
    });
</script>
</html>

 

grayscale.js的下载地址

http://www.bvbcode.com/cn/e0nx8py7-890221

 

综上所述:

结合第1种的CSS和第2种的grayscale.js使用,就可以兼容主流浏览器。我只测试了:google、firefox、safari、opera、IE7-10。

完整代码:

<!DOCTYPE html>
<head>
    <title></title>
    <style type="text/css">
        .gray {
            -webkit-filter: grayscale(100%);/*兼容google、opera*/
            filter: gray;/*兼容IE7-IE9,IE10不支持*/
        }
    </style>
</head>
<body>
    <img src="button.png" class="gray">
</body>
<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
<script type="text/javascript" src="js/grayscale.js"></script>
<script type="text/javascript">
    $(function(){
        grayscale(document.getElementsByTagName("img"));
    });
</script>
</html>

 

 

PS:
使用grayscale.js的缺点:1. 页面加载完后才对整个页面进行变灰操作;2. 在非 IE 浏览器中不支持来自其它域名的网站图片的变灰(网上说法,自己并未测试过);3. 造成非 IE 浏览器在加载完页面后进行大量 js 计算,该计算负担可以通过仅变灰 img, a 等标签而不是 body 来优化。

 

如有其他更好方法,欢迎留言讨论。

 

转载于:https://www.cnblogs.com/Rosefxd/p/4260078.html

LAB模型是一种颜色空间,将颜色分为亮度(L)和两个颜色通道(a和b)。将黑白图片转成彩色可以使用以下算法: 1. 将黑白图像转换为LAB空间。 2. 在LAB空间中,将L通道保持不变,将a和b通道均设为零,得到一张灰色图像。 3. 使用机器学习算法(例如神经网络)将灰色图像转换为彩色图像。训练数据可以是彩色图像与对应的灰色图像对。 4. 将转换后的彩色图像从LAB空间转换回RGB空间。 以下是一些示例代码,使用Python的OpenCV库和Scikit-Learn库实现: ```python import cv2 import numpy as np from sklearn.neural_network import MLPRegressor # 读入黑白图像 img_gray = cv2.imread('gray_image.png', cv2.IMREAD_GRAYSCALE) # 将黑白图像转换为LAB空间 img_lab = cv2.cvtColor(img_gray, cv2.COLOR_GRAY2LAB) # 提取L通道的值 L_channel = img_lab[:, :, 0] # 创建一个全零的度图像 img_gray = np.zeros_like(img_gray) # 将a和b通道设为零 img_lab[:, :, 1] = 0 img_lab[:, :, 2] = 0 # 将度图像展开为一维向量 gray_vector = img_gray.reshape(-1) # 读入训练数据 X_train = np.load('gray_data.npy') Y_train = np.load('color_data.npy') # 训练神经网络模型 model = MLPRegressor(hidden_layer_sizes=(100, 100, 100)) model.fit(X_train, Y_train) # 预测彩色图像 color_vector = model.predict(gray_vector) color_image = color_vector.reshape(img_gray.shape[0], img_gray.shape[1], 3) # 将彩色图像从LAB空间转换回RGB空间 color_image = cv2.cvtColor(color_image, cv2.COLOR_LAB2BGR) # 显示结果 cv2.imshow('Color Image', color_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个示例代码中,训练数据保存在numpy数组中,可以使用任何方法生成这些数据。使用Scikit-Learn库中的MLPRegressor类训练一个三层神经网络模型,将度图像转换为彩色图像。最终结果在RGB空间中显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值