当前位置:首页 > 日记 > 正文

用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;

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

相关文章

2015幸福人格签名宣言

2015幸福人格签名宣言

人格,宣言,电脑软件,没有拥抱,你宁愿老了。 记住我,我爱你一辈子。 记住我的名字和我带给你的故事。 天气很好,太阳很凉爽很凉爽。我很高兴。 如果有未来十年。 像天空的颜色,大海的深度和你的声音。 我喜欢老朋友和老情人。 我想要的只是你的…

PHP实现方法,以确定访问路线是否是

PHP实现方法,以确定访问路线是否是

方法,路线,搜索引擎,电脑软件,PHP,本文演示了PHP实现的方式,即访问是否是一个搜索引擎机器人,供大家参考,具体分析如下: 大多数时候,我们需要识别网站访问者的方式。对于真正的用户和搜索引擎执行不同的操作,我们首先需要决定是否搜索引擎。 PH…

如何绘制数据流图的格式

如何绘制数据流图的格式

数据流图,绘制,格式,电脑软件,Word2003数据流图的绘制 在我们的工作中,我们经常需要绘制流程图,如业务流程。如果你使用比较经典的流程图绘制工具,如Visio,它可能会觉得比较麻烦,不容易打在Word文档。我们经常需要对线对齐的细节花费了大量的时…

Javascript使用数组作为堆栈的方式

Javascript使用数组作为堆栈的方式

数组,堆栈,方式,电脑软件,Javascript,本文演示了Javascript使用数组作为堆栈的方法: Javascript使用数组作为堆栈使用的代码示例,支持堆栈中常用的推送和弹出方法。 var= Numbers.push(五); Numbers.push(六); (numbers.pop document.write()); (numbers.pop documen…

2015对幸福人格签名

2015对幸福人格签名

人格,电脑软件,我爱我的霸道每一秒你的职业 我爱你很随和,每一秒都是你的职业。 爱情不能玩,感情游戏,姐伤。 爱情买不起,玩游戏,感情游戏,哥哥受伤了。 你说,我是你整个年轻的朋友。 你说我是你温室里的花蕾。 其实,爱一个人感觉真的不错,毫不犹豫…

PS只画一个可爱的雪人

PS只画一个可爱的雪人

雪人,画一,可爱,电脑软件,PS,本教程是为诗者,诗的简介,一个简单的方法来画可爱的雪人。教程很简单。非常适合初学者学习。建议大家一起学习。 没什么,简单的堆雪人,分享一下,ps新手可以一步一步来试试。 方法/步骤 1,打开ps,创建一个空白页面,创建…

js设置方法和空间性质的网页动

js设置方法和空间性质的网页动

方法,设置,空间,网页,性质,本文说明了JS设置vSpace和指定一个页面图片属性。分享给你供你参考。具体分析如下: 指定可以指定文本左侧和右侧的图像像素的图像之间的距离,和动值的上下文本和图像之间的像素数。 setspace()函数 { document.gete…

PS创造美丽独特的咖啡渍

PS创造美丽独特的咖啡渍

创造,独特,美丽,电脑软件,PS,今天的教程是非常特别的,你会感觉到一个咖啡污渍的美丽诞生的所有。可以说,本教程已经完成,和刷子的知识可能已经到位。 今天的教程很特别,你会一路感觉到咖啡渍的美丽诞生,可以说这个教程已经完成了,而且毛笔的知识…

PS结合美丽和创意影像

PS结合美丽和创意影像

创意,影像,美丽,电脑软件,PS,本教程是介绍一个美丽的和创造性的微肖像的方法,以PS,这是非常美丽的。建议像你这样的朋友可以和你的导师一起学习。你可以从中吸取教训。 在本教程中,ps照片合成学习者使用ps来合成美丽的和微观的图像。教程合成…

坚强意志与哲学经典签名

坚强意志与哲学经典签名

意志,坚强,哲学,经典,电脑软件,以下是你所编的坚强意志经典人格签名的全部内容。如果您喜欢小编辑器的建议,请继续关注它。 即使你能负担得起,你也应该学会放下它。 对于未来的家庭,你不必为乞丐而奋斗。 如果你不把自己变成一个好的人,你怎么…

如何用PS图象处理软件把照片吗

如何用PS图象处理软件把照片吗

照片,图象,如何用,处理软件,电脑软件,PS图象处理软件是一个常见的专业图像处理软件,它的功能,首先教你一个简单的手术切的照片。我希望它会对你有帮助。 日常工作生活中,经常需要将照片,让画面满足我们的需要,对图像进行裁剪的方法非常多,萧边在…

非主流QQ签名

非主流QQ签名

非主流,电脑软件,QQ,知道你在附近,自然会产生一种特殊的感觉,即使我看不到你。 不要因为一时冲动而说些过激的话,没有人愿意为了伤害而改变感冒的热情。 我把我的空梦卖给你,因为你的眼睛变了。 如果你不抛弃我的渣渣,我愿意为你写你最喜欢的句…