angular 图片裁剪cropperjs 应用及在iOS 图片旋转90度的问题并压缩图片

攻防实战之Confluence后利用 这边管理员密码是密文加密在数据库中,解不开,因此解决的思路是将管理员用户密码修改为已知明文密码的密文(这边不能直接在数据库中添加字段,关系型数据库在单表中添加一条字段可能会出现问题),登录上后台以后,添加用户并加入管理员组,最后将管理员密码还原。Confluence的后利用主要问题在于在Linux中搭建时,默认是Confluence用户权限,如下图所示,而confluence在linux中是没有写权限的,这也就是为什么有些人发现可以执行命令但是shell写不进去。至此admin的密码被改为了123123。 阅读详情

angular图片裁剪cropperjs应用 base64转图片使用exif-js旋转图片 压缩图片

为什么需要压缩图片呢?

当你进行cropper裁剪图片的时候需要用canvas重新绘制你的图片进行裁剪,由于图片较大绘制很慢,用户操作性不好,ios也会出现卡顿状况

为什么用exif-js旋转

html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题;
犹豫苹果手机拍照后的图片比较大,当图片大于2M时,图片会自动旋转90度,当你切图的时候会生成一个旋转后的图片。为了规避此问题我们需要对照片从新进行canvas。
安卓手机 3星也存在此问题

上代码

官网说的很明确 ,npm install 或者 bower install 引入文件。然后就是应用。我第一开始使用import引入,没有找到什么问题(不知道是我的问题还是框架的问题),总是说cropper的支持文件找不到。很烦。于是很粗暴的选择了直接在index.html引入js和css

// 引入cropperjs
   <link href="lazyload/lib/cropperjs/dist/cropper.min.css" rel="stylesheet">
   <script src="lazyload/lib/cropperjs/dist/cropper.min.js"></script>

因为你直接在index.html 中直接引入的cropperjs所以并不需要在controller中引入可直接引用。
注:img标签必须在一个div或者其他块级元素中否则并不能生成裁剪效果。

// 当然之前你必须执行上传图片操作resp.data['DATA'][0]这个为我上传图片的id vm.photo为图片的访问地址(不是本地图片)
var cropper
var image = document.getElementById('phtotoperson');
 cropper = new Cropper(image, {
	viewMode:1,
	guides:false, // 是否显示在裁剪框上方的虚线
	aspectRatio:295/413,//一寸照片裁剪尺寸
	cropBoxResizable:false //裁剪框的大小不能改变默认可以改变
	resizable:false,
	dragMode:"move",
	dragCrop:false,//不允许重新开裁剪框
	});
   vm.photo ='/file-server/files/download/'+ resp.data['DATA'][0];
   
	cropper.replace(vm.photo); 
//上个代码是根据你图片路径改变重新绘制,比如你点击上传图片之后发现上传错误想返回从新上传可能就会出现还是你第一次上传的图片。		
//因为图片裁剪下来的为base64的图片,下边的方法会将base64格式的图片转换成可上传用的图片
function dataURLtoBlob(dataurl) { 
		var arr = dataurl.split(','),
			mime = arr[0].match(/:(.*?);/)[1],
			bstr = atob(arr[1]),
			n = bstr.length,
			u8arr = new Uint8Array(n);
		while (n--) {
			u8arr[n] = bstr.charCodeAt(n);
		}
		return new Blob([u8arr], { type: mime });
	};
	//将上传的图片命名成你希望的名称fileName表示想要的名称
	function blobToFile(theBlob, fileName){
		theBlob.lastModifiedDate = new Date();
		theBlob.name = fileName;
		return theBlob;
	};

利用exif.js插件解决ios手机上传竖拍照片旋转90度问题

