JavaScript 图片切割效果

序一(08/07/21)

很久之前就在一个网站的截取相片的功能中看到这个效果,也叫图片裁剪、图片剪切(设置一下也可以做出放大镜等类似的效果)。
当时觉得很神奇,碍于水平有限,没做出来。
前些日子突然想做一个透镜效果,就突然想到了这个效果,于是找出当年“珍藏”的代码决定一尝所愿。

序二(08/12/06)

自上一个版本的图片切割效果出来后,虽然也经常看到“框架开发这个如何如何容易”之类的评论,但也受到很多人的肯定,小弟在此感谢大家的支持。
上一个版本由于是初次接触这类效果,而且是三个大功能一起开发,能力所限,所以仅仅是实现了效果就完成了。
后来我知道这个效果叫ImageCropper,找了些这类效果参考,完善了切割的部分。
近来我把其中的拖放效果缩放效果单独出来研究,经过整理和完善,再套进切割效果,个人感觉效果已经不错了。
要说明的是这个只是一个效果,并不是真正的切割图片,要获取真正的切割图片请参考图片切割系统

先看看效果:




图片地址:


程序说明

这个效果主要分三个部分:层的拖放、层的缩放、图片切割(包括预览)。
其中层的拖放层的缩放我已经在其他两篇文章中有详细说明,这里就说说图片切割这部分吧。

【图片切割】

关于图片切割的设计,有三个方法:
1.定位四个半透明层,遮住要盖住的部分,没试过,感觉比较麻烦;
2.把图片设为背景图,通过设置背景图的位置来实现,但这样的缺点是只能按图片的正常比例实现,不够灵活;
3.把图片放到切割对象里面,通过设置图片的top和left实现,这个方法是可行,但下面有更简单的方法实现;
4.通过设置图片的clip来实现。

这里介绍方法4的实现方法,这个方法是从当年“珍藏”的代码中看到的,先说说clip:
clip的作用是“检索或设置对象的可视区域。可视区域外的部分是透明的。”
依据上-右-下-左的顺序提供自对象左上角为(0,0)坐标计算的四个偏移数值来剪切。
例如:

div { position:absolute; width:60px; height:60px; clip:rect(0 20 50 10); }


注意position:absolute的设置是必须的(详细看手册)。

下面说说具体实现原理:
首先需要一个容器(_Container),容器里面会插入三个层:
底图层(_layBase):那个半透明的图片;
切割层(_layCropper):正常显示的那个部分;
控制层(_layHandle):就是控制显示的那个部分。

其中为了底图层和切割层是程序自动创建的图片,控制层是自己定义的层(程序中是一个div)。
底图层和切割层必须完全重合,程序中把这两个层都绝对定位到了左上角:

this._layBase.style.top = this._layBase.style.left = this._layCropper.style.top = this._layCropper.style.left = 0;


层叠顺序也要设置一下保证各层顺序。

下面说说各部分的作用:
容器:除了容器本身的作用,通过设置其背景色来设置透明的渐变色,由于图片本身没有背景色所以要通过容器来设置;
底图层:在容器最底部,作用是显示非选择区域的图片,透明效果就是在这层设置;
切割层:最关键的一个层,在底图层和控制层之间,在这个层通过clip设置其可视区域来实现切割图片的效果;
控制层:位于顶部,拖放(_drag)和缩放(_resize)效果就是在这个层实现,根据其拖放和缩放的结果控制切割层的切割效果。

这里要注意的是控制层的_drag拖放效果的Transparent要设为true(详细看拖放效果的透明背景bug部分)。
要使用缩放需要把Resize设为true,并设置各个拖拉对象,程序通过_resize设置缩放的比例和最少范围(详细看拖拉缩放效果)。

下面说说控制层如何控制切割效果:
控制层的拖放和缩放过程中加入了SetPos设置切割样式程序,在SetPos程序中根据控制层的样式设置切割层的可视区域范围:

var p = this.GetPos();
this._layCropper.style.clip = "rect(" + p.Top + "px " + (p.Left + p.Width) + "px " + (p.Top + p.Height) + "px " + p.Left + "px)";


