使用canvas实现图片预览、缩放(压缩)以及生成文件下载
参考
https://www.runoob.com/html/html5-canvas.html
https://www.cnblogs.com/yuanzhiguo/p/8288822.html
https://www.cnblogs.com/goloving/p/8260206.html
工作中遇到的一个问题,手机端上传图片出现卡顿,经排查发现是图片过大引起的。参考网上资料,整理出一个图片压缩(缩放)的demo页面。
demo包含图片预览,缩放以及生成文件下载三个功能,放在这里备忘,有需要的朋友可以拿去参考。
canvas-preview-and-zoom.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>canvas 预览和缩放</title>
<style type="text/css">
.button {
display: inline-block;
padding: 0px;
width: 45px;
height: 25px;
line-height: 25px;
text-align: center;
font-size: 16px;
border: solid 1px;
background: #e3e3e3;
}
</style>
</head>
<body>
<div>
<img style="width: 600px; height: 600px;" id="preview">
<img style="width: 300px; height: 300px;" id="target">
</div>
<div>
<input type="file" id="select" style="display: none;">
<label for="select" class="button">选择</label>
<label type="button" id="zoom" class="button">缩放</label>
<label type="button" id="download" class="button">下载</label>
</div>
<script type="text/javascript">
var image = document.querySelector('#preview');
var reader = new FileReader();
// 预览
reader.onload = function(e) {
image.src = e.target.result;
}
// 预览
document.querySelector('#select').addEventListener('change', function(event) {
if (event.target.files.length == 0) {
return;
}
file = event.target.files[0];
if (/^image\//.test(file.type)) {
reader.readAsDataURL(file);
} else {
alert('请选择图片');
}
});
// 缩放
function zoomImage(img, width, height, quality) {
var canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
var context = canvas.getContext('2d');
context.drawImage(img, 0, 0, width, height);
return canvas.toDataURL('image/jpeg', quality);
}
// 缩放
document.querySelector('#zoom').onclick = function() {
var img64 = zoomImage(image, 300, 300, 1);
document.querySelector('#target').src = img64;
};
// 下载
document.querySelector('#download').onclick = function() {
var a = document.createElement('a');
a.href = document.querySelector('#target').src;
a.download = 'zoom.jpg';
a.click();
a.remove();
}
</script>
</body>
</html>

使用canvas实现图片预览、缩放(压缩)以及生成文件下载的更多相关文章
- previewImage.js图片预览缩放保存插件
previewImage.js好用的图片预览缩放保存插件
- html5 图片上传,支持图片预览、压缩、及进度显示,兼容IE6+及标准浏览器
以前写过上传组件,见 打造 html5 文件上传组件,实现进度显示及拖拽上传,兼容IE6+及其它标准浏览器,对付一般的上传没有问题,不过如果是上传图片,且需要预览的话,就力有不逮了,趁着闲暇时间,给上 ...
- H5图片预览、压缩、上传
目标实现: 1.选择图片, 前端预览效果 2.图片大于1.2M的时候, 对图片进行压缩 3.以表单的形式上传图片 4.图片删除 预览效果图: 代码说明: 1.input:file选择图片 <!- ...
- jquery+html5+canvas实现图片 预览 压缩 上传
javascirpt (function($){ $.fn.extend({ aiiUpload:function(obj) { if(typeof obj !="object") ...
- 小程序 canvas实现图片预览,图片保存
wxml 代码: <view class="result-page"> <canvas bindtap="previewImage" canv ...
- js实现图片预览、压缩、上传
先看几个对象:Blob.ArrayBuffer.File.fileReader.formData 详细解释请参考:https://www.cnblogs.com/youhong/p/10875190. ...
- [javascript]——移动端 HTML5 图片上传预览和压缩
在开发移动端web网页中,我们不可避免的会遇到文件上传的功能,但由于手机图片尺寸太大,上传时间过长导致用户体验太差,就需要在上传前对图片进行一定的压缩. 在代码之前,有必要先了解我们即将使用到的几个A ...
- 上传图片转为base64格式预览并压缩图片(不兼容IE9以下浏览器,兼容移动端ios,android)
前些天公司要求在微信移动端做上传图片并预览的功能,要求能够调用摄像头拍照并立即预览. 在网上搜了一些方法,开始自己写了个简单的功能实现代码.结果发现移动端拍照出来的图片动不动就2M+,又因为要批量上传 ...
- 移动端 H5 拍照 从手机选择图片,移动端预览,图片压缩,图片预览,再上传服务器
前言:最近公司的项目在做全网营销,要做非微信浏览器的wap 站 的改版,其中涉及到的一点技术就是采用H5 选择手机相册中的图片,或者拍照,再将获取的图片进行压缩之后上传. 这个功能模块主要有这5点比较 ...
随机推荐
- 在 ubuntu 下如何压缩与解压 7zip 文件。
1. 首先利用 ubuntu 软件中心搜索并下载 7zip.或者在终端中输入:sudo apt-get install p7zip 2. 压缩 3. 解压 谢谢浏览!
- JVM 的垃圾回收器详解
Parallel Scavenge(Paraller):Parallel Scavenge和ParNew关注的点不一样:ParNew关注的是尽可能缩短暂停的时间,Parallel Scavenge关注 ...
- 开发技术--浅谈python基础知识
开发|浅谈python基础知识 最近复习一些基础内容,故将Python的基础进行了总结.注意:这篇文章只列出来我觉得重点,并且需要记忆的知识. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对 ...
- Extjs 树菜单的自动展开数据的请求
今天在做extjs开发的时候,在树菜单上遇到了一个坑,也许是我刚接触extjs 不熟的缘故 问题描述:后台设置的树自动展开,但是在前端总是只显示一条数据,但是数据确实都请求到了. 经过几个小时不屑的努 ...
- Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)
0x00 漏洞描述 Windows系列服务器于2019年5月15号,被爆出高危漏洞,该漏洞影响范围较广如:windows2003.windows2008.windows2008 R2.windows ...
- HandBrake-QuickSync-Mac (内容:QuickSync encoder via VideoToolbox )
来源:https://github.com/galad87/HandBrake-QuickSync-Mac/commit/2c1332958f7095c640cbcbcb45ffc955739d594 ...
- 使用Fiddler监听java HttpURLConnection请求
使用Fiddler监听java HttpURLConnection请求
- PHP 格式化显示时间 date() 函数【转】
date() 函数 功能:用于格式化时间,返回一个字符串. 语法:string date( string format [, int timestamp] ),其中参数 format 表示时间格式化 ...
- 串口 PLC 编程FAQ
1. 不要频繁打开关闭串口,这是个耗时的过程,如果多个工位都争夺串口资源,则会出现卡顿,死锁. 2. PLC 的读写估计100毫秒,如果并发的写,有的写操作会失败,需要Delay或重试. 3. 通常一 ...
- Mac Brew 安装及配置
mac 终端下,执行以下命令,即可安装brew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homeb ...