CSSとjQueryで簡単な画像エディタを作ります

7940 ワード

CSS filter


まずfilterについて検討します.
まずfilterについて説明します.CSSでfilterを実現するには、実は簡単です.次のような声明を使用します.
.example {
  filter:  [];
}

たとえば、画像にグレースケール(grayscale)の特効を追加すると、次のようになります.
.example {
  filter: grayscale(90%);
}

もちろん、ブラウザの互換性のためには、次のように書いたほうがいいです.

.example {
  -webkit-filter: grayscale(90%);
  filter: grayscale(90%);
}

フィルタの属性値の単位は通常0から1の間である可能性があるが、blurは画素「px」を単位とし、hue-rotateは角度degを基本単位として使用するなど、そうではない場合がある.
.example {
  filter: blur(10px);
}
.example-2 {
  filter: hue-rotate(90deg);
}

しかし、毎回1つのfilterしか使えないと面倒なので、CSSはより便利な書く形式を提供し、直接並べて書くことができます.
.example {
  filter: grayscale(0.5) blur(10px);
}

これにより、1つの要素に複数のfilterプロパティを追加できます.
フィルタを簡単に話した後、簡単なピクチャエディタを作成します.

基本的なHTMLファイルの作成


ここでindexを作成します.html、コードも簡単です.


    
        
        Image Editor

        
    

    
        

Image Editor

![](images/aviary_heibai.jpg)

このファイルにはmainが されています.cssとmain.js,main.cssは はエディタのいくつかのレイアウトに して して、 のfilterの に して の をしていないで、 はエディタをして、だからユーザーがあるfilterの を える 、 はリアルタイムでユーザーに を せることができて、そこでこれらのfilterを するコードはmainに くべきです.jsの .
の の の のinputはfilterのプロパティ です. のfilterを に して に を えることができるので、 の filterのプロパティ は な に されています.
のindex.htmlはまた、 に ボックスを して、ユーザーに のURLを して、ユーザーが に ることをクリックすると、 たちはこの を エリアに します. の な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の .ユーザーが で を できるようになったら、 の を することができます.
ユーザーが バーをスライドするたびに、 をユーザーに できます.そこで、ユーザーのmousemoveイベントを します( を してください):
$("input[type=range]").mousemove(editImage);

すなわち,ユーザがコントロールバーを するたびにeditImage を する.しかし、このような は ではないかもしれません. のユーザーのマウスがコントロールバーを れたとき、changeイベントを し、この の もeditImage に して することができるので、 のコードをこのように くことができます.
$("input[type=range]").mousemove(editImage).change(editImage);

editImage の
Input[type=range]のmousemoveとchangeイベントをeditImage に したので、editImageの コードを します.
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 + '%)'); 

}

は です. たちはユーザーがコントロールバーをスライドするたびにvar gs=$("#gs")のようにします.val();の は する を して、それからJqueryのcss()の を じて ピクチャーにfilterの をプラスして、しかもあなたも ることができることを じて、この の はブラウザの を します
$("#imageContainer img").css("-webkit-filter",...)

このコードは にはimg で のような を しています.
![](images/aviary_heibai.jpg)

に、いくつかの を に したくない は、resetをクリックして の にリセットすることができます.
$('#imageEditor').on('reset', function () {
    setTimeout(function() {
        editImage();
    },0);
});

ここで する があるのは、ここでsettimeout はresetの を も く するために、 の に くとします.
$('#imageEditor').on('reset', function () {

        editImage();
    });

このとき、reset の は には し れています. っている に、すぐには えません.
ブラウザがindexを きます.htmlは、 の が られます.いくつかの のコントロールバーをドラッグして を することができます.------ では を します.