图片裁剪上传

样式基于bootstrap,

前端代码:

<div class="panel panel-default panel-col lesson-manage-panel">

        <div class="panel-heading">
            课程图片
        </div>
        <div class="panel-body">


            <div id="upload">
                <div class="form-group">
                    <div class="col-md-offset-2 col-md-8 controls controls">
                        <img src="/Content/Image/avatar.jpg_lg.jpg?datetime=@DateTime.Now" style="max-width:100%; height: auto;display: block;">
                    </div>
                </div>


                <div class="form-group">
                    <div class="col-md-offset-2 col-md-8 controls">
                        <p class="help-block">你可以上传JPG、GIF或PNG格式的文件,文件大小不能超过<strong>1M</strong>。</p>
                    </div>
                </div>


                <div class="form-group">
                    <div class="col-md-offset-2 col-md-8 controls">
                        <button class="btn btn-success" id="upload-image-btn">上传新图片</button>
                    </div>
                </div>
            </div>


            <div id="crop" style="display:none">
                <div class="form-group" style="overflow:hidden;">
                    <div class="col-sm-6">
                        <img id="modelimage" style=" height:400px" />
                        <div class="help-block">提示:请选择图片裁剪区域。</div>
                    </div>
                    <div class="col-sm-6">
                        <h3 class="page-header">裁剪后图像</h3>
                        <div class="row">
                            <div class="col-sm-6">
                                <div class="preview"></div>
                            </div>
                            <div class="col-sm-4">
                                <div class="preview"></div>
                            </div>
                            <div class="col-sm-2">
                                <div class="preview"></div>
                            </div>
                        </div>
                    </div>
                </div>


                <form id="image-crop-form" method="post" action="@Url.Action("CropLogo")">
                    <input type="hidden" name="left" id="cropx" value="0" />
                    <input type="hidden" name="top" id="cropy" value="0" />
                    <input type="hidden" name="width" id="cropw" value="0" />
                    <input type="hidden" name="height" id="croph" value="0" />
                    <div class="form-group clearfix">
                        <div class="col-md-offset-2 col-md-8 controls">
                            <button type="submit" class="btn btn-fat btn-primary">保存</button>
                            <a href="javascript:;" id="upload_again" class="go-back btn btn-link">重新选择图片</a>
                        </div>
                    </div>


                </form>
            </div>


        </div>
    </div> 
        <script src="/Scripts/plupload/plupload.full.min.js"></script>
        <link href="~/Scripts/cropper/cropper.min.css" rel="stylesheet" />
        <script src="~/Scripts/cropper/cropper.js"></script>
        <script>
            $(function () {


               
                    var url='@Html.Raw(@Url.Action("UploadLogo"))';


                    var uploader = new plupload.Uploader({
                        browse_button: 'upload-image-btn',
                        url: url,
                        flash_swf_url: '/Scripts/plupload/Moxie.swf',
                        silverlight_xap_url: '/Scripts/plupload/Moxie.xap',
                        filters: {
                            mime_types: [
                            { title: "图片文件", extensions: "jpg,jpeg,gif,png,bmp" }
                            ],
                            max_file_size: '1mb',
                            prevent_duplicates: false //不允许队列中存在重复文件
                        },
                        multi_selection: false,
                        auto_start: true
                    });
                    uploader.bind('FilesAdded', function (uploader, files) {
                        uploader.start();
                    });
                    uploader.bind('UploadFile', function (uploader, file) {
                        uploader.disableBrowse(true);
                    });
                    uploader.bind('FileUploaded', function (uploader, file, responseObject) {
                        var data = $.parseJSON(responseObject.response);
                        if (data.result) {
                            var now = new Date();
                            $('#upload').hide();
                            $('#crop').show();
                            $('#modelimage').attr('src', data.Url + "?img=" + now.getMilliseconds());
                            $('#modelimage').cropper('replace', data.Url + "?img=" + now.getMilliseconds());
                        } else {
                            alert('上传失败. ' + data.msg);
                        }
                    });
                    uploader.bind('Error', function (uploader, errObject) {
                        alert(errObject.message + ' ' + errObject.code);
                    });
                    uploader.bind('UploadComplete', function (uploader, files) {
                        uploader.disableBrowse(false);
                    });
                    uploader.init();
                
                var $previews = $('.preview');
                $('#modelimage').cropper({
                    aspectRatio: 19 / 9,
                    autoCropArea: 0.5,
                    build: function (e) {
                        var $clone = $(this).clone();
                        $clone.css({
                            display: 'block',
                            width: '100%',
                            minWidth: 0,
                            minHeight: 0,
                            maxWidth: 'none',
                            maxHeight: 'none'
                        });
                        $previews.css({
                            width: '100%',
                            overflow: 'hidden'
                        }).html($clone);
                    },
                    crop: function (e) {
                        var copdata = $("#modelimage").cropper('getData');
                        $('#cropx').val(copdata.x);
                        $('#cropy').val(copdata.y);
                        $('#cropw').val(copdata.width);
                        $('#croph').val(copdata.height);
                        var imageData = $(this).cropper('getImageData');
                        var previewAspectRatio = e.width / e.height;
                        $previews.each(function () {
                            var $preview = $(this);
                            var previewWidth = $preview.width();
                            var previewHeight = previewWidth / previewAspectRatio;
                            var imageScaledRatio = e.width / previewWidth;
                            $preview.height(previewHeight).find('img').css({
                                width: imageData.naturalWidth / imageScaledRatio,
                                height: imageData.naturalHeight / imageScaledRatio,
                                marginLeft: -e.x / imageScaledRatio,
                                marginTop: -e.y / imageScaledRatio
                            });
                        });
                    }
                });
                $("#upload_again").click(function(){
                    $("#upload-image-btn").click();
                })


            });

        </script>


