摘要:原文來自效果圖本文主要是利用的和簡(jiǎn)單的代碼來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的圖片編輯器,包括對(duì)圖片的透明度,黑白,圖片亮度等調(diào)節(jié)。簡(jiǎn)單地說完之后,我們來動(dòng)手創(chuàng)建一個(gè)簡(jiǎn)單的圖片編輯器。
原文來自:https://jellybool.com/post/build-a-simple-image-editor-with-css-js
demo: https://jellybool.com/demo/image-editor
效果圖:
本文主要是利用CSS的 filter和簡(jiǎn)單的Jquery代碼來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的圖片編輯器,包括對(duì)圖片的透明度,黑白,圖片亮度等調(diào)節(jié)。
CSS filter我們首先來探討一下filter。
首先來說明一下filter,在CSS里面要實(shí)現(xiàn)filter,其實(shí)很簡(jiǎn)單,使用類似下面的聲明方式:
.example { filter:[ ]; }
比如說,我們給圖片添加一點(diǎn)灰度(grayscale)特效,就可以這樣:
.example { filter: grayscale(90%); }
當(dāng)然,為了瀏覽器兼容,我們最好這樣寫:
.example { -webkit-filter: grayscale(90%); filter: grayscale(90%); }
需要注意的是:filter的屬性值的單位通常可能是從0到1之間,但是有些不是這樣的,比如blur是使用像素"px"來作為單位的,而hue-rotate則使用角度deg來作為基本單位;
.example { filter: blur(10px); } .example-2 { filter: hue-rotate(90deg); }
但是如果每次只能使用一個(gè)filter就比較麻煩了,所以CSS提供了更加方便的書寫形式,直接并排著寫:
.example { filter: grayscale(0.5) blur(10px); }
這樣就可以實(shí)現(xiàn)對(duì)一個(gè)元素添加多個(gè)filter屬性。
簡(jiǎn)單地說完filter之后,我們來動(dòng)手創(chuàng)建一個(gè)簡(jiǎn)單的圖片編輯器。
創(chuàng)建基本的HTML文件在這里我們創(chuàng)建一個(gè)index.html,代碼也比較簡(jiǎn)單:
Image Editor Image Editor
這個(gè)文件里,我們引入了main.css和main.js,main.css其實(shí)是對(duì)編輯器的一些排版起的作用,并沒有對(duì)圖片的filter效果做出實(shí)際的影響,我們做的是編輯器,所以在用戶改變某個(gè)filter的值的時(shí)候,我們可以實(shí)時(shí)讓用戶看到效果,于是這些實(shí)現(xiàn)filter的代碼應(yīng)該就放在main.js里面。
上面的每一個(gè) 下面的
元素下面的input都是filter的一個(gè)屬性設(shè)置,因?yàn)槲覀兛梢酝瑫r(shí)用多個(gè)filter來對(duì)圖片產(chǎn)生特效,所以我每個(gè)filter的屬性值都設(shè)置為可以調(diào)節(jié)的狀態(tài)。
上面的index.html還要說明的是,在最上面我們提供一個(gè)輸入框,用于給用戶輸入圖片的URL,當(dāng)用戶點(diǎn)擊回車的時(shí)候,我們就將這張圖片顯示到編輯區(qū)域。使用的是下面的簡(jiǎn)單js代碼:
function addImage(e) { var imgUrl = $("#imgUrl").val(); if (imgUrl.length) { $("#imageContainer img").attr("src", imgUrl); } e.preventDefault(); } //on pressing return, addImage() will be called $("#urlBox").submit(addImage);
上面的js代碼也是寫到main.js當(dāng)中。有了可以用戶自己添加圖片之后,我們就可以實(shí)現(xiàn)對(duì)圖片的編輯了:
每次用戶在滑動(dòng)進(jìn)度條的時(shí)候,我們就可以將效果展示給用戶看,于是我們來監(jiān)聽用戶的mousemove事件:
$("input[type=range]").mousemove(editImage);
也就是說,每次用戶在移動(dòng)控制條的時(shí)候,我們都執(zhí)行editImage函數(shù)。
但是這樣的體驗(yàn)可能還不是最好,因?yàn)樵谧詈笥脩舻氖髽?biāo)離開控制條的時(shí)候,我們還可以監(jiān)聽change事件,把這一刻的變化也交給editImage函數(shù)處理,所以可以將上面的代碼寫成這樣:
$("input[type=range]").mousemove(editImage).change(editImage);編寫editImage函數(shù)
上面我們將input[type=range]的mousemove和change事件交給了editImage函數(shù)處理,所以,我們來編寫一下editImage的函數(shù)代碼:
function editImage() { var gs = $("#gs").val(); // grayscale var blur = $("#blur").val(); // blur var br = $("#br").val(); // brightness var ct = $("#ct").val(); // contrast var huer = $("#huer").val(); //hue-rotate var opacity = $("#opacity").val(); //opacity var invert = $("#invert").val(); //invert var saturate = $("#saturate").val(); //saturate var sepia = $("#sepia").val(); //sepia $("#imageContainer img").css("filter", "grayscale(" + gs+ "%) blur(" + blur + "px) brightness(" + br + "%) contrast(" + ct + "%) hue-rotate(" + huer + "deg) opacity(" + opacity + "%) invert(" + invert + "%) saturate(" + saturate + "%) sepia(" + sepia + "%)"); $("#imageContainer img").css("-webkit-filter", "grayscale(" + gs+ "%) blur(" + blur + "px) brightness(" + br + "%) contrast(" + ct + "%) hue-rotate(" + huer + "deg) opacity(" + opacity + "%) invert(" + invert + "%) saturate(" + saturate + "%) sepia(" + sepia + "%)"); }
其實(shí)很簡(jiǎn)單,我們?cè)诿看斡脩艋瑒?dòng)控制條的時(shí)候,我們就通過類似var gs = $("#gs").val();的語句取得相對(duì)應(yīng)地值,然后通過Jquery的css()方法直接為圖片加上filter效果,而且相信你也看得出來,這個(gè)函數(shù)的后半段就是實(shí)現(xiàn)瀏覽器兼容的
$("#imageContainer img").css("-webkit-filter",...)
這段代碼其實(shí)就是在img元素實(shí)現(xiàn)了類似下面的效果;
最后,如果你不想將某些特效加到圖片上面去,你可以點(diǎn)reset然后將圖片重置到原始狀態(tài):
$("#imageEditor").on("reset", function () { setTimeout(function() { editImage(); },0); });
這里需要說明一下的是,這里的setTimeout函數(shù)就是為了將reset的效果最快地展現(xiàn)出來,如果寫成下面的形式:
$("#imageEditor").on("reset", function () { editImage(); });
這個(gè)時(shí)候,reset效果執(zhí)行起來其實(shí)是有一點(diǎn)延遲的,你明顯可以看到等待的時(shí)候,它并不是很快。
瀏覽器打開index.html,就可以看到相應(yīng)的調(diào)節(jié)效果了。你可以拖動(dòng)一些設(shè)置項(xiàng)的控制條來查看效果。
Happy Hacking
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/91522.html
摘要:原文來自效果圖本文主要是利用的和簡(jiǎn)單的代碼來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的圖片編輯器,包括對(duì)圖片的透明度,黑白,圖片亮度等調(diào)節(jié)。簡(jiǎn)單地說完之后,我們來動(dòng)手創(chuàng)建一個(gè)簡(jiǎn)單的圖片編輯器。 原文來自:https://jellybool.com/post/build-a-simple-image-editor-with-css-js demo: https://jellybool.com/demo/i...
摘要:騰訊空間超分辨率技術(shù)為用戶節(jié)省流量,處理效果和速度超谷歌技術(shù)在的標(biāo)準(zhǔn)下,處理速度在提升了,處理效果也有明顯提升。此外,也是業(yè)界首次實(shí)現(xiàn)移動(dòng)端使用深度神經(jīng)網(wǎng)絡(luò)進(jìn)行超分辨率,并保證圖片能夠?qū)崟r(shí)進(jìn)行處理。值得一提的是的對(duì)應(yīng)指標(biāo)也在名單里。 團(tuán)隊(duì)分享 魔幻語言 JavaScript 系列之 call、bind 以及上下文 從一行代碼來看看 JavaScript 是一門多么魔幻的語言,順便談?wù)?...
摘要:如何用獲取虛擬鍵盤高度前端早讀課月號(hào)早讀文章由湯谷投稿分享。大殺器和把動(dòng)畫轉(zhuǎn)換成原生動(dòng)畫初來乍到,本文搬運(yùn)自我月份在知乎發(fā)的文章。 前端面試之 CSS3 新特性 除了 HTML5 的新特性,CSS3 的新特性也是面試中經(jīng)常被問到的。 如何用 js 獲取虛擬鍵盤高度?-前端早讀課 9月7號(hào)早讀文章由@湯谷投稿分享。正文從這開始~ 這是一個(gè)存在很久的歷史問題了,對(duì)于這樣一個(gè)具有普遍性的問題...
摘要:我覺得這方面的原因是當(dāng)時(shí)對(duì)和的依賴,導(dǎo)致大家對(duì)的興趣不弄,錯(cuò)過了最佳時(shí)機(jī),這個(gè)其實(shí)跟百度自己的的技術(shù)棧有很大關(guān)系。這個(gè)阮一峰對(duì)于前端構(gòu)建的變化吐槽過,說新的構(gòu)建工具就是的構(gòu)建工具。 文章來源 最近幾年,前端發(fā)展越來越迅速,各種萌新加入了前端這個(gè)大家庭,大有趕IOS、超Android的趨勢(shì)呀!同時(shí),萌新們提出了各種前端工作問題,除了最基礎(chǔ)的html、css、js三板斧之外,最讓人頭疼的應(yīng)...
摘要:我覺得這方面的原因是當(dāng)時(shí)對(duì)和的依賴,導(dǎo)致大家對(duì)的興趣不弄,錯(cuò)過了最佳時(shí)機(jī),這個(gè)其實(shí)跟百度自己的的技術(shù)棧有很大關(guān)系。這個(gè)阮一峰對(duì)于前端構(gòu)建的變化吐槽過,說新的構(gòu)建工具就是的構(gòu)建工具。 文章來源 最近幾年,前端發(fā)展越來越迅速,各種萌新加入了前端這個(gè)大家庭,大有趕IOS、超Android的趨勢(shì)呀!同時(shí),萌新們提出了各種前端工作問題,除了最基礎(chǔ)的html、css、js三板斧之外,最讓人頭疼的應(yīng)...
閱讀 1032·2021-11-25 09:43
閱讀 1413·2021-11-18 10:02
閱讀 1814·2021-11-02 14:41
閱讀 2366·2019-08-30 15:55
閱讀 1067·2019-08-29 16:18
閱讀 2552·2019-08-29 14:15
閱讀 1390·2019-08-26 18:13
閱讀 733·2019-08-26 10:27