用CSS和JS打造一个简单的图片编辑器,本文主要是利用CSS的filter和简单的Jquery代码来实现一个简单的图片编辑器,包括对图片的透明度,黑白,图片亮度等调节。

CSS filter

我们首先来探讨一下

filter。

首先来说明一下

filter,在CSS里面要实现filter,其实很简单,使用类似下面的声明方式:

1. <font size="3">.example {</font>

2. <font size="3">  filter: [];</font>

3. <font size="3">  }</font>

<font size="3">比如说,我们给图片添加一点灰度(grayscale)特效,就可以这样:</font>

1. <font size="3">  .example {</font>

2. <font size="3">  filter: grayscale(90%);</font>

3. <font size="3">  }</font>

当然,为了浏览器兼容,我们最好这样写:

1. <font size="3">.example {</font>

2. <font size="3">  -webkit-filter: grayscale(90%);</font>

3. <font size="3">  filter: grayscale(90%);</font>

4. <font size="3">  }</font>

需要注意的是:

filter的属性值的单位通常可能是从0到1之间,但是有些不是这样的,比如blur是使用像素'px'来作为单位的,而hue-rotate则使用角度deg来作为基本单位;

1. <font size="3"> .example {</font>

2. <font size="3">  filter: blur(10px);</font>

3. <font size="3">  }</font>

4. <font size="3">  .example-2 {</font>

5. <font size="3">  filter: hue-rotate(90deg);</font>

6. <font size="3">  }</font>

但是如果每次只能使用一个

filter就比较麻烦了,所以CSS提供了更加方便的书写形式,直接并排着写:

1. <font size="3"> .example {</font>

2. <font size="3">  filter: grayscale(0.5) blur(10px);</font>

3. <font size="3">  }</font>

这样就可以实现对一个元素添加多个

filter属性。

简单地说完

filter之后,我们来动手创建一个简单的图片编辑器。

创建基本的

HTML文件

在这里我们创建一个

index.html,代码也比较简单:

1. <font size="3"> Image Editor</font>

2. <font size="3">  Grayscale</font>

3. <font size="3">  Blur</font>

4. <font size="3">  Brightness</font>

5. <font size="3">  Contrast</font>

6. <font size="3">  Hue Rotate</font>

7. <font size="3">  Opacity</font>

8. <font size="3">  Invert</font>

9. <font size="3">  Saturate</font>

10. <font size="3">  Sepia</font>

这个文件里,我们引入了

main.css和main.js,main.css其实是对编辑器的一些排版起的作用,并没有对图片的filter效果做出实际的影响,我们做的是编辑器,所以在用户改变某个filter的值的时候,我们可以实时让用户看到效果,于是这些实现filter的代码应该就放在main.js里面。

上面的每一个
下面的
元素下面的

input都是filter的一个属性设置,因为我们可以同时用多个filter来对图片产生特效,所以我每个filter的属性值都设置为可以调节的状态。

上面的

index.html还要说明的是,在最上面我们提供一个输入框,用于给用户输入图片的URL,当用户点击回车的时候,我们就将这张图片显示到编辑区域。使用的是下面的简单js代码:

1. <font size="3"> function addImage(e) {</font>

2. <font size="3">  var imgUrl = $("#imgUrl").val();</font>

3. <font size="3">  if (imgUrl.length) {</font>

4. <font size="3">  $("#imageContainer img").attr("src", imgUrl);</font>

5. <font size="3">  }</font>

6. <font size="3">  e.preventDefault();</font>

7. <font size="3">  }</font>

8. <font size="3">  //on pressing return, addImage() will be called</font>

9. <font size="3">  $("#urlBox").submit(addImage);</font>

上面的

js代码也是写到main.js当中。有了可以用户自己添加图片之后,我们就可以实现对图片的编辑了:

每次用户在滑动进度条的时候,我们就可以将效果展示给用户看,于是我们来监听用户的

mousemove事件:

1.

$("input[type=range]").mousemove(editImage);

也就是说,每次用户在移动控制条的时候,我们都执行

editImage函数。

但是这样的体验可能还不是最好,因为在最后用户的鼠标离开控制条的时候,我们还可以监听

change事件,把这一刻的变化也交给editImage函数处理,所以可以将上面的代码写成这样:

