H5上传图片之canvas
H5上传图片之canvas,使用canvas处理压缩图片再上传
html代码:
<form action="" method="post">
<dl>
<dd>
<div>
<div id="img_wrap"> </div>
<input type="file" accept="image/jpg,image/jpeg,image/png,image/gif" id="fileImage" multiple="multiple" name="img" style="display:none" />
<a id="upimg" href="javascript:">上传图片</a>
</div>
</dd>
<dd style="margin-top:10px;">
<a id="abtn_submit" href="javascript:">提交</a>
</dd>
</dl>
</form>
js代码:
<script type="text/javascript">
$(function () {
$("#abtn_submit").click(function () {
if ($("input[name='imgs']").length < 1) {
layer.open({
content: '必须上传图片才能提交',
skin: 'msg',
time: 2
});
return;
}
$("form").submit();
});
$("#upimg").click(function () {
$("#fileImage").click();
})
$("#fileImage").change(function () {
$.each($(this)[0].files, function (i, e) {
if (!/image\/\w+/.test(e.type)) {
//请确保文件为图像类型
return;
}
imgHandle(e);
})
})
}); function imgHandle(_file) {
var reader = new FileReader();
reader.readAsDataURL(_file);
reader.onload = function (e) {
var result = e.target.result;
var image = new Image();
image.src = result;
image.onload = function () {
var cvs = document.createElement("canvas");
var scale = 1;
if (this.width > 1000 || this.height > 1000) {
if (this.width > this.height) {
scale = 1000 / this.width;
}
else {
scale = 1000 / this.height;
}
}
cvs.width = this.width * scale;
cvs.height = this.height * scale;
var ctx = cvs.getContext("2d");
ctx.drawImage(this, 0, 0, cvs.width, cvs.height);
var newImageData = cvs.toDataURL(_file.type, 0.8);
var imgdata = "<a href='javascript:' onclick='delimg(this)'><img src=\"" + newImageData + "\" />";
imgdata += "<input type=\"hidden\" name=\"imgs\" value=\"" + newImageData + "\" /></a>";
$("#img_wrap").append(imgdata);
}
}
} function delimg(e) {
layer.open({
content: '您确定要删除此图片吗?',
btn: ['删除', '取消'],
skin: 'footer',
yes: function (index) {
$(e).remove();
layer.close(index);
}
});
}
</script>
后台处理代码:
//有图片时处理如下
string[] imgs = collection.GetValues("imgs");
List<U_Img> uimglist = new List<U_Img>();
int i = 1;
foreach (string imgBase64Str in imgs)
{
int indexOf = imgBase64Str.IndexOf('/') + 1;
string ftype = imgBase64Str.Substring(indexOf, imgBase64Str.IndexOf(';') - indexOf);
string fex = ".jpg";
switch (ftype)
{
case "jpeg":
case "jpg":
fex = ".jpg";
break;
case "png":
fex = ".png";
break;
case "gif":
fex = ".gif";
break;
}
string Base64Str = imgBase64Str.Substring(imgBase64Str.IndexOf(',') + 1);
Base64Str = Base64Str.Trim('\0');
byte[] imgArr = Convert.FromBase64String(Base64Str);
using (MemoryStream ms = new MemoryStream(imgArr))
{
Bitmap bmp = new Bitmap(ms);
string fname = "/timg/" + DateTime.Now.ToString("yyMMddmmHHssffff") + i.ToString() + fex;
string FilePath = Request.MapPath(fname);
bmp.Save(FilePath);
uimglist.Add(new U_Img() { ImgUrl = fname, ImgTime = DateTime.Now });
}
i++;
}
H5上传图片之canvas的更多相关文章
- H5上传图片并使用canvas制作海报
马上就要"十一"国庆节了,又恰逢公司已经三周岁了,所以市场部和产品共同策划了一个"正青春,共成长"的主题代言活动,准备在国庆节以及中秋节期间让公司员工和用户为公 ...
- angular下H5上传图片(可多张上传)
最近做的项目中用到了angular下上传图片功能,在做的过程中遇到了许多问题,最终都得以解决 angular上传时和普通上传时过程差不多,只不过是要不一些东西转化为angular的东西. 1.ng-f ...
- h5上传图片
1.如何在H5上传图片 使用FileReader 2.FileReader接口 传图片我们只用到readAsDataURL 3.FileReader接口事件 传图片我们只用到onload 4.如何使用 ...
- 用H5中的Canvas等技术制作海报
在去年的时候也实现过合成海报的功能,不过当时时间仓促,实现的比较简单. 就一个旋转功能,图片也不能拖动放大,也不能裁剪. 去年的实现可以参考<移动图片操作--上传>和<移动图片操作- ...
- h5上传图片及预览
第一次做图片上传,记录一些问题. 1,图片的base64编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址.而网页上的每一个图片,都是需要消耗一个http请求下载而来的,使用base ...
- H5神器之canvas应用——网页修改保存图片
因为最近项目上的要求,需要在页面中可以对一张图片进行涂改和添加文字,然后再保存到(服务器)本地,因为也是第一次接触这方面的,然后爬网页啊爬网页,之后发现了一款adobe开发的一款插件,适合 Anroi ...
- 关于H5中的Canvas API的探索
Canvas API 是H5中比较炫酷的一部分内容.可以通过它动态的生成和展示图形.图表.图像以及动画.下面我将学习一下Canvas API. 最后有书籍和源码. 一.概述: 1.基本元素: 在网页上 ...
- 从web图片裁剪出发:了解H5中的canvas
本篇内容不针对canvas文档对每个api进行逐个的详解! 本篇内容不针对canvas文档对每个api进行逐个的详解! 本篇内容不针对canvas文档对每个api进行逐个的详解! 重说三,好了,现在进 ...
- H5之画布canvas小记,以及通过画布实现原子无规则运动
我们知道html在h5出之前就仅仅只是一个标签,一个标记,语义化并不强,后来新增的标签如video,audio都是语义化更强(让人一看就懂是什么东西,反正我是这么理解的,一个div不代表着什么),本身 ...
随机推荐
- AspNet MVC中使用Hangfire执行定时任务
Hangfire在Aspnet中执行定时任务: 第一步: NuGet中加入Hangfire包 第二步: 添加Owin的自启动 第三步.Hangfire的后台控制仪表盘默认情况下只能本地访问,外网访问需 ...
- 南邮ctf-web的writeup
WEB 签到题 nctf{flag_admiaanaaaaaaaaaaa} ctrl+u或右键查看源代码即可.在CTF比赛中,代码注释.页面隐藏元素.超链接指向的其他页面.HTTP响应头部都可能隐藏f ...
- python Docker 查看私有仓库镜像
pip 安装: 首先安装epel扩展源: yum -y install epel-release 更新完成之后,就可安装pip: yum -y install python-pip 安装完成之后清 ...
- css点滴3—5种方式实现圆环
使用css实现圆环,最简单的方式就是使用嵌套标签,设置border-radius就可以实现,但是这个是最简单的方式,这篇文章我们介绍5种方式实现圆环. 1.两个标签嵌套 html代码: <div ...
- java操作elasticsearch实现聚合查询
1.max 最大值 //max 求最大值 @Test public void test30() throws UnknownHostException{ //1.指定es集群 cluster.name ...
- Beta冲刺博客汇总(麻瓜制造者)
Beta冲刺博客 Beta冲刺(1/5)(麻瓜制造者) Beta冲刺(2/5)(麻瓜制造者) Beta冲刺(3/5)(麻瓜制造者) Beta冲刺(4/5)(麻瓜制造者) Beta冲刺(5/5)(麻瓜制 ...
- 在win10 64位系统安装 lxml (Python 3.5)
本想直接用pip install lxml 命令安装完事,但是由于安装过程中跟VS的一些东西冲突怎么都安装不上,搜索到以下方法,问题解决. 步骤: 1.下载跟python匹配的.whl 文件(lxml ...
- 【Teradata System】How Teradata uses MPP Systems
内存分配 内存初始化时将分配给操作系统和Vprocs,内存不使用部分的90%做为FSG (File Segment Cache) ,由PDE对FSG进行管理. FSG Cache:缓存常驻内存的dat ...
- 精度 Precision
柏拉图认为,尽管世间万物是不完美的,但存在一种永恒不变的形式,这个形式是完美的,而生命的意义就是让这个世界尽可能的接近这个完美的形式. 怎么理解这句话,和我们今天讲的精度有什么关系.我们先举一个例子, ...
- windows通过node环境搭建安装npm,cnpm,vue-cli
1首先下载node,官网地址:https://nodejs.org/en/ 左边是稳定版,右边是最新版,安装过程一样,我选择的是稳定版. 按照步骤一步一步的安装就行,注意路径就可以了. 友情链接:ht ...