Статьи

Как преобразовать изображение из черно-белого в цветное с помощью Canvas

Недавно на форумах CodeCanyon был задан вопрос: « Как перевести изображение из черно-белого в цветное, используя только одно изображение? » К сожалению, на данный момент это невозможно с помощью CSS. Однако, если мы креативны с помощью JavaScript и canvas, мы можем создать решение относительно легко. Я покажу вам, как в сегодняшнем видео уроке!


01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<!DOCTYPE html>
  
<html lang=»en»>
<head>
   <meta charset=»utf-8″>
   <title>untitled</title>
    <style>
        /* Setup…not important.
        .img-wrap {
            width: 500px;
            margin: 100px auto;
            position: relative;
            cursor: pointer;
        }
         
        /* Handles animation of b*w to color */
        canvas {
            position: absolute;
            left: 0;
            top: 0;
            opacity: 1;
            -webkit-transition: all 1s;
            -moz-transition: all 1s;
            -o-transition: all 1s;
            -ms-transition: all 1s;
            transition: all 1s;
        }
         
        canvas:hover {
            opacity: 0;
        }
         
        /* If you MUST have IE support */
        #cvs-src {
           filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
        }
         
        #cvs-src:hover {
            filter: none;
        }
    </style>
</head>
<body>
  
<div class=»img-wrap»>
    <img id=»cvs-src» src=»your-image.jpg» />
    <canvas width=500 height=500></canvas>
</div>
  
<script>
    (function() {
        var supportsCanvas = !!document.createElement(‘canvas’).getContext;
        supportsCanvas && (window.onload = greyImages);
         
        function greyImages() {
            var ctx = document.getElementsByTagName(«canvas»)[0].getContext(‘2d’),
                img = document.getElementById(«cvs-src»),
                imageData, px, length, i = 0,
                grey;
             
            ctx.drawImage(img, 0, 0);
             
            // Set 500,500 to the width and height of your image.
            imageData = ctx.getImageData(0, 0, 500, 500);
            px = imageData.data;
            length = px.length;
                     
            for ( ; i < length; i+= 4 ) {
                grey = px[i] * .3 + px[i+1] * .59 + px[i+2] * .11;
                px[i] = px[i+1] = px[i+2] = grey;
            }
             
            ctx.putImageData(imageData, 0, 0);
        }
    })();
</script>
  
</body>
</html>

Так что ты думаешь? Вы бы использовали эту технику в своих проектах? Можете ли вы придумать лучший способ, который не предполагает использование серверного языка или спрайтов? Дай мне знать в комментариях!