1. font size="3">$("input[type=range]").mousemove(editImage).change(editImage);</font>

2. <font size="3">  复制代码编写editImage函数</font>

3. <font size="3">  上面我们将input[type=range]的mousemove和change事件交给了editImage函数处理,所以,我们来编写一下editImage的函数代码:</font>

4. <font size="3">  function editImage() {</font>

5. <font size="3">  var gs = $("#gs").val(); // grayscale</font>

6. <font size="3">  var blur = $("#blur").val(); // blur</font>

7. <font size="3">  var br = $("#br").val(); // brightness</font>

8. <font size="3">  var ct = $("#ct").val(); // contrast</font>

9. <font size="3">  var huer = $("#huer").val(); //hue-rotate</font>

10. <font size="3">  var opacity = $("#opacity").val(); //opacity</font>

11. <font size="3">  var invert = $("#invert").val(); //invert</font>

12. <font size="3">  var saturate = $("#saturate").val(); //saturate</font>

13. <font size="3">  var sepia = $("#sepia").val(); //sepia</font>

14. <font size="3">  $("#imageContainer img").css("filter", 'grayscale(' + gs+</font>

15. <font size="3">  '%) blur(' + blur +</font>

16. <font size="3">  'px) brightness(' + br +</font>

17. <font size="3">  '%) contrast(' + ct +</font>

18. <font size="3">  '%) hue-rotate(' + huer +</font>

19. <font size="3">  'deg) opacity(' + opacity +</font>

20. <font size="3">  '%) invert(' + invert +</font>

21. <font size="3">  '%) saturate(' + saturate +</font>

22. <font size="3">  '%) sepia(' + sepia + '%)');</font>

23. <font size="3">  $("#imageContainer img").css("-webkit-filter", 'grayscale(' + gs+</font>

24. <font size="3">  '%) blur(' + blur +</font>

25. <font size="3">  'px) brightness(' + br +</font>

26. <font size="3">  '%) contrast(' + ct +</font>

27. <font size="3">  '%) hue-rotate(' + huer +</font>

28. <font size="3">  'deg) opacity(' + opacity +</font>

29. <font size="3">  '%) invert(' + invert +</font>

30. <font size="3">  '%) saturate(' + saturate +</font>

31. <font size="3">  '%) sepia(' + sepia + '%)');</font>

32. <font size="3">  }</font>

其实很简单,我们在每次用户滑动控制条的时候,我们就通过类似

var gs = $("#gs").val();的语句取得相对应地值,然后通过Jquery的css()方法直接为图片加上filter效果,而且相信你也看得出来,这个函数的后半段就是实现浏览器兼容的

1. <font size="3"> $("#imageContainer img").css("-webkit-filter",...)</font>

2. <font size="3">  复制代码</font>

3. <font size="3">  这段代码其实就是在img元素实现了类似下面的效果;</font>

4. <font size="3">  </font>

5. <font size="3">[img=28,30][/img]</font>

最后,如果你不想将某些特效加到图片上面去,你可以点

reset然后将图片重置到原始状态:

1. <font size="3">

2.

$('#imageEditor').on('reset', function () {</font>

3. <font size="3">  setTimeout(function() {</font>

4. <font size="3">  editImage();</font>

5. <font size="3">  },0);</font>

6. <font size="3">  });</font>

这里需要说明一下的是,这里的

setTimeout函数就是为了将reset的效果最快地展现出来,如果写成下面的形式:

1. <font size="3">$('#imageEditor').on('reset', function () {</font>

2. <font size="3">  editImage();</font>

3. <font size="3">  });</font>

这个时候,

reset效果执行起来其实是有一点延迟的,你明显可以看到等待的时候,它并不是很快。

浏览器打开

index.html,就可以看到相应的调节效果了。你可以拖动一些设置项的控制条来查看效果。

