【ionic&AngularJS】用户头像压缩上传,按比例缩小。

整合了网上angularjs关于头像上传,图片压缩以及文件传输的功能代码。

1.摆放一个固定大小为(100,100)的头像选择框,将图片与输入框重叠,输入内容改变时调用imgChange()方法生成缩小的图片。

		<ion-item class="item-input item-stacked-label">
			<input οnchange="angular.element(this).scope().imgChange(this)" type="file" multiple accept="image/*" style="width: 100px; height: 100px; display:block; border: none;opacity: 0;position: absolute;" />
			<img id="face" ng-src="{{userInfo.headImage}}" style="width: 100px; height: 100px;">
		</ion-item>



2.将图片转换成base64字符串类型,再将图片压缩赋值给userInfo.headImage,打印原始图片的字符串长度,压缩后图片的字符串及长度。


        $scope.imgChange = function (element) {
            if (!element.files[0]) {
                console.log("未选择图片!");
                return;
            }
            $scope.$apply(function(scope) {
                var photofile = element.files[0];
                var reader = new FileReader();
                reader.onload = function(e) {
                    var prev_img = document.getElementById("face");
                    prev_img.src = e.target.result;
                    console.log(prev_img.src.length);
                    $scope.userInfo.headImage = reduceImage.compress(prev_img, 50).src;
                    console.log($scope.userInfo.headImage);
                    console.log($scope.userInfo.headImage.length);
                };
                reader.readAsDataURL(photofile);
            });
        };


        var reduceImage = {
            /**
             * Receives an Image Object (can be JPG OR PNG) and returns a new Image Object compressed
             * @param {Image} source_img_obj The source Image Object
             * @param {Integer} quality The output quality of Image Object
             * @return {Image} result_image_obj The compressed Image Object
             */
            compress: function(source_img_obj, quality, output_format){
                var mime_type = "image/jpeg";
                if(output_format!=undefined && output_format=="png"){
                    mime_type = "image/png";
                }
                var cvs = document.createElement('canvas');
                //naturalWidth真实图片的宽度
                //cvs.width = source_img_obj.naturalWidth;
                //cvs.height = source_img_obj.naturalHeight;
                var xRate = 100 / source_img_obj.naturalWidth;
                var yRate = 100 / source_img_obj.naturalHeight;
                cvs.width = 100;
                cvs.height = 100;
                var cvsContext = cvs.getContext('2d');
                cvsContext.scale(xRate, yRate);
                var ctx = cvsContext.drawImage(source_img_obj, 0, 0);
                var newImageData = cvs.toDataURL(mime_type, quality/100);
                var result_image_obj = new Image();
                result_image_obj.src = newImageData;
                return result_image_obj;
            }
        };



3.上传头像只需上传userInfo.headImage字符串的值就行了,后台将字符串存为图片格式即可。

		var face = headImage.Substring(23);
		var filepath = HttpContext.Current.Server.MapPath("");
		var index = filepath.LastIndexOf(@"\", StringComparison.Ordinal);
		filepath = filepath.Substring(0, index) + "\\upload\\images\\";
		//如果不存在就创建file文件夹
		if (Directory.Exists(filepath) == false)
		{
			Directory.CreateDirectory(filepath);
		}
		filepath += "face.png";
		try
		{
			var stream = new MemoryStream(Convert.FromBase64String(face));
			var img = new Bitmap(stream);
			img.Save(filepath, ImageFormat.Png);
		}
		catch (Exception)
		{
			filepath = "upload/images/default.png";
		}


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

公西雒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值