需要在你的项目中安装exif-js
npm install exif-js --save
//判断是否需要旋转
function selectFileImage(file) {
			console.log(file);
			//图片方向角
			var Orientation = null;
			
			if (file) {
				console.log("正在上传,请稍后...");
				if (!file) return;
					if (['image/jpg', 'image/jpeg', 'image/png'].indexOf(file.type) < 0) {
					gToast.open('请上传图片,请重新选择', { timeout: 3000 });
					return;
					}
					if (file.size > 10 * 1024 * 1024) {
					gToast.open('请上传不超过10M的图片,请重新选择', { timeout: 3000 });
					return;
					}
				// var URL = URL || webkitURL;
				//获取照片方向角属性,用户旋转控制
				EXIF.getData(file, function() {
				// alert(EXIF.pretty(this));
					EXIF.getAllTags(this); 
					//alert(EXIF.getTag(this, 'Orientation')); 
					Orientation = EXIF.getTag(this, 'Orientation');
					// alert(Orientation);
					//return;
				});
				
				var oReader = new FileReader();
				oReader.onload = function(e) {
					//var blob = URL.createObjectURL(file);
					//_compress(blob, file, basePath);
					var image = new Image();
					image.src = e.target.result;
					image.onload = function() {
						var expectWidth = this.naturalWidth;
						var expectHeight = this.naturalHeight;
						
						if (this.naturalWidth > this.naturalHeight && this.naturalWidth > 800) {
							expectWidth = 800;
							expectHeight = expectWidth * this.naturalHeight / this.naturalWidth;
						} else if (this.naturalHeight > this.naturalWidth && this.naturalHeight > 1200) {
							expectHeight = 1200;
							expectWidth = expectHeight * this.naturalWidth / this.naturalHeight;
						}
						var canvas = document.createElement("canvas");
						var ctx = canvas.getContext("2d");
						canvas.width = expectWidth;
						canvas.height = expectHeight;
						ctx.drawImage(this, 0, 0, expectWidth, expectHeight);
						var base64 = null;
						//修复ios
						if (navigator.userAgent.match(/iphone/i)) {
							console.log('iphone');
							//alert(expectWidth + ',' + expectHeight);
							//如果方向角不为1,都需要进行旋转 added by lzk
							if(Orientation != "" && Orientation != 1){
								alert('旋转处理',Orientation);
								switch(Orientation){
								 	case 6://需要顺时针(向左)90度旋转
								 		// alert('需要顺时针(向左)90度旋转');
								 		rotateImg(this,'left',canvas);
								 		break;
								 	case 8://需要逆时针(向右)90度旋转
								 		// alert('需要顺时针(向右)90度旋转');
								 		rotateImg(this,'right',canvas);
								 		break;
								 	case 3://需要180度旋转
								 		// alert('需要180度旋转');
										rotateImg(this,'right',canvas);//转两次
										rotateImg(this,'right',canvas);
										break;
								}		
							}
							
							/*var mpImg = new MegaPixImage(image);
							mpImg.render(canvas, {
								maxWidth: 800,
								maxHeight: 1200,
								quality: 0.8,
								orientation: 8
							});*/
							base64 = canvas.toDataURL("image/jpeg", 0.8);
							//使用压缩
							dealImage(base64, 800, uploadImg);
							// console.log(blobToFile(dataURLtoBlob(base), file.name))
						}else if (navigator.userAgent.match(/Android/i)) {// 修复android
						AndroiduploadImg(file);
						}else{
							//alert(Orientation);
							if(Orientation != "" && Orientation != 1){
								//alert('旋转处理');
								switch(Orientation){
								 	case 6://需要顺时针(向左)90度旋转
								 		// alert('需要顺时针(向左)90度旋转');
								 		rotateImg(this,'left',canvas);
								 		break;
								 	case 8://需要逆时针(向右)90度旋转
								 		// alert('需要顺时针(向右)90度旋转');
								 		rotateImg(this,'right',canvas);
								 		break;
								 	case 3://需要180度旋转
								 		// alert('需要180度旋转');
										rotateImg(this,'right',canvas);//转两次
										rotateImg(this,'right',canvas);
										break;
								}		
							}	
							base64 = canvas.toDataURL("image/jpeg", 0.8);
							dealImage(base64, 800, uploadImg);			
						}
						
					};
				};
				oReader.readAsDataURL(file);
			}
		}
 
		//对图片旋转处理 
		function rotateImg(img, direction,canvas) {  
				//alert(img);
				//最小与最大旋转方向,图片旋转4次后回到原方向  
				var min_step = 0;  
				var max_step = 3;  
				//var img = document.getElementById(pid);  
				if (img == null)return;  
				//img的高度和宽度不能在img元素隐藏后获取,否则会出错  
				var height = img.height;  
				var width = img.width;  
				//var step = img.getAttribute('step');  
				var step = 2;  
				if (step == null) {  
					step = min_step;  
				}  
				if (direction == 'right') {  
					step++;  
					//旋转到原位置,即超过最大值  
					step > max_step && (step = min_step);  
				} else {  
					step--;  
					step < min_step && (step = max_step);  
				}  
				//img.setAttribute('step', step);  
				/*var canvas = document.getElementById('pic_' + pid);  
				if (canvas == null) {  
					img.style.display = 'none';  
					canvas = document.createElement('canvas');  
					canvas.setAttribute('id', 'pic_' + pid);  
					img.parentNode.appendChild(canvas);  
				}  */
				//旋转角度以弧度值为参数  
				var degree = step * 90 * Math.PI / 180;  
				var ctx = canvas.getContext('2d');  
				switch (step) {  
					case 0:  
						canvas.width = width;  
						canvas.height = height;  
						ctx.drawImage(img, 0, 0);  
						break;  
					case 1:  
						canvas.width = height;  
						canvas.height = width;  
						ctx.rotate(degree);  
						ctx.drawImage(img, 0, -height);  
						break;  
					case 2:  
						canvas.width = width;  
						canvas.height = height;  
						ctx.rotate(degree);  
						ctx.drawImage(img, -width, -height);  
						break;  
					case 3:  
						canvas.width = height;  
						canvas.height = width;  
						ctx.rotate(degree);  
						ctx.drawImage(img, -width, 0);  
						break;  
				}  
			}  
		// 上传照片
		vm.uploadAvatar = function () {
			var file = vm.phtoto;
			selectFileImage(file);
			
		  };
		//从新绘制的图片可能较大ios处理裁剪的时候加载很慢。所以我们先将图片进行压缩在进行裁剪
		//压缩方法
		function dealImage(base64, w, callback) {
			var newImage = new Image();
			var quality = 0.6;    //压缩系数0-1之间
			newImage.src = base64;
			newImage.setAttribute("crossOrigin", 'Anonymous');	//url为外域时需要
			var imgWidth, imgHeight;
			newImage.onload = function () {
				imgWidth = this.width;
				imgHeight = this.height;
				var canvas = document.createElement("canvas");
				var ctx = canvas.getContext("2d");
				if (Math.max(imgWidth, imgHeight) > w) {
					if (imgWidth > imgHeight) {
						canvas.width = w;
						canvas.height = w * imgHeight / imgWidth;
					} else {
						canvas.height = w;
						canvas.width = w * imgWidth / imgHeight;
					}
				} else {
					canvas.width = imgWidth;
					canvas.height = imgHeight;
					quality = 0.6;
				}
				ctx.clearRect(0, 0, canvas.width, canvas.height);
				ctx.drawImage(this, 0, 0, canvas.width, canvas.height);
				var base64 = canvas.toDataURL("image/jpeg", quality); //压缩语句
				// 如想确保图片压缩到自己想要的尺寸,如要求在50-150kb之间,请加以下语句,quality初始值根据情况自定
				// while (base64.length / 1024 > 150) {
				// 	quality -= 0.01;
				// 	base64 = canvas.toDataURL("image/jpeg", quality);
				// }
				// 防止最后一次压缩低于最低尺寸,只要quality递减合理,无需考虑
				// while (base64.length / 1024 < 50) {
				// 	quality += 0.001;
				// 	base64 = canvas.toDataURL("image/jpeg", quality);
				// }
				callback(base64);//必须通过回调函数返回,否则无法及时拿到该值
			}
		}

