HTML5联合canvas实现图片压缩


本文摘自PHP中文网,作者零到壹度,侵删。

这次给大家带来HTML5联合canvas实现图片压缩,主要以代码的形式体现,下面就是实战案例,一起来看一下。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

<!DOCTYPE html>

<html>

<head>

 <meta charset="UTF-8">

 <meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1'>

 <title>lianxi </title>

 <style type="text/css">

    </style>

</head>

<body>

    <form>

 名字:<input type="text " name = 'username' id = 'username'/>

 上传:<input type="file" name = 'fileimage' id = 'fileimage' />

 </form>

 <button>button</button>

 <script>

 var file = document.querySelector('#fileimage')

 var username = document.querySelector('#username')

 var canvas = document.createElement('canvas');

 var span = document.createElement('span')

 var formData = new FormData()

 file.addEventListener('change',function() {

 //实现的原理的new formData()然后把这个formData 用ajax传进去

 span.innerHTML = '预览图加载中...'

 document.body.appendChild(span)

 console.log(file.files[0])

 username.value ? formData.append('username',username.value) : null;

 resize(file.files[0]);

 })

 //上传前的图片压缩

 function resize(file) {

 var reader = new FileReader()

 reader.readAsDataURL(file)

 var img = new Image()

 reader.onload = function (e) {

 // this.result就是图片的base64地址信息

 img.src = this.result;

 }

  

 var context = canvas.getContext('2d');

 var gif = document.createElement('img')

  

 // base64地址图片加载完毕后

 img.onload = function () {

 // 图片原始尺寸

 //定义画布的大小

 if (img.width > 300 || img.height > 300) {

 if (img.width > img.height) {

 canvas.width = 300

 canvas.height = img.height / img.width * 300

 }

 else {

 canvas.height = 300

 canvas.width = img.width / img.height * 300

 }

 }

 //从那里开始截取图片

 context.drawImage(img, 0, 0, canvas.width, canvas.height)

 /*第一个参数是创建的img对象;第二个参数是左上角坐标,后面两个是画布区域宽高*/

 //压缩后的图片base64 url

                /*canvas.toDataURL(mimeType, qualityArgument),mimeType 默认值是'image/jpeg';

                 * qualityArgument表示导出的图片质量,只要导出为jpg和webp格式的时候此参数才有效果,默认值是0.92*/

 //var newUrl = canvas.toDataURL('image/jpeg', 0.92);//base64 格式

 document.body.removeChild(span)

 document.querySelector('body').appendChild(canvas)

 };

 }

 //这是上传的

 document.querySelector('button').addEventListener('click',function(){

 canvas.toBlob(function(blob){

 var xhr = new XMLHttpRequest()

 formData.append('fileimage', blob,'002.webp')

 xhr.open('POST', 'test.php', true)//默认true 为异步

 //上传进度

 xhr.upload.addEventListener('progress',function (e) {

 console.log('上传进度为:'+ (e.loaded/e.total*100).toFixed(2)+'%')//多次出现

 // event.total是需要传输的总字节,event.loaded是已经传输的字节

 })

 xhr.upload.addEventListener('loadstart', function () {

 console.log('上传开始')//只出现一次

 })

 xhr.onreadystatechange = function () {

 if (xhr.readyState === 4) {

 if (xhr.status >= 200 && xhr.status <300 || xhr.status == 304) {

 console.log(JSON.parse(xhr.responseText))//成功后的返回值

 }

 else {

 console.log("Request was unsuccessful: " + xhr.status);

 }

 }

  

 }

 //xhr.setRequestHeader("Content-type", "multipart/form-data");

 xhr.send(formData)

 }, 'image/webp',0.9)

 })

 </script>

</body>

</html>

需要注意的是后端需要加上header("Access-Control-Allow-Origin:*");以实现跨域

相关链接:

html5+canvas实现图片的压缩上传

HTML5 Canvas 实现本地压缩图片

HTML5 canvas实现图片拉伸、压缩与裁剪

以上就是HTML5联合canvas实现图片压缩的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

详解7款绚丽的jquery/html5动画及源码

如何自定义video播放器样式?

html5怎么使音乐停止

利用html5以及canvas实现支持签名插件的方法

html5地理定位与第三方工具百度地图的应用

了解一下html5中新增加的标签

用html5实现一个简单的钟表外观

最全的html5标签

html5之前的html版本是什么

html5怎么嵌入视频

更多相关阅读请进入《canvas》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...