其中GetPos程序,它可以把当前控制层的样式参数作为一个对象返回:

with(this._layHandle){
    
return { Top: offsetTop, Left: offsetLeft, Width: offsetWidth, Height: offsetHeight }
}


如果理解了的话就会觉得其实原理挺简单的,不过要想出来还是要一定创意才行,为想出这个方法的人致敬!

【切割预览】

预览效果需要设置Preview属性为预览容器对象,程序会自动给容器插入一个预览对象(图片)。
预览效果的关键在于如何根据控制层的数据来给预览对象定位,这个主要在SetPreview预览效果程序中处理。
首先根据控制层的高宽比置预览对象显示的宽和高(不是图片本身的宽高哦),这里可以用GetSize程序获取:

var p = this.GetPos(), s = this.GetSize(p.Width, p.Height, this.viewWidth, this.viewHeight), scale = s.Height / p.Height;


其中GetSize获取尺寸程序可以根据图片实际大小按比例缩放到要设置的大小:

Code


可以看出如果后两个参数(viewWidth和this.viewHeight)都不设置就会按原来大小显示了,

然后再按预览图跟控制层的比例设置预览图的样式参数:

var pHeight = this._layBase.height * scale, pWidth = this._layBase.width * scale, pTop = o.Top * scale, pLeft = o.Left * scale;


最后根据参数对预览对象进行样式设置和切割:

Code


这里有点烦乱,但应该不难理解就不详细说明了。

【图片大小】

容器的大小一般是固定的,但图片的大小就不是固定的,这里又可以使用SetSize程序用来设置图片大小:

Code


有了图片大小就可以用来设置拖放和缩放的范围限制了:

Code


ps:程序中的Init程序是用来把个性设置呈现出来,所以一般设置过属性之后(例如图片地址、透明度等)就执行一次Init程序就可以显示效果了。

【ie6渲染bug】

拖放效果中说到插入一个div解决ie的透明背景bug,这里就需要修复这个bug。
缩放效果配合使用时,不得不说ie6的一个渲染bug,用下面的代码测试(ie6):

Code


可以对比ie7的效果,可以看出里面的div虽然高度设置了100%,但在外面的div修改高度之后,却不知什么原因没有填充了(外面的div渲染后,没有触发里面的div再渲染)。

解决这个bug的关键是使里面的div能再渲染,这里有几个方法可以解决:
1,设置控制层的overflow为hidden,好处是只需要设置一次,但这个样式会影响其他效果,当然在不影响效果的情况下这个是最好的方法;
2,在缩放的时候,通过修改控制层的某些样式,使里面的div再渲染,这样的样式包括zoom,display(应该还有其他吧);
3,在缩放的时候,通过修改插入div的某些样式,使其再渲染,这样的样式包括display(zoom也不行);
程序中是通过修改_layHandle的zoom解决的:

if(isIE6){ with(this._layHandle.style){ zoom = .9; zoom = 1; }; };


ps:这个bug的原因貌似跟ie的layout有关,但我查了一下还是没弄清楚,谁有详细的介绍或解析务必跟我分享一下啊。


使用说明

实例化时有三个必要参数:容器对象、控制层、图片地址:

var ic = new ImgCropper("bgDiv""dragDiv""1.jpg");


有以下这些可选参数和属性:
属性:默认值//说明
Opacity: 50,//透明度(0到100)
Color:  "",//背景色
Width:  0,//图片高度
Height:  0,//图片高度
//缩放触发对象
Resize:  false,//是否设置缩放
Right:  "",//右边缩放对象
Left:  "",//左边缩放对象
Up:   "",//上边缩放对象
Down:  "",//下边缩放对象
RightDown: "",//右下缩放对象
LeftDown: "",//左下缩放对象
RightUp: "",//右上缩放对象
LeftUp:  "",//左上缩放对象
Min:  false,//是否最小宽高限制(为true时下面min参数有用)
minWidth: 50,//最小宽度
minHeight: 50,//最小高度
Scale:  false,//是否按比例缩放
Ratio:  0,//缩放比例(宽/高)
//预览对象设置
Preview: "",//预览对象
viewWidth: 0,//预览宽度
viewHeight: 0//预览高度

 