TIBCO Spotfire 入门指南 数据分析工具 - TIBCO Spotfire 入门指南(一) 文章目录数据分析工具 - TIBCO Spotfire 入门指南(一)前言一、Sportfire 是什么?二、使用Sportfire 创建一个简单的数据分析模型1.设置分析(加载数据)2.编辑数据源3.创建图表3.1 创建交叉表3.2 创建饼图3.3 创建树形图3.4 创建散点图3.5 创建自定义筛选器总结 前言 通过对本指南的学习,你可以了解到如何开始用TIBCO Sportfire分析数据,并能详细了解您可以做什么以及怎么做 一、Spo 阅读详情

相关推荐

最短线性递推式求解与有理函数重建

这一算法来自于我们对“线性递推式拟合”的视角转换,其后得到的算法是自然的。 引理 1. 如果两个有理分式 p1/q1,p2/q2p_1/q_1, p_2/q_2p1​/q1​,p2​/q2​ 均有 deg⁡p<n,deg⁡q≤n\deg p<n, \deg q\leq ndegp<n,degq≤n 且展开式 p1/q1≡p2/q2(modx2n)p_1/q_1 \equiv p_2/q_2 \pmod {x^{2n}}p1​/q1​≡p2​/q2​(modx2n),那么 p1/q1=p2/