后端代码:

public ActionResult Logo()
{
return View();
}
public ActionResult UploadLogo(HttpPostedFileBase file)
{
if (file == null)
{
return Json(new { result = false });
}
//保存图片路径
string path = "/Content/Image/";
//获取完整路径
string savePath = Server.MapPath(path);
//没路径就创建
if (!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
string[] imgType = { ".jpg", ".jpeg", ".gif", ".png", ".bmp" };
if (!imgType.Contains(Path.GetExtension(file.FileName)))
{
return Json(new { result = false, msg = "文件格式不对!" });
}
try
{
//保存图片
file.SaveAs(savePath + "avatarupload.jpg");
}
catch (Exception e)
{
return Json(new { result = false, msg = e.Message });
}
return Json(new { result = true, Url = path + "avatarupload.jpg" });
}
public ActionResult CropLogo(float left, float top, float width = 0, float height = 0)
{
// 读取原图
string virtualPath = "/Content/Image/avatarupload.jpg";
string rawPath = Server.MapPath(virtualPath);
string savePath = Path.GetDirectoryName(rawPath);
string avatarpath = Path.Combine(savePath, "avatar.jpg");
using (Image raw = Image.FromFile(rawPath))
{
if (width == 0 || height == 0)
{
width = raw.Width;
height = raw.Height;
}
// 裁剪缩放
using (Bitmap avatar = new Bitmap(320, 180))
{


using (var g = Graphics.FromImage(avatar))
{
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;


g.DrawImage(raw, new Rectangle(0, 0, avatar.Width, avatar.Height), left, top, width, height, GraphicsUnit.Pixel);
}


// 另存
avatar.Save(avatarpath, ImageFormat.Jpeg);
}


// 裁剪大图
using (Bitmap avatar = new Bitmap(480, 270))
{
using (var g = Graphics.FromImage(avatar))
{
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;


g.DrawImage(raw, new Rectangle(0, 0, avatar.Width, avatar.Height), left, top, width, height, GraphicsUnit.Pixel);
}


// 另存
avatar.Save(avatarpath + "_lg.jpg", ImageFormat.Jpeg);
}


// 裁剪小图
using (Bitmap avatar = new Bitmap(160, 90))
{


using (var g = Graphics.FromImage(avatar))
{
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;


g.DrawImage(raw, new Rectangle(0, 0, avatar.Width, avatar.Height), left, top, width, height, GraphicsUnit.Pixel);
}


// 另存
avatar.Save(avatarpath + "_sm.jpg", ImageFormat.Jpeg);
}
}


return RedirectToAction("Logo");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值