程序代码

Code

 

 

完整实例下载

转载请注明出处:http://www.cnblogs.com/cloudgamer/

如有任何建议或疑问,欢迎留言讨论。

如果觉得文章不错的话,欢迎点一下右下角的推荐。

对广告有兴趣的也欢迎点一下^_^。

4
0
(请您对文章做出评价)
« 上一篇:JavaScript 图片滑动切换效果
» 下一篇:web开发未解之谜
posted @ 2008-07-21 01:20 cloudgamer 阅读(58707) 评论(224)  编辑 收藏 网摘 所属分类: Javascript

评论共3页: 上一页 1 2 3 
  回复  引用  查看    
#125楼2009-01-13 20:17 | oec2003      
非常好
收藏

  回复  引用  查看    
#126楼2009-01-14 08:28 | Deep      
Very Good! 收藏了!
  回复  引用  查看    
#127楼2009-01-20 11:17 | 痴情客      
very well,helpful/~
  回复  引用    
#128楼2009-02-06 11:12 | 夜雪[未注册用户]
我是新手,问个问题
在javascript中 var aa=function(){}
function aa(){}
aa:function(){}
这三种创建函数有什么区别,
a=5和a:5 都是给a赋个5的意思吗? 有区别吗?

  回复  引用  查看    
#129楼[楼主]2009-02-06 11:17 | cloudgamer      
@鬼神
@oec2003
@Deep
@痴情客
谢谢支持

@夜雪
1 2都是赋值,不过也有些差别
3是属性的写法吧例如var o={a:5}那么o.a就是5

  回复  引用    
#130楼2009-02-24 10:24 | laogao[未注册用户]
能不能修改成自己选择图片了?

  回复  引用  查看    
#131楼2009-02-26 20:54 | czy1121      
呵呵,你写的这个"图片切割效果",还有狼Robot的,都被我用作我自己写的那个"图片切割效果"的参考~~
  回复  引用    
#132楼2009-03-18 13:36 | srdt[未注册用户]
那个MM确实好看
  回复  引用  查看    
#133楼2009-03-24 16:10 | VisualStudio      
找资料,顶你!
  回复  引用  查看    
#134楼2009-04-08 04:19 | zhiye      
var ic = new ImgCropper("bgDiv", "dragDiv", "/upload/2.jpg", {
Color: "#000",
Resize: false,
Right: "rRight", Left: "rLeft", Up: "rUp", Down: "rDown",
RightDown: "rRightDown", LeftDown: "rLeftDown", RightUp: "rRightUp", LeftUp: "rLeftUp",
Preview: "viewDiv", viewWidth: 110, viewHeight: 135
})

其中/upload/2.jpg为在服务器上已经上传的图片

请问这个地方的图片 能不能改成 C:\upload\2.jpg 即指向一个本地图片
在本地完成切割参数生成选择 ,点上传后在按照在本地图片的切割参数修改上传的图片

  回复  引用  查看    
#135楼[楼主]2009-04-08 08:23 | cloudgamer      
@laogao
@czy1121
@srdt
@VisualStudio
谢谢支持

  回复  引用  查看    
#136楼[楼主]2009-04-08 08:35 | cloudgamer      
@zhiye
那是不行的

  回复  引用    
#137楼2009-04-09 16:21 | 双色球[未注册用户]
不错!支持下!
  回复  引用  查看    
#138楼2009-04-09 21:04 | 5201314      
出个教程吧!~~~

看不懂!!!!!!!!!!!!

  回复  引用  查看    
#139楼[楼主]2009-04-11 08:39 | cloudgamer      
@双色球
谢谢支持

@5201314
这里的程序说明就是教程

  回复  引用  查看    
#140楼2009-04-13 02:49 | .。oоΟ○〇      
博主厉害
  回复  引用    
#141楼2009-04-25 09:01 | 爱在心里[未注册用户]
谢谢博主分享
小弟愚昧,不知道怎么保存裁剪好的图片,例如把它利用到上传图片的同时,那样就有使用性了

  回复  引用  查看    