Entropy Increaser 的博客 2589

解决图片处理后旋转问题

解决图片处理后旋转问题,图片压缩,格式转换后自动旋转。

March97的博客 4614

FPGA实现高效数字下变频:CORDIC与CIC滤波器的Verilog优化设计

本文深入探讨了FPGA实现高效数字下变频的技术方案,重点介绍了CORDIC算法与CIC滤波器的Verilog优化设计。通过详细的算法原理分析、FPGA实现技巧和实战经验分享,展示了如何利用CORDIC的旋转运算替代乘法操作,以及CIC滤波器在降采样中的高效性能。文章还提供了完整的系统集成方案和资源优化策略,为无线通信和雷达信号处理领域的工程师提供了实用参考。

redis7keeper的博客 721

cropper.js和exif.js实现头像上传缩放裁剪旋转

做了一个头像上传的小功能,同时处理了ios竖着拍照图片旋转的问题。cropper.js(注意:cropper压缩版的js在手机版版缩放图片会有黑屏和图片飞了的bug,所以建议引入开发版本的cropper)依赖jquery,exif是用来获取拍照信息的,用于修复ios竖着拍照旋转的问题,我用的是amazeui框架,我在文件中也引入。 这是html文件 cropper图片裁

九的博客 3676

头歌操作系统2023春季课堂练习2.1:外部中断

