zoukankan      html  css  js  c++  java
  • cropper.js插件做图片上传裁剪图片大小

    前端代码

    <!DOCTYPE html>
    <html lang="zh-cn">
    <head>
    <meta charset="UTF-8">
    <title>上传头像</title>
    <link href="https://cdn.bootcss.com/cropper/3.1.3/cropper.min.css" rel="stylesheet">
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <style type="text/css">
    body{
    text-align: center;
    }
    #user-photo {
    300px;
    height:300px;
    margin-top: 10px;
    }
    #photo {
    max-100%;
    max-height:350px;
    }
    .img-preview-box {
    text-align: center;
    }
    .img-preview-box > div {
    display: inline-block;;
    margin-right: 10px;
    }

    .img-preview {
    overflow: hidden;
    }
    .img-preview-box .img-preview-lg {
    150px;
    height: 150px;
    }
    .img-preview-box .img-preview-md {
    100px;
    height: 100px;
    }
    .img-preview-box .img-preview-sm {
    50px;
    height: 50px;
    border-radius: 50%;
    }
    </style>
    </head>
    <body>
    <button class="btn btn-primary" data-target="#changeModal" data-toggle="modal">打开</button><br/>
    <div class="user-photo-box">
    <img id="user-photo" src="">
    </div>
    </div>
    <div class="modal fade" id="changeModal" tabindex="-1" role="dialog" aria-hidden="true">
    <div class="modal-dialog">
    <div class="modal-content">
    <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
    <h4 class="modal-title text-primary">
    <i class="fa fa-pencil"></i>
    更换头像
    </h4>
    </div>
    <div class="modal-body">
    <p class="tip-info text-center">
    未选择图片
    </p>
    <div class="img-container hidden">
    <img src="" alt="" id="photo">
    </div>
    <div class="img-preview-box hidden">
    <hr>
    <span>150*150:</span>
    <div class="img-preview img-preview-lg">
    </div>
    <span>100*100:</span>
    <div class="img-preview img-preview-md">
    </div>
    <span>30*30:</span>
    <div class="img-preview img-preview-sm">
    </div>
    </div>
    </div>
    <div class="modal-footer">
    <label class="btn btn-danger pull-left" for="photoInput">
    <input type="file" class="sr-only" id="photoInput" accept="image/*">
    <span>打开图片</span>
    </label>
    <button class="btn btn-primary disabled" disabled="true" onclick="sendPhoto();">提交</button>
    <button class="btn btn-close" aria-hidden="true" data-dismiss="modal">取消</button>
    </div>
    </div>
    </div>
    </div>
    <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/cropper/3.1.3/cropper.min.js"></script>
    <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <script type="text/javascript">
    var initCropperInModal = function(img, input, modal){
    var $image = img;
    var $inputImage = input;
    var $modal = modal;
    var options = {
    aspectRatio: 1, // 纵横比
    viewMode: 2,
    preview: '.img-preview' // 预览图的class名
    };
    // 模态框隐藏后需要保存的数据对象
    var saveData = {};
    var URL = window.URL || window.webkitURL;
    var blobURL;
    $modal.on('show.bs.modal',function () {
    // 如果打开模态框时没有选择文件就点击“打开图片”按钮
    if(!$inputImage.val()){
    $inputImage.click();
    }
    }).on('shown.bs.modal', function () {
    // 重新创建
    $image.cropper( $.extend(options, {
    ready: function () {
    // 当剪切界面就绪后,恢复数据
    if(saveData.canvasData){
    $image.cropper('setCanvasData', saveData.canvasData);
    $image.cropper('setCropBoxData', saveData.cropBoxData);
    }
    }
    }));
    }).on('hidden.bs.modal', function () {
    // 保存相关数据
    saveData.cropBoxData = $image.cropper('getCropBoxData');
    saveData.canvasData = $image.cropper('getCanvasData');
    // 销毁并将图片保存在img标签
    $image.cropper('destroy').attr('src',blobURL);
    });
    if (URL) {
    $inputImage.change(function() {
    var files = this.files;
    var file;
    if (!$image.data('cropper')) {
    return;
    }
    if (files && files.length) {
    file = files[0];
    if (/^image/w+$/.test(file.type)) {


    if(blobURL) {
    URL.revokeObjectURL(blobURL);
    }
    blobURL = URL.createObjectURL(file);


    // 重置cropper,将图像替换
    $image.cropper('reset').cropper('replace', blobURL);


    // 选择文件后,显示和隐藏相关内容
    $('.img-container').removeClass('hidden');
    $('.img-preview-box').removeClass('hidden');
    $('#changeModal .disabled').removeAttr('disabled').removeClass('disabled');
    $('#changeModal .tip-info').addClass('hidden');


    } else {
    window.alert('请选择一个图像文件!');
    }
    }
    });
    } else {
    $inputImage.prop('disabled', true).addClass('disabled');
    }
    }

    var sendPhoto = function(){
    $('#photo').cropper('getCroppedCanvas',{
    300,
    height:300
    }).toBlob(function(blob){
    // 转化为blob后更改src属性,隐藏模态框
    $('#user-photo').attr('src',URL.createObjectURL(blob));
    $('#changeModal').modal('hide');

    //向服务器发送请

    var useridx = $('#useridx').val();
    // 转化为blob后更改src属性,隐藏模态框
    $('#user-photo').attr('src',URL.createObjectURL(blob));
    $('#changeModal').modal('hide');
    var cas = $('#photo').cropper('getCroppedCanvas');
    var base64url = cas.toDataURL('image/jpeg');    ////将图片转换成base64url 传递,后台解析保存
    if (useridx != "") {
    $.post("请求路径", { file: base64url }, function (res) {
    if (res == "OK") {

    lalert('上传成功');
    } else {

    alert('上传失败');
    }
    })
    } else {

    alert('主播IDX不能为空');
    }

    });
    }


    $(function(){
    initCropperInModal($('#photo'),$('#photoInput'),$('#changeModal'));
    });
    </script>
    </body>
    </html>

    后台代码 MVC的写法

    ///控制器

    [HttpPost] 
    public ActionResult UploadImg(string file)
    {

    saveFilePath = "E:\新建文件夹\"+DateTime.Now.GetHashCode()+ ".png";  ///保存本地 

    ////这里就是将前端base64url,截取出来
    string[] img_array = file.Split(',');
    byte[] arr = Convert.FromBase64String(img_array[1]);
    using (MemoryStream ms = new MemoryStream(arr))
    {
    Bitmap bmp = new Bitmap(ms);
    if (img_array[0].ToLower() == "data:image/jpeg;base64")
    {
    bmp.Save(saveFilePath); ///最终保存路径
    }
    }


    }

  • 相关阅读:
    如何理解Linux中的load averages?
    如何准备Java初级和高级的技术面试
    大数据java基础吗?
    如何写出没有BUG的代码
    求强连通分量Tarjan算法
    图论_连通_连通分量
    欧拉函数
    二分图,匈牙利算法
    网络流24题(更新中
    一些简单二分题,简单的hash,H(i),字符串题
  • 原文地址:https://www.cnblogs.com/yjm8023/p/9466624.html
Copyright © 2011-2022 走看看