前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Javascipt 上传图片之前修改尺寸和预览

Javascipt 上传图片之前修改尺寸和预览

作者头像
fanzhh
发布于 2019-08-20 03:31:17
发布于 2019-08-20 03:31:17
1.4K00
代码可运行
举报
运行总次数:0
代码可运行

在做的项目(前端React+后端Django Rest)中,前端Form中有多个File Input,用户可选择上传图片。测试中发现,如果用户选择多个图片且图片较大,上传往往崩溃,这很可能是因为我的服务器配置太低。项目对图片尺寸没有过高要求,因此增加上传前压缩图片功能,既节省带宽,又缩短用户等待时间。一番摸索后,代码如下,贴在这儿一是备忘,二是帮助万一遇到同样问题的同学。

render():

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
render(){
  return(
    ...
    <label>Image1
    <input type="file" id="img1" on Change={this.handleChange} />
    </label>
    <br/>
    <img id="img1_preview" src="" height="100" />
    <label>Image2
    <input type="file" id="img2" on Change={this.handleChange} />
    </label>
    <img id="img2_preview" src="" height="100" />
    ...
  )
}

function():

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
handleChange(event) {
  ...
  /* handle all image input change */
  if (event.target.id.includes('img')) {
      var field = event.target.id;
      var preview = document.getElementById(field + '_preview');
      var file = event.target.files[0];
      var reader = new FileReader();
      reader.onload = function(readerEvent) {
      var image = new Image();
      image.onload = function(imageEvent) {
          var canvas = document.createElement('canvas');
          var max_size = 800; /* max size */
          var width = image.width, height = image.height;
          /* alter image size */
          if (width > height) {
              if (width > max_size) {
                  height *= max_size / width;
                  width = max_size;
              }
          } else {
              if (height > max_size) {
                  width *= max_size / height;
                  height = max_size;
              }
          }
          /* draw image on canvas */
          canvas.width = width;
          canvas.height = height;
          canvas.getContext('2d').drawImage(image, 0, 0, width, height);
          var dataUrl = canvas.toDataURL('image/jpeg');
          /* canvas to blob */
          canvas.toBlob(function(blob){
              this.setState({[field]:blob});
              var reader1 = new FileReader();
              reader1.addEventListener("load",function(){
                  preview.src = dataUrl;
              }, false);
              reader1.readAsDataURL(blob);
          });
      }
      image.src = readerEvent.target.result;
    }
    reader.readAsDataURL(file);
  }

参考stackoverflow上的这个帖子。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.09.21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
E3 2017第二发:做不了最强王者的你,何不另寻它欢
每年5月的第三周,对于游戏玩家和游戏厂商而言意义非凡,因为这时的美国洛杉矶会展中心通常正在举行E3。作为世界上电子游戏界最大的年度商业化展览,各大游戏厂商不约而同地在E3上展示出其即将上市的游戏,或者
VRPinea
2018/05/16
6970
E3 |大厂纷纷“圆饼”,谷歌Stadia平台能否将游戏行业带入“云”时代?
本届E3展会尽管缺少了业界大佬索尼,但依旧干货满满。微软全新世代主机公布、《赛博朋克2077》和《最终幻想7重制版》相继公布发售日期,就连时代的眼泪—《博德之门3》也宣布将进行开发。话不多说,让我们一起来看看吧。
VRPinea
2019/06/20
6960
E3 |大厂纷纷“圆饼”,谷歌Stadia平台能否将游戏行业带入“云”时代?
E3 2017开幕第二日:大IP+大制作下的游戏大作,要怎样才能俘获玩家的心
在连续三天,各游戏大厂接连不断的E3 2017展前发布会后,E3终于在昨日正式拉开帷幕。与往年E3展会仅面向业内人士和媒体开放不同,E3 2017允许普通玩家购票入场体验。从展会现场的情况来看,每个展
VRPinea
2018/05/16
8610
E3 2018前瞻丨COD及战地5将加入“吃鸡”,古墓三部曲或迎来完结
今日,万代南梦宫宣布,PSVR独占新作《皇牌空战7:未知空域》将缺席E3 2018展会。对于空战迷来说,这可能有些遗憾。其实这已经不是该作第一次宣布跳票,《皇牌空战7:未知空域》最早亮相于2015年1
VRPinea
2018/06/11
6740
Gamescom 2018第二弹|《鬼泣5》、《生化危机2:重制版》,以及“有生之年系列”《骑马与砍杀2》齐亮相!
各大游戏厂商的表现不一,Capcom演示的《鬼泣5》和《生化危机2》,确实相当良心!
VRPinea
2018/09/28
7330
TGS 2017前瞻:日系大厂雄起,撑起TGS半边天
这两天,日本东京千叶幕张展览馆附近人头攒动,聚集着一大批游戏死忠粉们。他们或三五成群,讨论着心爱游戏的最新动态;或独自一人,缩在一旁默默玩着手游...是的,没错!作为目前亚洲最顶级的游戏展会,东京电玩
VRPinea
2018/05/17
8550
8.22 VR扫描:德国科隆游戏展今日开幕,EA、暴雪携重量级大作亮相
三星视觉辅助应用Relumino登陆Gear VR 日前,三星科技C-lab实验室宣布,视觉辅助应用Relumino将支持Gear VR,适配机型为三星S7、S7edge、S8和S8 plus等。Relumino将在以下几点帮助视障患者:放大或减小图像,调整亮度和清晰度,突出物体的轮廓,调整事物的对比度,增强隧道视野。 VRPinea独家点评:应用是好应用,但是不能带出门。 联想发布三款VR-ready PC 近期,联想发布了三款VR-ready PC主机。其中旗舰款
VRPinea
2018/05/17
6500
科隆游戏展进行时:热度有而爆点少
今天,是2017德国科隆国际游戏展举办的第二日。作为欧洲规模最大的游戏展会,各大厂商纷纷选择在这个重要的舞台上,发布一系列重量级的内容。EA、暴雪、微软等传统游戏大厂投下了一个个深水炸弹,引爆全场。而
VRPinea
2018/05/17
7870
游戏盘点丨除了《辐射4 VR》,还有哪些著名的IP续作?
2017年年底,EA因为《星球大战:前线2》内购方面的做法过于“恶劣”,遭到了玩家们一致的口诛笔伐。之后这甚至直接影响到了EA 第四季度的财报,《星球大战:前线2》也成为了游戏史上亏损金额第二高的游戏
VRPinea
2018/05/18
8190
PAX East 2019|索尼展示PS VR游戏《Golem》,《无主之地》全员回归!
当地时间3月28日,PAX East 2019已于波士顿会展中心正式开幕了!这一届还恰逢PAX East十周年,着实吸引了不少游戏厂商!
VRPinea
2019/04/28
6650
PAX East 2019|索尼展示PS VR游戏《Golem》,《无主之地》全员回归!
6.12 VR扫描:AR商业互动开发商明镜科技完成数千万元A轮融资
成都明镜科技完成数千万元A轮融资 近日,成都明镜视觉科技有限公司(DDD.)对外宣布已获得数千万人民币A轮融资,投资方为华盖资本。据悉,成都明镜科技是一家视觉互动创意云SaaS服务提供商,同时也是20
VRPinea
2018/05/15
8100
致游戏者!你们是先锋、是梦想家~~
👆点击“博文视点Broadview”,获取更多书讯 在信息时代,客观障碍已不复存在,所有的障碍都是主观上的。如果你想动手开发什么全新的技术,你不需要几百万美元的资金,你只需要在冰箱里摆满比萨和可乐,再有一台便宜的计算机,和为之献身的决心。我们在地板上睡过,我们从河水中趟过。 ——DOOM启世录 这个世界的游戏分为两种:一种是虚拟中的,一种是现实生活中的。 相信每个人都有无法实现的梦想。 有些梦想需要太多时间和金钱,譬如开跑车驰骋,驾飞机翱翔。 有些梦想太过于离谱,譬如在太空与异形进行星球大战,与吸血鬼拼
博文视点Broadview
2023/05/06
2580
致游戏者!你们是先锋、是梦想家~~
E3 2017正式开幕:怒刷存在感的任天堂,这次终于来真的了
一年一度的游戏玩家狂欢盛宴E3 2017,于今日正式开幕。而任天堂的发布会一经召开,可以说几乎承包了今日展会的全部亮点,涵盖了其各个领域的新旧IP。而众多新游戏的推出,也为当前稍显单薄的 Ninten
VRPinea
2018/05/16
8240
逐渐炎热的6月里,VR行业也在蒸腾而上
(VRPinea 7月2日讯)2020年的6月与往年有很大的不同,大概是因为高考受疫情影响延期至7月,亦或是各大高校在线毕业的措施使无数毕业生无法回校再度相聚,毕业季的氛围平淡许多。回归VR,因疫情影响,2020年上半年整体呈现疲态,好在6月苹果与索尼分别召开的WWDC 2020及PS5线上发布会在平静的湖面上投下了一块巨石,并激起了层层波浪。
VRPinea
2020/07/06
7410
逐渐炎热的6月里,VR行业也在蒸腾而上
终于敲定了!索尼PS VR将于10月13日正式发售
索尼在今天的E3展前发布会上终于确认了旗下的PS VR的发布时间和售价,等了快有一个世纪的游戏玩家总算有个盼头了。这款头显将于10月13日首先在北美上市发售,价格为399美元(不包含摄像头、控制器)。
镁客网
2018/05/28
4960
E3 2018任天堂专场丨饕餮盛宴《任天堂明星大乱斗》重磅来袭!
每年 E3 游戏展前发布会,任天堂总是最晚登场的厂商。前两天召开的几家厂商的E3展前发布会,可以说内容十分劲爆,各种大作层出不穷。
VRPinea
2018/07/30
5480
E3 2018任天堂专场丨饕餮盛宴《任天堂明星大乱斗》重磅来袭!
PS VR收入超20亿美元,Xbox Series X真的不打算拥抱VR么?
(VRPinea 7月13日讯)索尼官方数据显示,截至2019年底,PS4(包括PS4和PS4 Pro)的销量为1.06亿部。与此同时,微软已经有一段时间没有公布Xbox One的销售数据了(近期预估为5000万台左右)。对于在两者之间徘徊的游戏玩家,PS4对VR的支持是他们选择这款主机的理由之一。而这种情况或许还将继续下去,毕竟索尼已确认PS5将继续支持PS VR,而微软则已明确表示“VR不是Xbox系列X的优先选择”。
VRPinea
2020/07/14
8690
PS VR收入超20亿美元,Xbox Series X真的不打算拥抱VR么?
一周VR热点回顾:不谈恋爱不玩VR游戏的你,活得如同一条咸鱼
本周的上海格外热闹,各种coser游走在上海新国际博览中心周围,一群群的游戏死忠粉们聚成一团,谈论着刚刚在展会上体验的各种游戏...本届CJ上,要说风头最甚的游戏,莫属VR游戏了,占据了CJ的半壁江山
VRPinea
2018/05/16
1K0
SDCC 2018朝圣日|从DC、福斯、索尼到VR,各种漫展专场一应俱全!
一年一度的漫画、游戏和影视剧铁粉们的“朝圣日”又双叒叕到了!还是在素有科幻动漫和影视迷圣地之称的圣地亚哥,第49届Comic-Con圣地亚哥动漫展(San Diego International Comic-Con,简称SDCC)目前已接近尾声(美国当地时间19日-22日)!
VRPinea
2018/07/26
9660
SDCC 2018朝圣日|从DC、福斯、索尼到VR,各种漫展专场一应俱全!
B社出招!《辐射4》VR版将亮相今年E3
自从Bethesda在去年的E3体验日里推出了《辐射4》的VR版试玩,该作就迅速地成为了玩家们最为值得期待的VR游戏。其实,《辐射4》的VR版试玩是一个非常简短的版本,制作也很粗糙。但当时B社的Pet
VRPinea
2018/05/15
7650
推荐阅读
E3 2017第二发:做不了最强王者的你,何不另寻它欢
6970
E3 |大厂纷纷“圆饼”,谷歌Stadia平台能否将游戏行业带入“云”时代?
6960
E3 2017开幕第二日:大IP+大制作下的游戏大作,要怎样才能俘获玩家的心
8610
E3 2018前瞻丨COD及战地5将加入“吃鸡”,古墓三部曲或迎来完结
6740
Gamescom 2018第二弹|《鬼泣5》、《生化危机2:重制版》,以及“有生之年系列”《骑马与砍杀2》齐亮相!
7330
TGS 2017前瞻:日系大厂雄起,撑起TGS半边天
8550
8.22 VR扫描:德国科隆游戏展今日开幕,EA、暴雪携重量级大作亮相
6500
科隆游戏展进行时:热度有而爆点少
7870
游戏盘点丨除了《辐射4 VR》,还有哪些著名的IP续作?
8190
PAX East 2019|索尼展示PS VR游戏《Golem》,《无主之地》全员回归!
6650
6.12 VR扫描:AR商业互动开发商明镜科技完成数千万元A轮融资
8100
致游戏者!你们是先锋、是梦想家~~
2580
E3 2017正式开幕:怒刷存在感的任天堂,这次终于来真的了
8240
逐渐炎热的6月里,VR行业也在蒸腾而上
7410
终于敲定了!索尼PS VR将于10月13日正式发售
4960
E3 2018任天堂专场丨饕餮盛宴《任天堂明星大乱斗》重磅来袭!
5480
PS VR收入超20亿美元,Xbox Series X真的不打算拥抱VR么?
8690
一周VR热点回顾:不谈恋爱不玩VR游戏的你,活得如同一条咸鱼
1K0
SDCC 2018朝圣日|从DC、福斯、索尼到VR,各种漫展专场一应俱全!
9660
B社出招!《辐射4》VR版将亮相今年E3
7650
相关推荐
E3 2017第二发:做不了最强王者的你,何不另寻它欢
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档