js实现图片压缩上传

javascript 处理图片压缩、剪切、模糊和上传

最近在研究H5前端图片处理相关技术,方向有图片压缩、裁切、旋转、模糊等,现在已经整理成对应的demo,上传至github。

一:js脚本实现图片压缩 - CompressImageUtiles

特点:

1 体积小,4kb;

2 支持blob格式上传和base64格式上传

原图 5.4MB                                                                                                           

压缩前图片

 压缩后136KB

压缩后

               

用法:

// html
<input type="file" id="input-img">

//引入脚本
<script src="./CompressImageUtiles.js"></script>


<script>
/**
 * 支持blob格式上传和base64格式上传
 * */ 
    let inputDom = document.querySelector('#input-img')
    inputDom.onchange = function(){
        const fileObj = inputDom.files[0];
        _compressAndUploadFile(fileObj);
    }
    function _compressAndUploadFile(file){
        compressImage(file).then(resultObj => {
            let {canvas,blob,base64,fileName,oSize} = resultObj
            if (blob.size > oSize){
                that._uploadFile(file, fileName);
            } else {
            //压缩后比原来小,上传压缩后的
                _uploadFile(blob, fileName)
            }
            // 下载
            downloadImgFromBlob(blob,fileName)
        })
    }
    //上传
    function _uploadFile(file){
        let params = new FormData();
        params.append("file", file);
    }

demo地址:https://github.com/zhangfeng001/compressUtls-demo

ssh:git@github.com:zhangfeng001/compressUtls-demo.git

二:jq插件 实现图片剪切、旋转  - imagecropper

特点:1、炫酷的展现效果,可以完美的应用到项目中,如头像上传前选择区域等

           2、输出多种数据格式,直接浏览器打开HTML查看效果

效果预览:

用法介绍:

1、下载demo 在main.js中看到如下方法,

if (data.method === 'getCroppedCanvas') {
    $('#getCroppedCanvasModal').modal().find('.modal-body').html(result.canvas);
    console.log(result)
}

2、在此方法中可以查看log,拿到多种图片数据类型 有canvas 、base54、blob,选择一种上传即可

demo地址:https://github.com/zhangfeng001/cropper-demo

ssh:git@github.com:zhangfeng001/cropper-demo.git

三:CSS3和canvas实现图片模糊处理 blurify.js

特点:体积小,实现更方便,

效果展示

用法介绍:超级简单

 <div class="blurify-container">
      <img src="./test/miao.jpg" class="img">
      <img data-src="./test/miao.jpg" class="blurify">
      <img src="./test/wang.jpg" class="img">
      <img data-src="./test/wang.jpg" class="blurify">
 </div>
 <script src="dist/blurify.js"></script>
 <script>
        (function () {
            blurify({
                images: document.querySelectorAll('.blurify'),
                blur: 2,     //值为length px
                mode: 'auto', // auto css
            });
        })();
 </script>

demo地址:https://github.com/zhangfeng001/blurify-demo

SSH:git@github.com:zhangfeng001/blurify-demo.git

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
可以通过以下步骤使用 HTML 和 JavaScript 实现图片压缩上传到服务器: 1. 在 HTML 文件中创建一个 input 元素,使用户可以选择要上传图片文件: ```html <input type="file" id="file-input"> ``` 2. 使用 JavaScript 获取用户选择的图片文件,并将其转换为 base64 格式: ```javascript const fileInput = document.getElementById('file-input'); const file = fileInput.files[0]; const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function() { const base64Image = reader.result; }; ``` 3. 使用 JavaScript 创建一个 Image 对象,加载用户选择的图片文件,并在加载完成后将其绘制到一个 Canvas 上: ```javascript const img = new Image(); img.src = base64Image; img.onload = function() { const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); // 设置 Canvas 大小为图片大小 canvas.width = img.width; canvas.height = img.height; // 在 Canvas 上绘制图片 ctx.drawImage(img, 0, 0); // 获取 Canvas 上的压缩后的图片数据 const compressedImage = canvas.toDataURL('image/jpeg', 0.5); }; ``` 在这个例子中,我们将图片压缩为质量为 50% 的 JPEG 格式。 4. 创建一个 XMLHttpRequest 对象,将压缩后的图片数据作为请求体发送到服务器: ```javascript const xhr = new XMLHttpRequest(); xhr.open('POST', '/upload'); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send(`image=${encodeURIComponent(compressedImage)}`); ``` 在这个例子中,我们将压缩后的图片数据作为 image 参数发送到服务器。 完整的 HTML 和 JavaScript 代码如下: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>图片上传</title> </head> <body> <input type="file" id="file-input"> <button id="upload-btn">上传</button> <script> const fileInput = document.getElementById('file-input'); const uploadBtn = document.getElementById('upload-btn'); fileInput.addEventListener('change', function() { const file = fileInput.files[0]; const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function() { const base64Image = reader.result; const img = new Image(); img.src = base64Image; img.onload = function() { const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); // 设置 Canvas 大小为图片大小 canvas.width = img.width; canvas.height = img.height; // 在 Canvas 上绘制图片 ctx.drawImage(img, 0, 0); // 获取 Canvas 上的压缩后的图片数据 const compressedImage = canvas.toDataURL('image/jpeg', 0.5); uploadBtn.addEventListener('click', function() { const xhr = new XMLHttpRequest(); xhr.open('POST', '/upload'); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send(`image=${encodeURIComponent(compressedImage)}`); }); }; }; }); </script> </body> </html> ``` 请注意,这只是一个简单的示例,实际应用中还需要考虑更多的因素,例如图片大小限制、上传进度显示、错误处理等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

锋小张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值