前台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);
                    }

                } 
时间: 2024-11-06 02:13:43

前台Jcrop配合后台Graphics实现图片裁剪并上传的相关文章

struts2+jsp+jquery+Jcrop实现图片裁剪并上传

<1> 使用html标签上传需要裁剪的大图. <2> 在页面呈现大图,使用Jcrop(Jquery)对大图进行裁剪,并且可以进行预览. <3> 选择好截取部分之后发送数据给Action,在服务器端使用 Java API 对大图进行裁剪. <4> 保存大图裁剪好的头像到指定目录,完成业务. 下面一步一步做: 第一步:使用html标签上传需要裁剪的大图. 这一步说白了也就是使用Struts2自带的FileUpload功能,把图片进行上传具体代码如下: html页

android 用户头像,图片裁剪,上传并附带用户数据base64code 方式

图片上传的文件流我上一篇博客写了,这一篇我们说一下base64,base64上传方式就是将图片转换成base64码,然后把base64码以字符串的方式上传,然后服务器接收到以后再解码就可以了,相对于文件流来说比较简单: 用户头像上传我们首先要获得图片的url然后再裁剪图片,然后把裁剪后的图片转换成base64然后在上传: 下边是安卓端代码: 首先我们要获得裁剪后的图片:一,选择图片: 代码如下,通过对话框选择获得图片的方式: activity: /* * 提示对话框 */ private voi

前端获取图片压缩后上传给后台

 此前有同事跟我聊过关于移动端用canvas压缩图片后再上传的功能,最近有了点空闲时间,所以就实践了一下.demo效果链接在文章底部贴出. 在做移动端图片上传的时候,用户传的都是手机本地图片,而本地图片一般都相对比较大,拿iphone6来说,平时拍很多图片都是一两M的,如果直接这样上传,那图片就太大了,如果用户用的是移动流量,完全把图片上传显然不是一个好办法. 目前来说,HTML5的各种新API都在移动端的webkit上得到了较好的 实现.根据查看caniuse,本demo里使用到的FileRe

wex5 教程 之 图文讲解 头像裁剪与上传

视频教程地址: http://v.youku.com/v_show/id_XMTgyMDE5NjEyOA==.html 一 效果演示 1.点击头像,弹出图片裁剪框 2,选择图片,裁剪,上传 3.上传成功后,头像图标更改 二 案例解读 案例目录 wex5为我们提供了一个picut图片裁剪案例,如下: 组件部局 加入file标签用来打开文件管理器进行图片选择,div标签进行图片预览,image标签为裁剪图片 后端服务 后端接收请求参数后,对路径进行了拼接,创建文件流,并创建文件,成功后将成功信息传给

iOS开发——项目实战总结&amp;类微信朋友圈发动态功能初步-图片与视频上传

类微信朋友圈发动态功能初步-图片与视频上传 最近在做一个新的项目,涉及到了关于图片和视频上传和显示的功能,研究了一段时间,总结一下. 使用AFNetworking上传图片(可一次上传多张图片,包含不同类型png, jpeg)和视频 1 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 2 3 AFHTTPRequestOperation *operation = [manager P

基于h5的图片无刷新上传(uploadifive)

基于h5的图片无刷新上传(uploadifive) uploadifive简介 了解uploadify之前,首先了解来一下什么是uploadify,uploadfy官网,uploadify和uploadifive是一家的,他们都是基于jquery的插件,都支持多文件异步上传,支持显示上传进度,不同的是uploadify基于swfUpload这一开源无刷新上传插件开发,基于flash,而uploadifive则是基于html5,不依赖于flash. 基于他们的不同点,我们可以根据自己的需求来进行选

div中粘贴图片并上传服务器 div中拖拽图片文件并上传服务器

应用简介:此文主要是描述如何在前端div中直接ctrl+v 粘贴图片,并上传到服务器,包括拖拽图片文件到div中 应用场景描述:用QQ或者其它切图软件截图,在指定的div中ctrl+v 粘贴并显示,点击上传按钮,图片上传到服务器.类似实现了此功能的网站有 知乎,强力建议博客园实现此功能,                     写博客时插入图片方便的多. 适用环境:本代码目前适用谷歌浏览器,其它浏览器需要稍微改良一下即可,问题不大. 开发环境:vs2015 mvc 不说废话了,开始吧: 1:首先

OpenCart多图片拖放式上传管理器

OpenCart多图片拖放式上传管理器 OpenCart多图片拖放式上传管理器   4 评价  |  如果您对本商品有什么问题或经验,请在此留下您的意见和建议! 后台登录信息: 用户名: demo 密码: demo后台演示网址型 号: COC-A0006 ¥170.00 税前: ¥170.00 购买数量: +- * 扩充功能安装:              --- 请选择 ---                          自己安装                             

CANVAS运用-对图片的压缩上传(仅针对移动浏览器)

最近在移动端设计头像上传功能时,原本是以<input type="file">直接通过formData上传,然而实际使用情况是:对于过大的图片(高像素手机所拍摄的照片等)上传时间过长会导致上传失败,而每次都上传原始大小的图片(后台处理压缩)十分影响用户体验,所以研究了一下通过canvas压缩图片并上传的方法,以下是整理的一些思路和心得: 一.<input type="file">获取本地图片,并将图片绘制到画布中.此处的难点在于:由于浏览器的