好程序员web前端分享用CSS和JS打造一个简单的图片编辑器,本文主要是利用CSS的 filter和简单的Jquery代码来实现一个简单的图片编辑器,包括对图片的透明度,黑白,图片亮度等调节。
CSS filter 我们首先来探讨一下filter。 首先来说明一下filter,在CSS里面要实现filter,其实很简单,使用类似下面的声明方式:- <font size="3">.example {</font>
- <font size="3"> filter: [];</font>
- <font size="3"> }</font>
<font size="3">比如说,我们给图片添加一点灰度(grayscale)特效,就可以这样:</font>
- <font size="3"> .example {</font>
- <font size="3"> filter: grayscale(90%);</font>
- <font size="3"> }</font>
- <font size="3">.example {</font>
- <font size="3"> -webkit-filter: grayscale(90%);</font>
- <font size="3"> filter: grayscale(90%);</font>
- <font size="3"> }</font>
- <font size="3"> .example {</font>
- <font size="3"> filter: blur(10px);</font>
- <font size="3"> }</font>
- <font size="3"> .example-2 {</font>
- <font size="3"> filter: hue-rotate(90deg);</font>
- <font size="3"> }</font>
- <font size="3"> .example {</font>
- <font size="3"> filter: grayscale(0.5) blur(10px);</font>
- <font size="3"> }</font>
- <font size="3"> Image Editor</font>
- <font size="3"> Grayscale</font>
- <font size="3"> Blur</font>
- <font size="3"> Brightness</font>
- <font size="3"> Contrast</font>
- <font size="3"> Hue Rotate</font>
- <font size="3"> Opacity</font>
- <font size="3"> Invert</font>
- <font size="3"> Saturate</font>
- <font size="3"> Sepia</font>
- <font size="3"> function addImage(e) {</font>
- <font size="3"> var imgUrl = $("#imgUrl").val();</font>
- <font size="3"> if (imgUrl.length) {</font>
- <font size="3"> $("#imageContainer img").attr("src", imgUrl);</font>
- <font size="3"> }</font>
- <font size="3"> e.preventDefault();</font>
- <font size="3"> }</font>
- <font size="3"> //on pressing return, addImage() will be called</font>
- <font size="3"> $("#urlBox").submit(addImage);</font>
- $("input[type=range]").mousemove(editImage);
- font size="3">$("input[type=range]").mousemove(editImage).change(editImage);</font>
- <font size="3"> 复制代码编写editImage函数</font>
- <font size="3"> 上面我们将input[type=range]的mousemove和change事件交给了editImage函数处理,所以,我们来编写一下editImage的函数代码:</font>
- <font size="3"> function editImage() {</font>
- <font size="3"> var gs = $("#gs").val(); // grayscale</font>
- <font size="3"> var blur = $("#blur").val(); // blur</font>
- <font size="3"> var br = $("#br").val(); // brightness</font>
- <font size="3"> var ct = $("#ct").val(); // contrast</font>
- <font size="3"> var huer = $("#huer").val(); //hue-rotate</font>
- <font size="3"> var opacity = $("#opacity").val(); //opacity</font>
- <font size="3"> var invert = $("#invert").val(); //invert</font>
- <font size="3"> var saturate = $("#saturate").val(); //saturate</font>
- <font size="3"> var sepia = $("#sepia").val(); //sepia</font>
- <font size="3"> $("#imageContainer img").css("filter", 'grayscale(' + gs+</font>
- <font size="3"> '%) blur(' + blur +</font>
- <font size="3"> 'px) brightness(' + br +</font>
- <font size="3"> '%) contrast(' + ct +</font>
- <font size="3"> '%) hue-rotate(' + huer +</font>
- <font size="3"> 'deg) opacity(' + opacity +</font>
- <font size="3"> '%) invert(' + invert +</font>
- <font size="3"> '%) saturate(' + saturate +</font>
- <font size="3"> '%) sepia(' + sepia + '%)');</font>
- <font size="3"> $("#imageContainer img").css("-webkit-filter", 'grayscale(' + gs+</font>
- <font size="3"> '%) blur(' + blur +</font>
- <font size="3"> 'px) brightness(' + br +</font>
- <font size="3"> '%) contrast(' + ct +</font>
- <font size="3"> '%) hue-rotate(' + huer +</font>
- <font size="3"> 'deg) opacity(' + opacity +</font>
- <font size="3"> '%) invert(' + invert +</font>
- <font size="3"> '%) saturate(' + saturate +</font>
- <font size="3"> '%) sepia(' + sepia + '%)');</font>
- <font size="3"> }</font>
- <font size="3"> $("#imageContainer img").css("-webkit-filter",...)</font>
- <font size="3"> 复制代码</font>
- <font size="3"> 这段代码其实就是在img元素实现了类似下面的效果;</font>
- <font size="3"> </font>
- <font size="3">[img=28,30][/img]</font>
- <font size="3">
- $('#imageEditor').on('reset', function () {</font>
- <font size="3"> setTimeout(function() {</font>
- <font size="3"> editImage();</font>
- <font size="3"> },0);</font>
- <font size="3"> });</font>
- <font size="3">$('#imageEditor').on('reset', function () {</font>
- <font size="3"> editImage();</font>
- <font size="3"> });</font>
这个时候,reset效果执行起来其实是有一点延迟的,你明显可以看到等待的时候,它并不是很快。 浏览器打开index.html,就可以看到相应的调节效果了。你可以拖动一些设置项的控制条来查看效果。