还在继续奋斗那个HTML编辑器。发现碰到很多问题,觉得WEB开发原来也是那么有深度,并不像在学校的时候觉得的那样比桌面开发要低级。
今天要要做的就是插入图片的功能。既然是在HTML编辑器中用,那么上传图片当然是要无刷新的。首先我就想到了AJAX,但是AJAX没有办法实现表单上传啊,虽然网上也有AJAX实现上传的例子,但是感觉不太实际而且不通用,只好采取第二种方案,用IFrame实现。
最开始的做法是服务端在接受完文件之后,将文件的路径放在一个数组中,然后用response写一段调用父帧的js语句:
//服务端response写的js语句
var filenames = ["upload/upload_1.jpg","upload/upload_2.jpg"];
parent.callback(filenames);
//父帧的callback方法
function callback(filename){
//用循环呈现filenames,可以用DOM也可以用innerHTML,略
}
好了,就这么简单,无刷上传并显示就这么完成了,但是如果要上传的是1024*768或者更大的1600*1200的图片,显示出来那整个页面就都是图片了。这作为一个HTML编辑器显然是不可行的,那就需要缩略显示了。
上网搜了一下,用js实现缩略图,看大部分都是用这样的方法实现的,感觉还不错,保持了长宽比。
function scale(o){
var maxW = 200;//限制的最高长宽
var maxH = 200;
var width = o.offsetWidth;
var height = o.offsetHeight;
var wdh = width/height;
var hdw = height/width;
//本来这里还要加个if(o.complete)来判断图片是不是已经加载完,但是在我的IE里每次都是false,所以就没加,但是好像对结果没什么影响,待检测!
if(width>maxW){
width = maxW;
height = width*hdw;
}
if(height>maxH){
height = maxH;
width = height*wdh;
}
o.width = width;
o.height = height;
}
但是在什么时候对图片进行缩放呢,这个我可是大费脑筋了。最后还是选择用onload来进行缩放。
{
....
var img = new Image();
img.src = filenames[i];
img.onload = new function(){
scale(img);
};
....
}
结果发现在ff里什么都显示不出来,在ie显示出来了但是没有缩略,后来网上找了一下,说是缓存问题,要把onload放在src前面,照做了发现问题照旧。后来试了一下用innerHTML发现可以了,小小开心了一把。但是还是不完美,每次都要闪一下才会出现缩略图,因为首先显示大图然后再变小的。于是尝试先把图片显示出来,缩小之后再显示,但是用了display="none"发现在试图获取img的长宽是都为0(这是正常的)。又用了visibility="hidden",发现也没用,因为visibility="hidden",其实img还是占据着它的位置。
实在是没辙了,脑袋中灵光一闪,可以现在IFrame里显示图片得到长宽之后再在父帧中显示缩略图。
于是用response直接写html代码:
<img src='upload/upload_37607.jpg' onload='parent.scale(this);'>
<img src='upload/upload_37608.jpg' onload='parent.scale(this);'>
<img src='upload/upload_37609.JPG' onload='parent.scale(this);'>
<img src='upload/upload_37610.jpg' onload='parent.scale(this);'>
<img src='upload/upload_37611.jpg' onload='parent.scale(this);'>
然后在scale中往父帧中放图片,终于“完美”实现,不过还是很粗糙啊,以后有空再想想有没有更好的办法吧。
PS:有个要注意的地方是隐藏的IFrame不能用"display:none;"而要用"visibility="hidden";width=1;height=1;",不然得到的img的长宽还是0,width和height为0的话,得到的img的长宽也是0。
分享到:
相关推荐
在PHP开发中,多图片上传并显示缩略图是一个常见的需求,主要应用于各种网站的后台管理系统,例如博客、电商网站等。...通过学习和理解这些代码,开发者可以掌握如何在实际项目中实现多图片上传并显示缩略图的功能。
在图片预览和缩略图生成中,我们可以利用Canvas的drawImage方法将图片加载到Canvas上,然后通过调整Canvas的宽度和高度来生成缩略图。 3. **Data URL**:Data URL是一种内联资源表示方式,可以直接在页面中嵌入图像...
此外,为了提供用户友好的反馈,我们可能还需要将处理结果返回到前端,例如显示一个消息告知用户图片是否成功上传和生成缩略图。这可以通过Spring MVC的ModelAndView或者ResponseBody来实现。 ```java return ...
综上所述,利用HTML5的File API和Canvas,我们可以在移动端实现图片上传时的本地预览和缩略图生成,提升用户交互体验。在实际项目中,还可以结合其他技术如Promise、async/await等优化代码结构,提高代码可读性和...
### Java 上传图片生成缩略图的知识点解析 在现代Web开发中,处理图像是一项常见的需求,尤其是在涉及用户上传图片的应用场景中。本篇文章将基于提供的代码片段详细讲解如何使用Java来实现上传图片并自动生成缩略图...
"上传文件(图片缩略图上传带进度显示)"这一主题聚焦于如何在上传过程中提供友好的用户体验,包括实时的进度指示以及预览图片的缩略图功能。下面将详细探讨这一领域的关键知识点。 首先,大文件上传通常涉及到分块...
"上传图片(缩略图)"这个标题和描述提示我们,这里涉及的技术点主要是图片上传以及生成缩略图的过程。下面我们将详细探讨这两个核心知识点。 1. 图片上传: - **表单提交**:在HTML中,通常使用`...
为了在前端展示图片,可以创建一个JSP页面,用HTML和JavaScript来显示缩略图。这里我们可以使用jQuery的FancyBox插件,它提供了优雅的图片预览效果。在WebRoot目录下,创建一个JSP文件,比如`image.jsp`,包含以下...
总结起来,"Android中一个关于图片上传和缩略图查看的Demo"涵盖了从图片选择、处理、上传到缩略图显示的关键技术。它利用了Android SDK中的Bitmap类,以及第三方库如OkHttp、Retrofit、Glide或Picasso,实现了高效且...
### 上传图片并生成高清晰缩略图 #### 背景与概述 在Web开发领域,特别是ASP.NET应用程序中,上传图片并自动生成高质量缩略图是一项常见且实用的功能。这种需求通常出现在用户头像上传、产品图片展示等场景中。...
在这个"asp无组件上传图片,aspjpeg生成缩略图和添加水印.zip"压缩包中,包含了解决这一问题的代码示例。主要涉及到以下几个核心知识点: 1. **图片上传**: ASP可以通过表单提交实现图片文件的上传。用户选择本地...
在实际应用中,用户可能会通过表单上传图片,此时需要处理文件流,读取上传的图片数据,并按上述步骤生成缩略图。文件上传通常涉及`HttpPostedFileBase`类,以及`SaveAs`方法来保存上传的文件。 总结来说,.NET中的...
在Java服务器页面(JSP)中,上传图片并生成缩略图是一项常见的需求,尤其在构建网站或Web应用时。这个过程涉及到多个步骤,包括文件上传、图片处理和存储。以下将详细介绍如何实现这一功能。 1. **文件上传**: -...
上传图片、缩略图 无刷 兼容FF、ie6 7 8 同比例缩放
FLASH+PHP上传,返回值到当前页面,可以自定义传送值到PHP上传处理的页面,这样就可以定义接受图片...update.php逻辑处理,file_upload.php上传类,可定义源文件名或者随机命名和缩略图大小. 没分了,来赚点积分花花
在"Extjs图片上传 带过滤和缩略图"这个主题中,我们将深入探讨如何使用ExtJS实现图片上传功能,同时结合过滤和缩略图显示,以提升用户体验。 1. **图片上传组件**: 在ExtJS中,可以使用`Ext.form.FileField`或`...
然而,原生的Windows操作系统并不直接支持TGA格式的缩略图显示,导致用户在资源管理器中无法预览TGA文件的内容,给管理和查看这类图像带来不便。 "**TGA缩略图显示插件**"就是为了解决这个问题而设计的。这个小插件...
在这个特定的场景中,"jSP上传图片生成缩略图"是一个常见的需求,尤其在网站开发中,如论坛、博客或电商网站等,用户可能需要上传图片,而为了提高页面加载速度和优化用户体验,通常会生成缩略图作为预览。...
在处理图像应用时,我们可能需要在一个列表中显示图片的缩略图,这在设计用户界面时能够提供更好的视觉体验。本篇文章将深入探讨如何使用Qt的QListWidget来实现缩略图列表显示图片的功能。 首先,我们需要理解...
从网上拷贝下来的一个js显示缩略图的功能,改了一下,大家下载下来可根据自己需求去改。 <body> <div id="preview_wrapper"> <div id="preview_fake"> (this,200,200)"/> </div> </div> (this,'...