用javascript实现图像裁剪

用javascript实现图像裁剪
画布是一种允许我们使用脚本绘制的标签,它提供了一套完整的属性和方法,我们可以用它来实现图形、图像处理甚至是简单的动画和游戏制作。

画布标记只有两个属性:宽度和高度,用于设置画布的宽度和高度。如果不是由标签属性或脚本设置,则默认值为300×150。

那么,画布的引入在这里首先。让我们用画布查看Javascript的裁剪代码。

复制代码代码如下所示:

无功selectobj = null;

功能imagecrop(canvasid,图像源,X,Y,宽度,高度){

VaR的画布=美元(# + canvasid);

如果(canvas.length图像源= = 0){

返回;

}

功能canvasmousedown(e){

stopselect(E);

canvas.css(光标

}

功能canvasmousemove(e){

无功canvasoffset = canvas.offset();

无功pagex = e.pagex事件。targettouches { 0 }。pagex | |;

无功pagey = e.pagey事件。targettouches { 0 }。pagey | |;

imousex = math.floor(pagex - canvasoffset。左);

imousey = math.floor(pagey - canvasoffset。顶);

canvas.css(光标

如果(selectobj。bdragall){

canvas.css(光标

canvas.data(拖

VaR CX = imousex - selectObj.px;

CX = 00;

MX = ctx.canvas.width - selectobj。W;



SelectObj。x = cx;

VaR CY = imousey - selectObj.py;

赛扬= 00:赛扬;

我ctx.canvas.height selectobj H = -;

赛扬;

SelectObj。Y = CY;

}

对于(var i = 0;i < 4;i + +){

SelectObj。男{我} = false;

SelectObj。icsize {我} = selectobj.csize;

}

在多维数据集上调整大小

如果(imousex > selectobj。X selectobj.csizeh imousex < selectobj X + selectobj.csizeh。

imousey > selectobj。Y selectobj.csizeh imousey < selectobj。Y + selectobj。csizeh){

canvas.css(光标

SelectObj。男{ 0 } =真;

SelectObj。icsize { 0 } = selectobj.csizeh;

}

如果(imousex > selectobj。x + selectobj。W·selectObj.csizeh iMouseX << selectobj。X + W + selectobj.csizeh selectobj。

imousey > selectobj。Y selectobj.csizeh imousey < selectobj。Y + selectobj。csizeh){

canvas.css(光标

SelectObj。男{ 1 } =真;

SelectObj。icsize { 1 } = selectobj.csizeh;

}

如果(imousex > selectobj。x + selectobj。W·selectObj.csizeh iMouseX << selectobj。X + W + selectobj.csizeh selectobj。

imousey > selectobj。Y + selectobj。H selectobj.csizeh imousey < selectobj。Y + selectobj。H + selectobj。csizeh){

canvas.css(光标

SelectObj。男{ 2 } =真;

SelectObj。icsize { 2 } = selectobj.csizeh;

}

如果(imousex > selectobj。X selectobj.csizeh imousex < selectobj X + selectobj.csizeh。

imousey > selectobj。Y + selectobj。H selectobj.csizeh imousey < selectobj。Y + selectobj。H + selectobj。csizeh){

canvas.css(光标

SelectObj。男{ 3 } =真;

SelectObj。icsize { 3 } = selectobj.csizeh;

}

如果(imousex > selectobj。X imousex selectobj。Y imousey < selectobj。Y + selectobj。h){

canvas.css(光标

}

在拖动调整大小的情况下

VaR的IFW,IFH,IFX,IFY,MX,我;

如果(selectobj。bdrag { 0 }){

IFX = imousex - selectObj.px;

IFY = imousey - selectObj.py;

IFW = selectobj。W + selectobj X IFX;

投资= selectobj。H + selectobj Y动词;

canvas.data(拖

}

如果(selectobj。bdrag { 1 }){

IFX = selectobj X;

IFY = imousey - selectObj.py;

IFW = imousex - selectobj.px - IFX;

投资= selectobj。H + selectobj Y动词;

canvas.data(拖

}

如果(selectobj。bdrag { 2 }){

IFX = selectobj X;

如果selectobj Y =;

IFW = iMouseX - selectObj.px - iFX;

投资= imousey - selectobj.py动词;

canvas.data(拖

}

如果(selectobj。bdrag { 3 }){

IFX = imousex - selectObj.px;

如果selectobj Y =;

IFW = selectobj。W + selectobj X IFX;

投资= imousey - selectobj.py动词;

canvas.data(拖

}

如果(IFW > > selectobj.csizeh正常selectobj.csizeh * 2 * 2){

SelectObj。W = IFW;

SelectObj H =正常;

SelectObj。x = IFX;

SelectObj。Y = IFY;

}

DrawScene();

}

功能canvasmouseout(){

$(帆布)。Trigger(MouseUp );

}

功能canvasmouseup(){

selectobj.bdragall = false;

对于(var i = 0;i < 4;i + +){

SelectObj。bdrag {我} = false;

}

canvas.css(光标

canvas.data(选择

X:selectobj X,

Y:selectobj。Y,

女:selectobj。W,

H:selectobj。H

});

selectobj.px = 0;

selectobj.py = 0;

}

函数选择(x,y,w,h){

这个。

这个,y = y;

这个。

这个;

this.px = x; / /额外的变量来牵引计算

this.py = Y;

this.csize = 4; / /调整立方体的大小

this.csizeh = 6; / /调整立方体的大小(悬停)

this.bhow = {假,假,假,假}; / /悬停状态

this.icsize = { this.csize,this.csize,this.csize,这。csize }; / /调整大小的立方体

this.bdrag = {假,假,假,假}; / /拖状态

this.bdragall = false; / /拖整个选择

}

(Selection.prototype.draw函数){

ctx.strokestyle =666#;

ctx.linewidth = 2;

Ctx.strokeRect(这个X,Y,W,这,这,H);

原始图像的一部分

如果(这0,这个,H = 0){

ctx.drawimage(图像,这个X,Y,W,这,这,这,这,X,Y,W,这,这,H);

}

调整立方体大小

ctx.fillstyle =999#;

Ctx.fillRect(的X,icsize { 0 },这,这,icsize { 0 },这。icsize { 0 }×2,这个icsize { 0 }×2);

Ctx.fillRect(,X,W,icsize { 1 },这,这,icsize { 1 },这。icsize { 1 }×2,这个icsize { 1 }×2);

Ctx.fillRect(,X,W,icsize { 2 },这。Y +,H本。icsize { 2 },这。icsize { 2 }×2,这个icsize { 2 }×2);

Ctx.fillRect(的X,icsize { 3 },这。Y +,H本。icsize { 3 },这。icsize { 3 }×2,这个icsize { 3 }×2);

};

VaR DrawScene(){()=功能

ctx.clearrect(0, 0,ctx.canvas.width,CTX。帆布。高度); / /清除画布

源图像

ctx.drawimage(形象,0, 0,ctx.canvas.width,CTX。帆布。高度);

使它变暗

ctx.fillstyle = 'rgba(0, 0, 0,0.5);

ctx.fillrect(0, 0,ctx.canvas.width,CTX。帆布。高度);

绘制/选择

SelectObj.draw();

Canvas.mousedown (canvasMouseDown);

canvas.on(touchstart

};

无功createselection =函数(x,y,宽度,高度){

无功量=美元(# imagepreview );

X = X(math.ceil | |(内容。宽度)-(宽) / 2);

Y = y(math.ceil | |(含量高)-(高度)/ 2);

返回新的选择(x,y,宽度,高度);

};

VaR CTX =帆布{ 0 }。getContext(2D);

无功imousex = 1;

无功imousey = 1;

新图像();

image.onload =函数(){

selectobj = createselection(x,y,宽度,高度);

canvas.data(选择

X:selectobj X,

Y:selectobj。Y,

女:selectobj。W,

H:selectobj。H

});

DrawScene();

};

image.src =图像源;

Canvas.mousemove(canvasmousemove);

canvas.on(touchmove

无功stopselect =功能(e){

无功canvasoffset = $(帆布)偏移();

无功pagex = e.pagex事件。targettouches { 0 }。pagex | |;

无功pagey = e.pagey事件。targettouches { 0 }。pagey | |;

imousex = math.floor(pagex - canvasoffset。左);

imousey = math.floor(pagey - canvasoffset。顶);

selectobj.px = imousex - selectobj X;

selectobj.py = imousey - selectobj。Y;

如果(selectobj。男{ 0 }){

selectobj.px = imousex - selectobj X;

selectobj.py = imousey - selectobj。Y;

}

如果(selectobj。男{ 1 }){

selectobj.px = imousex - selectobj。X selectobj。W;

selectobj.py = imousey - selectobj。Y;

}

如果(selectobj。男{ 2 }){

selectobj.px = imousex - selectobj。X selectobj。W;

selectobj.py = imousey - selectobj。Y selectobj。H;

}

如果(selectobj。男{ 3 }){

selectobj.px = imousex - selectobj X;

selectobj.py = imousey - selectobj。Y selectobj。H;

}

如果(imousex > selectobj。x + selectobj。csizeh)

imousex < selectobj。x + selectobj。W·selectObj.csizeh

imousey > selectobj Y + selectobj.csizeh。

imousey < selectobj。Y + selectobj。H selectobj。csizeh){

selectobj.bdragall =真;

}

对于(var i = 0;i < 4;i + +){

如果(selectobj。男{我}){

SelectObj bdrag { } =真实的我;

}

}

};

canvas.mouseout(canvasmouseout);

Canvas.mouseup(canvasmouseup);

canvas.on(touchend

this.getimagedata =功能(previewid){

无功tmpcanvas = $(){ 0 };

无功tmpctx = tmpcanvas.getcontext(2D);

如果(tmpcanvas selectobj){

tmpcanvas.width = selectobj。W;

tmpcanvas.height = selectobj。H;

tmpctx.drawimage(图像,selectobj。X,Y,selectobj。selectobj。W,selectobj。H,0, 0,selectobj selectobj。W。H);

如果(document.getelementbyid(previewid)){

document.getelementbyid(previewid)。src= tmpcanvas.todataurl();

document.getelementbyid(previewid)。style.border =1px solid # CCC;

}

返回tmpcanvas.todataurl();

}

};

}

功能autoresizeimage(最大,最大高度,objimg){

VaR img =新的图像();

img.src = objimg.src;

无功hratio;

无功wratio;

var比率= 1;

无功W = objimg.width;

var H = objimg.height;

wratio =最大 / W;

hratio =最大高度 / H;

如果(W<maxwidth h<最大高度){

返回;

}

如果(最大= = 0 {最大高度= = 0)

比率=1;

} {如果其他(最大= 0)

如果(hratio<1){

比= hratio;

}

} {如果其他(最大高度= 0)

如果(wratio<1){

比= wratio;

}

如果(wratio < 1 } { | | hratio<1)

比=(wratio <= hratio wratio:hratio);

{人}

比=(wratio <= hratio wratio hratio)- math.floor(wratio <= hratio wratio:hratio);

}

如果(比例为1){

如果(比< 0.5 W<maxwidth h<最大高度){

比率=1比;

}

w=w比;

h=h比;

}

objimg.height = H;

objimg.width = W;

}
让我们试一下,希望大家能喜欢,让我留言。

tag:图像裁剪电脑软件Javascript

相关内容