本关任务:通过相关知识以及实验回答:版本 1 内核的第 6 次时钟中断发生时,断点和恢复点(指令地址)分别是多少?回答问题:当第一行 0/1 字符全部输出完毕的时候一共发生了几次时钟中断,即第一行完全填满时 jiffies 记录的已发生次数为多少?本关任务:通过实际操作回答在输出第一行 0/1 字符的过程中(如下图所示),共发生了几次时钟中断?2.此时 bochs 虚拟机输出的 0/1 字符串是什么?(只填写数字,不填写空格!根据相关知识进行实际操作,一直输入 c 直到 0/1 将第一行完全填满。

weixin_64821608的博客 8126

存储关键技术·RAID技术·RAID2.0·华为RAID2.0+·华为服务器·云计算

一.RAID基本概念 常见的RAID级别组合RAID级别 二.RAID的数据组织形式 三.RAID的数据保护功能 方法一:镜像方法二:奇偶校验算法(XOR) 四.RAID热备和重构 1.热备(Hot Spare)的定义2.热备的分类3.热备的工作原理 五.RAID 2.0技术 1.RAID 2.02.RAID 2.0+3.华为RAID 2.0+ 六.RAID 2.0+块虚拟化技术 1.什么会出现RAID 2.0+技术?2.什么是RAID 2.0?3.RAID 2.0+的原理是什么?

qq_47480932的博客 3319

Android解决手机图片压缩后旋转问题

在Android APP开发中经常会有上传图功能,手机拍摄的照片大多都有2M - 5M,把这么大的图片上传上去是需要很长时间的,并且图片过大非常容易导致用卡顿甚至是OOM直接崩溃掉,那么为了优化性能就必须要做图片压缩处理,但是图片压缩后,显示在手机上的图片发生了旋转,解决方法也比较简单,下面直接把我的压缩工具类贴出来,以及多图片旋转的处理: /** * Created by ysp * on 2020/12/6 */ public class ImageCompressUtils { /*

yushuangping的博客 2315

【论文+代码】ZS-N2N实现小样本零网络图像去噪

本文涵盖论文原文讲解与代码复现。

weixin_46287760的博客 4001

vue vant van-uploader使用compressorjs解决拍照上传的图片被旋转 90 度方法,图片压缩上传

van-uploader使用compressorjs解决拍照上传的图片被旋转 90 度,图片上传压缩

总结前端开发中遇到的问题,分享前端知识 4629

windows系统下,如何为comfyui如何安装triton

​ 有些加速插件、模型在安装的时候,比如说sageattention的安装,就需要提前安装triton这个包,不过这个包有点特殊,windows下略微不好装,经常会装失败。 🎠如何安装 之前也有人介绍过,要到github上找个wheel文件,找到对应的版本安装下就好了。 问题是:https://github.com/woct0rdho/triton-windows/releases 这个git地址上,已经找不到wheel文件了... ​

聚梦小课堂 4494

基于YOLOv5的人脸识别系统:从构建到应用的全流程指南

本文详细介绍了基于YOLOv5的人脸识别系统开发全流程。首先阐述了YOLOv5模型的高效性和准确性优势,随后分步骤讲解了深度学习环境配置、数据集准备(推荐WIDER FACE数据集)和模型训练方法。重点展示了如何将训练好的模型集成到Tkinter开发的GUI界面中,实现图片上传、人脸检测和结果可视化功能。文章提供完整的代码示例和飞书文档链接(密码:946m22&8),帮助开发者快速构建可交互的人脸识别系统,适用于安防、门禁等多种应用场景。通过该项目,读者可掌握YOLOv5的实际应用和界面集成技术。

FJN110的博客 168

获取远程图片rotate方法旋转90后兼容当前弹框或者div的方法(angular4+环境)

获取远程图片rotate方法旋转90后兼容当前弹框或者div得方法 (angular4+环境) 解决办法:通过远程图片得链接地址获取到图片并放入img标签中然后属性,这里通过canvas完成虚拟dom创建并 图片预览得方向是根据属性获取得,这个在之前文档中提过得exif.js插件得获取方法,这里不再过多陈述,参考文档如下: 调整上传图片的预览方向 (exif.js)-Mr.Tang的博客 一、首先...

Mr.Tang的博客 439

98DX3236内核编译过程小结

0.条件(1)Marvell技术支持提供的压缩文件:GNU EABI:arm-mv5sft-linux-gnueabi_SW3.2.tar.bz2.tar.bz2armebv7-marvell-linux-gnueabi-softfp_i686_201201.tar.bz2CPSS代码:Cpss-PP-DxCh-4.2_012.zipLinux内核文件:lsp-4.2_012.zipLSP-Uni...

snaking616 1801

PC端、移动端手机竖拍原图压缩上传顺时针旋转90°的解决方案

问题背景 最近在做的项目中,不管是移动端还是后台系统都涉及到了手机照片压缩上传的问题,做完功能测试的时候发现图片回显的时候有些顺时针旋转了90°(竖拍照片,不管是ios还是android都存在这问题),后来百度了一下才知道是跟图片的EXIF(可交换图像文件格式)中的Orientation(旋转参数)有关,那么问题就好处理了,我们可以获取上...

weixin_33901926的博客 656

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ios端浏览器拍照上传到服务器,图片被旋转90度 php 解决方案

必须确保检测的图片是ios设备上传的完整图片,不要在前端压缩过的,因为压缩后的图片都是通过Canvas重新生成的新图片,所以不包含相关扩展信息 如果前端要压缩请在前端获取扩展信息或者直接在前端转角度(从原始文件中获取扩展信息) if(strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone')||strpos($_SERVER['HTTP_USER_AGENT'], ...

fytz425的博客 549

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ImgUtil.scale会在某些图片压缩之后自动旋转90度

0.5f//缩放比例。

jimmylsp的专栏 849

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

前端input图片的上传和压缩以及图片旋转90度问题解决

最近的微信项目中用到了input标签来上传图片文件,遇到两个大问题: 1、图片太大,导致上传速度慢,影响体验,需要压缩后上传; 2、有些手机拍照是横屏的,在页面展示的时候和正常方向相差90度,也就是本该立着的照片躺下了,需要根据具体情况修正后上传; 手机上的效果是这样的: 上传后确是这样的: 而我想要的是正确朝上的图片,查了资料后发现这是一些手机横着拍照导致的: 其实是

donggua_123的博客 1万+

iPhone上关于相机拍照的图片的旋转问题

用相机拍摄出来的照片含有EXIF信息,UIImage的imageOrientation属性指的就是EXIF中的orientation信息。 如果我们忽略orientation信息,而直接对照片进行像素处理或者drawInRect等操作,得到的结果是翻转或者旋转90之后的样子。这是因为我们执行像素处理或者drawInRect等操作之后,imageOrientaion信息被删除了,imageOrie

wjwc2014的专栏 705

Vue 项目中 Cropper 图片裁剪的使用及遇到的问题

个人中心的头像上传需要对图片进行裁剪。

weixin_45015522的博客 2232

cropper 图片裁剪,固定图片宽高

cropper 图片裁剪时指定图片宽高

it_gym的博客 8784

vue之使用Cropper进行图片剪裁上传压缩

vue之使用Cropper进行图片剪裁上传 在项目中,对上传的图片按照比例和尺寸进行裁剪,以便于应用到不同的场景和平台上。这里采用cropper插件裁剪图片 一、cropper的使用 使用教程:https://github.com/fengyuanchen/cropper#options 二、用例: 点击头像上传图片→对图片进行裁剪 源码

路在脚下,幸福在手中,莫贪!!!!! 3814

cropper.js 会将裁剪完的图片进行压缩吗?求解答

最近在做一个裁剪图片的小模块,图片上传成功之后就会变小,pc端裁剪完放到手机端图片会失真,求大神解答一下,cropper有压缩功能吗?如何禁用掉呢?...

weixin_42083974的博客 2640

使用react-cropper-pro实现图片裁切压缩上传

是一款简单轻量的图片上传 + 裁切 + 压缩 组件, 不依赖等第三方UI

m0_65808332的博客 1115

使用react-cropper结合图片压缩方法对图片进行裁剪压缩处理

最近项目要使用图片裁剪上传,因为项目采用的是react+antd,所以第一时间想到的是ImgCrop插件,但是这不满足项目需求,项目要求的是能够缩放裁剪框,最后确定了采用react-cropper来实现图片的自定义裁剪 安装react-cropper npm install --save react-cropper 新建一个CropperModal.jsx import React, { useState, useEffect, useCallback, useRef } from 'react' impo

weixin_43777074的博客 1285

cropperjs图像裁剪功能详细实现步骤(angular项目中使用)

cropperjs图像裁剪功能详细实现步骤(angular项目中使用)

小陈想长高- 876

在线图片裁剪,关于使用cropperjs踩过的坑

最近在做一个项目,其中包括了一个图片在线裁剪功能,于是找到了cropperjs,cropperjs的裁剪功能丰富,满足了各种需求,预览链接:cropperjs预览裁剪图片的两种思路: 1.在前端裁剪,通过html5的HTMLCanvasElement.toBlob方法,把裁剪后的图片通过表单方式用ajax提交给后台,或者使用HTMLCanvasElement.toDataURL 把图片转换为bas

我的IP在路上 4万+
上一篇: angular 2项目中对于ios12键盘弹出不回滚
下一篇: 正则表达式持续更新中,能让你快速开发
lbchenxy
博客等级 码龄9年 29粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

lbchenxy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值