Rumah hujung hadapan web tutorial js JS和Canvas实现图片的预览压缩和上传功能

JS和Canvas实现图片的预览压缩和上传功能

May 28, 2018 am 10:30 AM
canvas javascript pemampatan

这篇文章主要介绍了JS和Canvas实现图片的预览压缩和上传功能,实现此功能大概有两步,第一步用户选择需要上传的图片,第二步获取图片资源压缩预览上传,具体实现代码大家参考下本文

先来一张效果图,压压惊

第一步:用户选择需要上传的图片

<input type="file" accept="image/*" type="file"" name="imageFile" onchange="upload()">
Salin selepas log masuk

在选定了图片后 upload 函数将被触发,我们需要在这个函数中,获取到图片的资源,将它压缩并利用canvas绘制出来,若需要上传到服务器,也可以利用ajax或者其他方式上传。

第二步:获取图片资源压缩预览上传

function upload() { 
  let file = document.querySelector('input[type=file]').files[0] // 获取选择的文件,这里是图片类型 
  let reader = new FileReader() 
    reader.readAsDataURL(file) //读取文件并将文件以URL的形式保存在resulr属性中 base64格式 
    reader.onload = function(e) { // 文件读取完成时触发  
      let result = e.target.result // base64格式图片地址  
      var image = new Image() image.src = result // 设置image的地址为base64的地址  
      image.onload = function(){  
        var canvas = document.querySelector("#canvas");  
        var context = canvas.getContext("2d");  
        canvas.width = image.width; // 设置canvas的画布宽度为图片宽度  
        canvas.height = image.height;  
        context.drawImage(image, 0, 0, image.width, image.height) // 在canvas上绘制图片  
        let dataUrl = canvas.toDataURL('image/jpeg', 0.92) // 0.92为压缩比,可根据需要设置,设置过小会影响图片质量  
                                  // dataUrl 为压缩后的图片资源,可将其上传到服务器  
      }  
    } 
 }
Salin selepas log masuk

现在我们来比较一下图片是否成功压缩:

原图大小: 

  

压缩比设置为0.92:

压缩比设置为0.52

乍一看,你是不是觉得很奇怪,为什么设置了缩放比为0.92,图片居然比原图大?其实图片通过base64编码后都会变的比原图大,具体原因可以查阅base64的编码原理。如此看来,我们已经成功压缩了图片!

注意点:canvas在IE9以下不支持;大图片尽量不要使用base64,影响响应速度。

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

JavaScript分步实现一个出生日期的正则表达式

使用Vue开发动态刷新Echarts组件的教程详解

bootstrap中selectpicker下拉框使用方法实例

Atas ialah kandungan terperinci JS和Canvas实现图片的预览压缩和上传功能. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Tetapan kadar mampatan maksimum 7-zip, bagaimana untuk memampatkan 7zip kepada minimum Tetapan kadar mampatan maksimum 7-zip, bagaimana untuk memampatkan 7zip kepada minimum Jun 18, 2024 pm 06:12 PM

Tetapan kadar mampatan maksimum 7-zip, bagaimana untuk memampatkan 7zip kepada minimum

Petua untuk mengurangkan saiz fail rakaman skrin win10 Petua untuk mengurangkan saiz fail rakaman skrin win10 Jan 04, 2024 pm 12:05 PM

Petua untuk mengurangkan saiz fail rakaman skrin win10

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Jan 05, 2024 pm 06:08 PM

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP

Aliran pembangunan dan prospek masa depan Kanvas dalam sektor pendidikan China Aliran pembangunan dan prospek masa depan Kanvas dalam sektor pendidikan China Jan 17, 2024 am 10:22 AM

Aliran pembangunan dan prospek masa depan Kanvas dalam sektor pendidikan China

Bagaimana untuk mendapatkan kod status HTTP dalam JavaScript dengan cara yang mudah Bagaimana untuk mendapatkan kod status HTTP dalam JavaScript dengan cara yang mudah Jan 05, 2024 pm 01:37 PM

Bagaimana untuk mendapatkan kod status HTTP dalam JavaScript dengan cara yang mudah

Bagaimana untuk memahami dengan betul perbezaan antara pembungkusan dan pemampatan dalam Linux Bagaimana untuk memahami dengan betul perbezaan antara pembungkusan dan pemampatan dalam Linux Feb 20, 2024 pm 05:33 PM

Bagaimana untuk memahami dengan betul perbezaan antara pembungkusan dan pemampatan dalam Linux

winrar 64-bit-Bagaimana untuk menyahmampat winrar? winrar 64-bit-Bagaimana untuk menyahmampat winrar? Mar 18, 2024 pm 12:55 PM

winrar 64-bit-Bagaimana untuk menyahmampat winrar?

Bagaimana untuk memampatkan folder dan menghantarnya dalam wps Bagaimana untuk memampatkan folder dan menghantarnya dalam wps Mar 20, 2024 pm 12:58 PM

Bagaimana untuk memampatkan folder dan menghantarnya dalam wps

See all articles