#142楼[楼主]2009-04-25 13:53 | cloudgamer      
@.。oоΟ○〇
谢谢支持

@爱在心里
你可以看看图片切割系统
http://www.cnblogs.com/cloudgamer/archive/2008/10/05/1303993.html

  回复  引用    
#143楼2009-05-07 11:19 | hqlong[未注册用户]
很不错的一个博客
  回复  引用  查看    
#144楼2009-05-12 22:33 | 年青人      
博客不错
  回复  引用    
#145楼2009-05-23 01:55 | yiminghe
为什么和我做得如此一样。。。。我没抄你的啊,就是吵了点advanced dom scripting


基于Ext-core 好玩的图片部分自由放大工具(http://yiminghe.javaeye.com/blog/388872

  回复  引用  查看    
#146楼[楼主]2009-05-23 08:37 | cloudgamer      
@hqlong
@年青人
谢谢支持

@yiminghe
抄也不需要抄我
做得比我好的多的是

  回复  引用    
#147楼2009-06-24 13:55 | 7di.net[未注册用户]
做的非常不错,我刚才用这里的切割效果配合asp和aspjpeg组件做了一个图片切割工具,很是不错,非常棒,不过有一个小问题请教一下,就是我在生成图片获取各项数值的时候得到的图片宽度和高度好像都是预览图的宽度和高度,这好像不对,因为宽度只有100的图,切割保存之后宽度超出了100,以下是我用来获取各项数值的代码,不知道是什么地方的问题

x = o.Left,
y = o.Top,
w = o.Width,
h = o.Height,
pw = ic._layBase.width,
ph = ic._layBase.height;

http://www.7di.net

  回复  引用  查看    
#148楼[楼主]2009-06-24 13:58 | cloudgamer      
@7di.net
你可以参考对应的切割系统
http://www.cnblogs.com/cloudgamer/archive/2008/10/05/1303993.html

  回复  引用    
#149楼2009-06-24 15:01 | 7di.net[未注册用户]
是的,我参照的就是那个,问题就出在那个上
  回复  引用  查看    
#150楼[楼主]2009-06-24 15:11 | cloudgamer      
@7di.net
不管图片参数还是切割参数缩放参数都可以获取的
不一定要按我那个来获取的我那个只是一个例子而已
实际上要根据你要的结果来获取需要的参数
这个你自己研究一下吧

  回复  引用    
#151楼2009-06-24 23:36 | 7di.net[未注册用户]
我仔细看了一遍所有的js发现问题确实存在,问题的根源是:因为被裁切的图载入变为背景图之后是被缩放过的,所以他不再是原来的尺寸,而预览图得到的尺寸则是被裁切区域的宽度和高度,这里没有考虑原图被缩放过这一因素,因此会出问题。
  回复  引用  查看    
#152楼[楼主]2009-06-25 08:22 | cloudgamer      
@7di.net
缩放之后的大小也是可以获取的啊

  回复  引用    
#153楼2009-06-25 22:58 | 7di.net[未注册用户]
楼主可否发一个比较详细的实例啊?反正我现在在用这个系统的时候碰到了很多问题,小问题我自己都已经解决了,但是图片切割之后变形,图片切割之后尺寸不对这些问题比较难处理
  回复  引用    
#154楼2009-06-25 23:00 | 7di.net[未注册用户]
或者你设置一个参数,分别让右侧和左侧的预览图或原图不要放大或缩小,让他们保持原尺寸,这样只要修改一下这个参数就能控制让他和左侧同步大小了
  回复  引用    
#155楼2009-06-25 23:01 | www.7di.net[未注册用户]
麻烦你了,静候回复
  回复  引用  查看    
#156楼[楼主]2009-06-26 08:32 | cloudgamer      
@7di.net
理论上参数都能获取,无论你想要什么效果都应该可以
我的例子已经很详细了,如果是有什么错误我们可以研究
但如果是要其他效果请自行修改吧

  回复  引用    
#157楼2009-06-26 15:35 | 英斩树
我把程序改了一下,把URL改成从本地获得,这样的话
就是这种格式:D:\Documents and Settings\lgss\My Documents\My Pictures\sel\hello.jpg
和原来的格式:http://images.cnblogs.com/cnblogs_com/cloudgamer/143727/r_xx2.jpg
不一样,造成了无法显示,应该如何修改?

  回复  引用  查看    
#158楼[楼主]2009-06-26 15:38 | cloudgamer      
@英斩树
那样的本地路径你放到img的src都显示不了啦

  回复  引用    
#159楼2009-06-26 15:45 | 英斩树
@zhiye
那是不行的

真的不行吗?

  回复  引用    
#160楼2009-06-26 15:46 | 英斩树
没想到楼主是个这么勤奋的人,回复这么快!
  回复  引用    
#161楼2009-06-26 15:52 | 英斩树
我本来是用微软的滤镜显示图片的,这样可以显示本地图片:
function ShowImage(path) {
//处理前是原图,先将其隐藏,
document.all.divShow.style.visibility = "hidden";
document.all.divShow.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = path;
document.all.divShow.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").sizingMethod = "image";
//过一小会获取div的宽高.
setTimeout("setImg(document.all.divShow)", 100);
这个paht是本地路径。不过其实这段代码也是别人写的。

  回复  引用  查看    
#162楼[楼主]2009-06-26 16:12 | cloudgamer      
@英斩树
这个一般是用来图片上传预览的
很麻烦而且不兼容

  回复  引用    
#163楼2009-06-28 17:16 | 啊[未注册用户]
如何才能读取到<img id="imgCreat" style="display:none;" /> 这里的src地址
  回复  引用  查看    
#164楼[楼主]2009-06-28 21:18 | cloudgamer      
@啊
imgCreat.src?

  回复  引用    
#165楼2009-06-29 02:25 | www.7di.net[未注册用户]
楼主,你自己看看吧,http://www.open-open.com/ajax/ImageCropper.htm
不是打击你,随便跳出一个来好像都比你的强悍。

  回复  引用  查看    
#166楼[楼主]2009-06-29 08:22 | cloudgamer      
@www.7di.net
呵呵
我也没强迫谁要用我这个啊
而且你能指出强悍的地方在哪里?
估计你代码也没看吧

  回复  引用    
#167楼2009-07-02 14:59 | zhangyuan[未注册用户]
楼主在不在啊?
  回复  引用  查看    
#168楼[楼主]2009-07-02 15:02 | cloudgamer      
@zhangyuan
在?

  回复  引用    
#169楼2009-07-02 15:41 | zhangyuan[未注册用户]
你有没有QQ啊,这个太慢了,我有几个问题想请教一下
  回复  引用    
#170楼2009-07-02 15:54 | zhangyuan
楼主在不在?
  回复  引用  查看    
#171楼[楼主]2009-07-02 15:59 | cloudgamer      
@zhangyuan
工作中,没上q
你问的是这个吧
能不能不用鼠标,加“放大”和“缩小”按钮来进行绽放呢?
那你用按钮点击设置控制层的width和height就行啦

  回复  引用    
#172楼2009-07-02 16:04 | zhangyuan
能不能贴出修改的代码啊,你这个太高深了,现在急需用啊
  回复  引用  查看    
#173楼[楼主]2009-07-02 16:36 | cloudgamer      
@zhangyuan
想要代码的话还是自己分析吧

  回复  引用    
#174楼2009-07-03 14:06 | zhangyuan[未注册用户]
楼主在不在?
  回复  引用  查看    
#175楼[楼主]2009-07-03 14:44 | cloudgamer      
@zhangyuan
还有什么问题?

  回复  引用    
#176楼2009-07-05 15:33 | fzsmllj[未注册用户]
楼主,我用您的这个代码结合另外的一个ImgCropper.ashx文件弄了一个在线用户头像,可以保存到本地文件夹,可是却无法读取这个路径
我现在的思路有两个:
1.能不能让ImgCropper.ashx保存的路径和我上传文件的路径一样?
2.如何读取ImgCropper.ashx保存的路径?

  回复  引用  查看    
#177楼[楼主]2009-07-05 15:43 | cloudgamer      
@fzsmllj
保存文件路径是后台设置的啊
你想保存哪里就设哪里就是了
不懂的话你自己找保存文件的资料看看吧

  回复  引用    
#178楼2009-07-05 16:03 | fzsmllj[未注册用户]
可能是我之前没有说明白,我说的图片的地址 比如:upload/1.jpg 就是如何读取到这个地址?
  回复  引用  查看    
#179楼[楼主]2009-07-05 17:42 | cloudgamer      
@fzsmllj
类似这样咯
http://xxx/upload/1.jpg
做过网站开发都明白吧

  回复  引用  查看    
#180楼2009-07-06 10:57 | chinacto      
谢谢,还有个问题,就是我如果要切图片范围外的怎么办?
  回复  引用  查看    
#181楼[楼主]2009-07-06 11:07 | cloudgamer      
@chinacto
范围外什么意思

  回复  引用  查看    
#182楼2009-07-06 15:06 | chinacto      
比如一个长方型图片我要切成正方型的,但是左右两边还有部分图没有切到,因为正方型比例高度受到限制,不能更宽了.我是可以高度不现在在图片内,拉伸到图片之外,这样宽度才能满足需要,并且之外的部分希望用白色来填充,这样就可以完整的切成正方型图片了.
  回复  引用  查看    
#183楼[楼主]2009-07-06 15:59 | cloudgamer      
@chinacto
实际的切割程序是在后台的
你可以在实际切割的时候设置成需要的效果

  回复  引用  查看    
#184楼2009-07-06 22:31 | chinacto      
我知道,可是前提还是要选择到图片以外的位置啊,目前只能选择到图片边距内的范围啊.我是想选择到边距外的范围
  回复  引用  查看    
#185楼[楼主]2009-07-07 09:08 | cloudgamer      
@chinacto
我这个是自动缩放到适合大小
看SetSize部分
你可以自己修改那部分应该可以做到你那个效果

  回复  引用    
#186楼2009-07-08 21:19 | lc12d[未注册用户]
你好,我用了你的方法,但是在预览时出了问题,预览区随切割区移动显示预览效果,而不像你的预览区固定,请指教
  回复  引用    
#187楼2009-07-08 21:38 | lc12d[未注册用户]
就好像地图固定了,然后在图片上切割显示,切到哪就显示那,不是固定显示在一个地方
  回复  引用  查看    
#188楼2009-07-08 21:43 | lsjwzh      
。。。没仔细看楼主的实现了,不过从中受到了启发。。谢了。
  回复  引用  查看    
#189楼[楼主]2009-07-08 23:02 | cloudgamer      
@lsjwzh
谢谢支持

@lc12d
你还是再仔细研究一下代码吧

  回复  引用    
#190楼2009-07-09 12:53 | lc12d[未注册用户]
var imgic=new Image();
imgic.src=document.getElementById("choosepic").value;
imgic.style.width=document.getElementById(s).width;
imgic.style.height=document.getElementById(s).height;

var lookview= document.getElementById("view").appendChild(imgic);
lookview.style.position="absolute";


lookview.style.clip = "rect(" + pTop + "px " + (pLeft + 100) + "px " + (pTop + 100) + "px " + pLeft + "px)";
lookview.style.top=104;
lookview.style.left=441;


你帮我看看吧,我实在写不出你那样的代码现在,这个就是用来预览的代码,先在js中定义一个Image,(就是被切割的图)然后把它添加到DIV(view)中去,然后切割,可是它切割不是切割出一块图,是切一块,然后再切一块,直到全图显示出来

  回复  引用  查看    
#191楼[楼主]2009-07-09 14:31 | cloudgamer      
@lc12d
切割预览那里我已经详细说明了吧
你还是自己来吧,我实在没空看代码,只能解析一下

  回复  引用    
#192楼2009-07-09 14:59 | lc12d[未注册用户]
终于可以了,谢谢楼主
  回复  引用  查看    
#193楼[楼主]2009-07-09 15:05 | cloudgamer      
@lc12d
那就好了

  回复  引用    
#194楼2009-07-25 12:15 | cfish[未注册用户]
裁剪了之后,怎么保存裁剪的图片呢?
  回复  引用  查看    
#196楼2009-07-27 17:10 | argb      
var BindAsEventListener = function(object, fun) {
var args = Array.prototype.slice.call(arguments).slice(2);
return function(event) {
return fun.apply(object, [event || window.event].concat(args));
}
}

BindAsEventListener(this, this.Start, fun)

这里我不大明白,这里的this.Start有什么用,args应该是[fun]这个数组,
[event || window.event].concat(args)应该得到[event,fun]这个数组,这样的话fun.apply(object, [event || window.event].concat(args))应该是fun.apply(object,[event,fun]),可是fun只需要一个event参数 那个多处来的fun什么用,我搞不明白了 ,请楼主指点迷津?是不是我分析错了?

  回复  引用  查看    
#197楼[楼主]2009-07-27 17:55 | cloudgamer      
@argb
this.Start是要绑定的函数
fun是this.Start的参数
Start: function(e, fun, touch)
就是里面的第二个参数(貌似第三个参数是没用的,我忘记去掉了)

  回复  引用    
#198楼2009-07-30 20:30 | 海寂寞[未注册用户]
感谢楼主,非常好的东西,找了好久终于找到,感谢感谢!

今天下载来捣鼓了半天也没有存到服务器里。希望楼主帮我一下,我业余学习的ASP,对JS不懂。但好像大概估计似乎能看明白一点点,难啊……

//保存图片文件 这句放到哪个文件的哪里?
string filePathAndName = HttpContext.Current.Server.MapPath("img/") + "01.jpg" ;
bmPhoto.Save(filePathAndName, System.Drawing.Imaging.ImageFormat.Jpeg) ;

后面带的分好应该是JS文件里的。但不知到方那个文件里?对JS不懂。非常想知道怎么用这个。生成的新的文件名是否可以放到表单的文本域里?这样方便写入数据库。

在图片切割页面里也提了同样的问题。感谢楼主!

  回复  引用    
#199楼2009-07-30 21:46 | 海寂寞[未注册用户]
终于搞定了,谢谢楼主原创!
  回复  引用    
#200楼2009-07-31 08:53 | 海寂寞[未注册用户]
楼主在吗?有个问题,就是页面必须刷新才能拖得动裁剪框以及其他操作,刚才打开收藏的这个页面也一样,不知道是我电脑问题,还是大家都一样呢?怎么处理?
  回复  引用  查看    
#201楼[楼主]2009-07-31 10:52 | cloudgamer      
@海寂寞
是不是js没载入完

  回复  引用    
#202楼2009-07-31 11:52 | 海寂寞[未注册用户]
谢谢楼主回复!我拷贝地址到IE里打开,或者点击收藏夹里的打开第一次都拖动不了和其他的操作。我看客户端的HTML源文件里有JS代码,和源代码一行一行的对的,没有丢失什么。很奇怪。无论什么时候打开必须要刷新一下才能正常操作。

写入数据库和另存新裁剪过的图片名都解决了,昨天捣鼓了大半夜。呵呵,太谢谢你了!

  回复  引用    
#203楼2009-07-31 12:14 | 海寂寞[未注册用户]
博主:你好!
我试着把试用比例默认使用上,意思就是不让客户自己随意裁剪高宽,必须按照比例缩放。我查找了那个文本域,按照ID找过去,修改了true : false;但好像不管用?能修改吗?在哪里?感谢……

  回复  引用  查看    
#204楼[楼主]2009-07-31 13:48 | cloudgamer      
@海寂寞
Scale: false,//是否按比例缩放
我这里没刷新的情况哦
你下我的实例本地试试

  回复  引用    
#205楼2009-07-31 21:06 | 海寂寞[未注册用户]
感谢博主!
刷新的问题可能是我的机器的事,我上传到服务器用别的机器测试下,已经下载您的实例,问题也找到了的,十分的感谢!


  回复  引用    
#206楼2009-07-31 21:28 | 海寂寞[未注册用户]
博主:发现个新的问题,缩小大图后裁剪的图片好像没有QQ截图的清楚,您试试?这个可以调整参数吗?给您添麻烦了……
  回复  引用  查看    
#207楼[楼主]2009-07-31 21:32 | cloudgamer      
@海寂寞
图片处理是后台的问题了
我只是根据参数用最简单的方法截取,图片处理方面你可以找找其他文章

  回复  引用    
#208楼2009-07-31 21:43 | 海寂寞[未注册用户]
好的,谢谢你博主!

图片保存我是这样实现的:
NewPics 是一个变量,物理路径加文件名,在ASP文件里保存的。
在ASP文件里用这句(bmPhoto.Save(filePathAndName, System.Drawing.Imaging.ImageFormat.Jpeg) ;
)我这里保存不了,就用了自己知道的方法。
'保存被裁剪的图片 后加的 2009-7-30
Jpeg.Save (NewPics)
Jpeg.Close


  回复  引用  查看    
#209楼[楼主]2009-08-01 10:18 | cloudgamer      
@海寂寞
那个貌似是.net的啊
asp用你那个方法就行

  回复  引用    
#210楼2009-08-03 14:42 | 还寂寞[未注册用户]
是的,我用ASP写的。保存清晰度也找到答案了,谢谢博主你的好代码。放到这里测试了,博主在广东?

  回复  引用  查看    
#211楼[楼主]2009-08-03 18:43 | cloudgamer      
@还寂寞
是的在广东

  回复  引用  查看    
#212楼2009-10-18 19:58 | GreatGhoul      
效果是相当的不错,切割得很漂亮。
很欣赏博主自己动手做这个效果,如果懂得了原理,用框架做起来就更得心应手了。期待开发一个jQuery Plugin出来。

  回复  引用    
#213楼2009-10-19 14:42 | virgil_zhy[未注册用户]
楼主,你好,图片的url 是本地图片,图片显示不出来,为什么?
  回复  引用  查看    
#214楼[楼主]2009-10-21 10:04 | cloudgamer      
@virgil_zhy
不支持本地图片

@GreatGhoul
谢谢支持

  回复  引用    
#215楼2009-11-05 17:54 | dragon★龙[未注册用户]
博主 您好!我想问下,我想把选择框定死,也就是选出来的图片大小是我预先设置好的,只让他们拖动不让伸缩,修改哪点程序?
  回复  引用  查看    
#216楼[楼主]2009-11-05 19:37 | cloudgamer      
@dragon★龙
那是不同的效果啊

  回复  引用    
#217楼2009-11-06 10:14 | dragon★龙[未注册用户]
@cloudgamer
那意思是在这个程序上面就没法解决了? 不管怎么说都谢谢您的回答!O(∩_∩)O~

  回复  引用  查看    
#218楼[楼主]2009-11-06 10:26 | cloudgamer      
@dragon★龙
因为是不同的效果,虽然有些相似

  回复  引用    
#219楼2009-11-06 17:31 | dragon★龙[未注册用户]
@cloudgamer
谢谢博主的帮助!呵呵 这个问题我已经解决了,就是设置下var ic = new ImgCropper这里面的一个resize属性,设置为false,就不能改拖动层的大小了!谢谢楼主的博客!呵呵 也真诚邀请您到我的博客做客!很高兴,也很希望你能和您交个朋友!O(∩_∩)O~

  回复  引用  查看    
#220楼[楼主]2009-11-06 17:34 | cloudgamer      
@dragon★龙

是这个意思
呵呵

  回复  引用    
#221楼2009-12-23 09:19 | 正宗[未注册用户]
@cloudgamer
第二张图的妹妹露腚很是好看...

  回复  引用  查看    
#222楼2010-01-15 14:50 | suya.pan      
圆形的图片切割,有办法实现吗?
  回复  引用  查看    
#223楼[楼主]2010-01-15 14:54 | cloudgamer      
@正宗
呵呵

  回复  引用  查看    
#224楼[楼主]2010-01-15 14:58 | cloudgamer      
@suya.pan
圆形的话(或其他形状)一般可以利用半透明的png来做选框
其他就没详细研究过,估计也大同小异

评论共3页: 上一页 1 2 3