• 前台Jcrop配合后台Graphics实现图片裁剪并上传


    Jcrop:一个功能强大的图片裁剪插件

    版本:Jcrop v0.9.12

    VS版本:vs2015

    下载地址:http://code.ciaoca.com/jquery/jcrop/version/Jcrop-0.9.12.zip

    本文主要讲的是,在前台通过file选择图片,然后用Jcrop裁剪好图片后,把偏移量等参数传值到后台,在后台通过Graphics进行图片的截取并上传到服务器,显示一下重点代码

    HTML 部分
    <
    div class="example"> <img src="" id="target" alt="[Jcrop Example]" width="400"> <div id="preview-pane"> <div class="preview-container"> <img src="" id="cutImgId" class="jcrop-preview" alt="Preview"> </div> </div> </div>
    //脚本
    $(function () { var api = frameElement.api, W = api.opener; //获取原图片实际的宽高 var img = new Image(); img.src = W.document.getElementById('ImageCropUrl').value; img.onload = function () { imgweight = img.width; imgheight = img.height }; var boundx, boundy, // Grab some information about the preview pane $preview = $('#preview-pane'), $pcnt = $('#preview-pane .preview-container'), $pimg = $('#preview-pane .preview-container img'), xsize = $pcnt.width(), ysize = $pcnt.height(); console.log('init', [xsize, ysize]); $('#target').Jcrop({ onChange: updatePreview, onSelect: updatePreview, aspectRatio: 2 //setSelect: [20, 300, 66, 68] }, function () { var bounds = this.getBounds(); boundx = bounds[0]; boundy = bounds[1]; jcrop_api = this; $preview.appendTo(jcrop_api.ui.holder); } );
    //传递到后台
    
        function saveUploadImg(){
    
            c = jcrop_api.tellSelect();
    
            if (parseInt(c.w) > 0) {
    
                $.ajax({
    
                      url:'/cartoon-web/contentAffix/cutimageAndSaveAffix',
                      //x和y 是坐标,w和h是宽高
                      data :{"x":Math.round(c.x * imgweight / 280),"y":Math.round(c.y * imgheight / 350),"w":Math.round(c.w * imgweight / 280),"h":Math.round(c.h * imgheight / 350),"filename":filename,"fileid":fileid,"originalfilename":originalfilename},
    
                      dataType:'json',
    
                     
    
                      success: function(data){
    
                         if(data.result == "success"){
    
                         }else{
    
                             alert("请选择图片");
    
                         }
    
                      }
    
                });
    
            } 
    
        }
    //后台代码
    if
    (uploadFile != null) { Bitmap bmpBase = new Bitmap(uploadFile.InputStream); Bitmap bmpNew = new Bitmap(w,h); var format = bmpBase.PixelFormat; bmpBase.PixelFormat); using (Graphics g = Graphics.FromImage(bmpNew)) { // 用白色清空 g.Clear(Color.White); // 指定高质量的双三次插值法。执行预筛选以确保高质量的收缩。此模式可产生质量最高的转换图像。 g.InterpolationMode = InterpolationMode.HighQualityBicubic; // 指定高质量、低速度呈现。 g.SmoothingMode = SmoothingMode.HighQuality; // 在指定位置并且按指定大小绘制指定的 Image 的指定部分。 g.DrawImage(bmpBase, 0, 0, new Rectangle(x, y, w, h), GraphicsUnit.Pixel); Bitmap s = Bitmap.FromHbitmap(bmpNew.GetHbitmap()); MemoryStream stream = new MemoryStream(); //获取裁剪后图片的文件流 bmpNew.Save(stream, ImageFormat.Jpeg); bmpBase.Dispose(); bmpNew.Dispose(); stream.Dispose(); return Content(url); } }
  • 相关阅读:
    C++语法小记---string类
    C++语法小记---标准库
    C++语法小记---运算符重载
    C++语法小记---函数重载
    C++语法小记---友元
    C++语法小记---开篇
    STM32使用printf丢失第一个字母的问题
    AD芯片的基准参考电压问题
    运算放大器的调试经验
    [置顶] TIM_GetCounter与TIM_GetCapture1的区别
  • 原文地址:https://www.cnblogs.com/zhujunfie/p/7603248.html
Copyright © 2020-2023  润新知