用CSS和JS打造一个简单的图片编辑器相关推荐

  1. 好程序员web前端分享用CSS和JS打造一个简单的图片编辑器

    本文主要是利用 CSS的 filter和简单的Jquery代码来实现一个简单的图片编辑器,包括对图片的透明度,黑白,图片亮度等调节. CSS filter 我们首先来探讨一下 filter. 首先来说 ...

  2. [DIV/CSS] 用CSS和JS打造一个简单的图片编辑器

    本文主要是利用CSS的 filter和简单的Jquery代码来实现一个简单的图片编辑器,包括对图片的透明度,黑白,图片亮度等调节. CSS filter 我们首先来探讨一下filter. 首先来说明一 ...

  3. Web(前端开发)结合html、css、js写一个简单的相册

    该相册制作分为登录.注册和主页面(由于后端没有实现,登录注册只有一些简单的判断),代码如下 (1)登录界面的HTML <!DOCTYPE html> <html lang=" ...

  4. 如何用 Node.js 实现一个简单的 Websocket 服务?

    最近正在研究 Websocket 相关的知识,想着如何能自己实现 Websocket 协议.到网上搜罗了一番资料后用 Node.js 实现该协议,倒也没有想象中那么复杂,除去注释语句和 console ...

  5. JS写一个简单的五星评价

    JS写一个简单的五星评价 在做前端网页页面的时候很多时候回有遇到星级评价的模块,用到的地方挺多所以自己就上传下方便大家和自己使用(不支持半星评价因为没有半星的图). 效果图如下: 下面是我们的代码: ...

  6. HTML+CSS+原生JS写一个简易的音乐播放器(仅播放一首歌)

    用HTML+CSS+原生JS写一个简易的音乐播放器(仅播放一首歌) 效果如下:(鼠标点击按钮可以实现播放或暂停,按钮会旋转,实现了歌词同步,功能还需改进) 代码如下: <!DOCTYPE htm ...

  7. 使用 Vue.js 制作一个简单的调查问卷平台

    使用 Vue.js 制作一个简单的调查问卷平台 原文  https://github.com/pramper/Demos/tree/master/Vue-Demos/Questionnaire 主题  ...

  8. Node.js搭建一个简单的服务器

    文章目录 Node.js的安装 了解Node.js模块系统 服务器的搭建 一.创建一个Web服务器 注意 程序代码 运行 二.静态资源托管 静态资源 注意 程序代码 运行 三.简单接口的实现(简单服务 ...

  9. 原生JS实现一个简单的打字小游戏

    原生JS实现一个简单的打字小游戏 利用javascript制作一个简单的打字小游戏 之前写了一个贪吃蛇小游戏好像反响不错 今天我来写一个比贪吃蛇更low更简单的打字小游戏 打字小游戏原理 接下来咋们直 ...

最新文章

  1. Debian与《玩具总动员》
  2. kafka的groupid
  3. CIO:2019年 IT 创造业务价值的12种方式
  4. 这个高度站立办公十分的棒
  5. 如何通向“广义人工智能”?LSTM 提出者之一Sepp Hochreiter:将符号 AI 与神经 AI 相结合...
  6. php session作用,PHP中Session的作用
  7. 北林oj-算法设计与分析-Line up in the canteen(两种解法,附思路)
  8. 计算机程序的思维逻辑 (54) - 剖析Collections - 设计模式
  9. SpringBoot2.1.5(7)---更换Banner
  10. apache cxf 测试webservice接口
  11. bind函数怎么用JAVA_面试官:能解释一下javascript中bind、apply和call这三个函数的用法吗...
  12. 室外AP设备的防雷接地
  13. ANDROID 绘制 三角形 XML
  14. 网络协议—应用层的HTTP协议
  15. 嵌入式Web开发——Boa服务器移植
  16. 【FPGA】数码管电子时钟
  17. 程序员小灰灰专栏收集
  18. linux mint19.01 运行steam错误解决办法
  19. 翻译:VESA Adaptive-Sync / AMD FreeSync / VRR 白皮书
  20. Python 第四十八章 css样式

热门文章

  1. serializers.Serializer的用法
  2. java Serializable
  3. 计算机SCI期刊是如何审稿的? - 易智编译EaseEditing
  4. SVN服务端和客户端搭建教程
  5. 你知道什么是软中断吗?
  6. Vue源码--解读vue响应式原理
  7. 通过炒股实现财务自由的人,都做对了什么?
  8. Android 拍照:如何使用已有相机应用捕获图片(Taking Photos Simply
  9. 瞬联基于OpenStack的私有云解决方案
  10. [算法]声音数据处理