86 | { labels[index] }: { parseFloat(value).toFixed(2) }
87 | this.handleChange(index, e.target.value) }
95 | />
96 |
97 | );
98 | });
99 | }
100 |
101 | render() {
102 | const {
103 | filter,
104 | applyFilter,
105 | values,
106 | colorOne,
107 | colorTwo,
108 | key,
109 | } = this.state;
110 |
111 | return (
112 |
113 |
114 | this.setState({ values: m }) }
123 | />
124 |
125 |
126 | { this.renderSliders() }
127 |
128 |
129 |
130 |
Presets
131 | this.setState({ filter: NONE, values: NONE, applyFilter: true }) }
134 | >
135 | None
136 |
137 | this.setState({ filter: 'invert', applyFilter: true }) }
140 | >
141 | Invert
142 |
143 | this.setState({ filter: 'grayscale', applyFilter: true }) }
146 | >
147 | Grayscale
148 |
149 | this.setState({ filter: 'sepia', applyFilter: true }) }
152 | >
153 | Sepia
154 |
155 | this.setState({
158 | applyFilter: true,
159 | filter: 'duotone',
160 | colorOne: [250, 50, 50],
161 | colorTwo: [20, 20, 100],
162 | }) }
163 | >
164 | Duotone (red / blue)
165 |
166 | this.setState({
169 | applyFilter: true,
170 | filter: 'duotone',
171 | colorOne: [50, 250, 50],
172 | colorTwo: [250, 20, 220],
173 | }) }
174 | >
175 | Duotone (green / purple)
176 |
177 | this.setState({
180 | applyFilter: true,
181 | filter: 'duotone',
182 | colorOne: [40, 250, 250],
183 | colorTwo: [250, 150, 30],
184 | }) }
185 | >
186 | Duotone (light blue/orange)
187 |
188 | this.setState({
191 | filter: 'duotone',
192 | colorOne: [40, 70, 200],
193 | colorTwo: [220, 30, 70],
194 | }) }
195 | >
196 | Duotone (blue / red)
197 |
198 |
199 |
200 |
Misc
201 |
202 |
206 | Turn filter { applyFilter ? 'off' : 'on' }
207 |
208 |
this.setState({ key: new Date().getTime() }) }
211 | >
212 | New image
213 |
214 |
215 |
216 | Please note that Unsplash will sometime return the same image.
217 |
218 |
219 |
Applied props
220 | { typeof filter === 'object' ?
221 |
222 | const filter = [
223 | {' '}{ values[0] }, { values[1] }, { values[2] }, { values[3] }, { values[4] },
224 | {' '}{ values[5] }, { values[6] }, { values[7] }, { values[8] }, { values[9] },
225 | {' '}{ values[10] }, { values[11] }, { values[12] }, { values[13] }, { values[14] },
226 | {' '}{ values[15] }, { values[16] }, { values[17] }, { values[18] }, { values[19] },
227 | ];
228 | :
229 |
230 | const filter = '{ filter }';
231 | { filter === 'duotone' &&
232 |
233 | const colorOne = [{ colorOne[0] }, { colorOne[1] }, { colorOne[2] }];
234 | const colorTwo = [{ colorTwo[0] }, { colorTwo[1] }, { colorTwo[2] }];
235 | }
236 | }
237 |
238 | );
239 | }
240 | };
241 |
242 |
243 | ReactDOM.render(
30 |
React Image Filter
31 |
32 |
33 | ImageFilter - React filter component.
34 |
35 |
36 |
37 | Unfortunately CSS filters don't work in IE and Edge.
38 | This is React component that used SVG filters instead,
39 | and it works in all modern browsers plus IE10+ and Edge
40 | For props and presets check the detailed documentation on
41 | GitHub .
42 |
43 |
44 |
Demo
45 |
46 |
47 | Change feColorMatrix
values by using sliders.
48 |
49 |
50 |
51 |