使用Cropper进行图片剪裁上传

2023-05-16

在项目中,需要多上传的图片按照比例和尺寸进行裁剪,这类场景在一些CMS系统中是比较常见的,尤其是大部分的文章现在要适配PC、Mobile两种平台,文章的封面图等便需要按照尺寸做裁剪,以便于应用到不同的场景和平台上。

项目地址:https://github.com/fengyuanchen/cropper
文档:https://github.com/fengyuanchen/cropper/blob/master/README.md

在页面中引入cropper.css和copper.js

 <div class="cut-container" style="width: 750px;height: 400px;margin:20px 30px;border:dashed #cacaca 1px;">
 </div>

 <script>
    $img.cropper({
        aspectRatio:picScale.width/picScale.height,
        autoCrop:false,
        //minCropBoxWidth:216,
        //minCropBoxHeight:144,
        zoomable:false,
        scalable:false,
        rotatable:false,
        //autoCropArea:0.01,
        ready:function(){
            $img.cropper('crop');
            $img.cropper('setData',{
                width:picScale.bWidth,
                height:picScale.bHeight
            });
        }
    });
    $img.on('cropmove',function(e){
        var data=$img.cropper('getData');
        if(data.width<picScale.width||data.height<picScale.height){
            e.preventDefault();
        }
    });
    $img.on('cropend',function(e){
        var data=$img.cropper('getData');
        if(data.width<picScale.width||data.height<picScale.height){
            $img.cropper('setData',{ width:picScale.width,
                height:picScale.height});
        }
    });
 </script>

这里有几个参数需要注意下:
aspectRatio:设定截取的结果图片是宽高比例,例如16:9、3:4或者1:1等
minCropBoxWidth和minCropBoxHeight:截取框的最小宽度和最小高度,说截取框是因为这个是相对于页面的,也就是真是的页面像素,而不是相对于图片的
zoomable、scalable、rotatable:这几个都是图片控制的属性,从字面也比较好理解
autoCropArea:这里是一个比例值,设定默认情况下,截取的内容相对于图片的面积,0.8代表整个图片的80%都处于截取框内。

因为autoCropArea的原因,当你上传不同尺寸的图片时,也为界面显示大小不一样,截取框的也大小不一。如果你需要一个视觉上固定大小的截取框,这种情况下,是做不到的。

另外,minCropBoxWidth和minCropBoxHeight也是相对于页面的像素,所以你无法设定默认要截取最小像素,例如我们像需要截取个400x400素的图片,如果我们上传的是高像素的大图,因为页面级400像素,涵盖的图片实际上的像素,可能会远大于400像素。

针对于这种情况,我通过ready事件和cropmove、cropend事件进行了处理,代码中被注释的是最初无效的方式,将autoCrop设定为false,通过代码的方式进行截取框的设置,通过$img.cropper(‘setData’,params)便可以直接设定截取框的宽高,令人惊喜的是这里的宽高是相对于图片的像素控制,设定的像素值就是最终截取后图片的像素。

这种情况很便利,但是为了实现最小尺寸或者最大尺寸限制,便需要注册两个额外的事件,在cropmove通过$img.cropper(‘getData’)获取width和height信息,判断相关限制,如果超过,则通过preventDefault()取消事件响应,但是这种情况不太精准,无法准备模拟到临界状态,有可能一次move事件,就超过临界值的,这种情况下,也因为这个判断,无法恢复到临界状态以内,所以在通过cropend事件,对于超出临界状态的情况,强制设定到临界状态。

以上是截图处理部分,另外在后期上传的时候,可以通过form表单的方式进行(另外一种是通过将图片转化为Base64编码),这里通过$img.cropper(“getCroppedCanvas”)获取到canvas并调用其toBlob方法将数据转化为二进制用来构造FormData。

<script>
$img.cropper("getCroppedCanvas").toBlob(function(blob){
    var formData=new FormData();
    formData.append('files',blob,file.name);

    $.ajax({
        method:"post",
        url: urlConfig.upload, //用于文件上传的服务器端请求地址
        data: formData,
        processData: false,
        contentType: false,
        success:function(result){
            //do something
        }
    });
});
</script>

不过这里有兼容性问题,toBlob方法并不是所有的浏览器都实现了的,不过好在有兼容性的解决方案。
项目地址:https://github.com/blueimp/JavaScript-Canvas-to-Blob

本文首次发布于: http://skysper.me/2017/06/how-to-use-cropper
完整示例和源码可参考demo:http://skysper.me/demos/cropper-demo.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Cropper进行图片剪裁上传 的相关文章

  • 嵌入式C语言基础知识 -- 函数指针&回调函数&结构体指针

    目录 一 函数指针 xff1a 什么是函数指针 xff1f 函数指针的三种定义方式 xff1a xff08 1 xff09 先定义出函数的类型 xff0c 再通过类型定义函数指针变量 xff08 2 xff09 先定义出函数指针的类型 xf
  • 常见的SSL证书错误代码及解决方法

    有时候SSL证书明明安装了 xff0c 但是为什么不出现绿色小锁呢 xff1f 浏览器总是报错 xff0c SSL证书明明已经安装好了 xff0c 怎么突然访问不显示绿色安全锁呢 xff1f 针对这些问题 xff0c 整理出一些常见的SSL
  • Tomcat 8.5和Tomcat 9安装SSL证书的教程

    第一步 xff1a 准备好所需要的证书文件 xff0c Tomcat8 5和Tomcat9部署ssl证书一般使用JKS文件 xff0c 如果有Pem和key文件 xff0c 也需要合成JKS文件 第二步 xff1a 打开tomcat配置文件
  • 浅谈人工智能(AI)

    人工智能 AI 一 人工智能简介 1 1 人工智能定义和发展历史 人工智能 xff08 Artificial Intelligence xff09 xff0c 英文缩写为AI 它是研究 开发用于模拟 延伸和扩展人的智能的理论 方法 技术及应
  • 睿智的目标检测31——非极大抑制NMS与Soft-NMS

    注意事项 Soft NMS对于大多数数据集而言 xff0c 作用比较小 xff0c 提升效果非常不明显 xff0c 它起作用的地方是大量密集的同类重叠场景 xff0c 大量密集的不同类重叠场景其实也没什么作用 xff0c 同学们可以借助So
  • ubuntu18.04 安装Pangolin

    按照Github上面的教程走即可 xff0c 非常简单 https github com stevenlovegrove Pangolin 首先要安装一些必要的库 Glew xff1a sudo apt get install libgle
  • freertos 学习 资源整理

    1 freertos 官方网站 freertos 官方网站 https www freertos org index html 源码下载 xff1a https sourceforge net projects freertos 2 如何下
  • openwrt: ipq4019 路由 资料汇总

    参考网站 https openwrt org 代码 https github com openwrt openwrt releases tag v18 06 1 wget https github com openwrt openwrt a
  • IT行业ToB销售为什么这么难

    IT行业ToB销售为什么这么难 华东企业服务IT圈 4天前 背景 xff1a 笔者IT行业从业14年 xff0c 干过售后 售前 销售 创过业 xff0c 属于那种基本出去拜访客户不需要售前那种 xff0c 复杂的技术方案自己操刀才放心 x
  • 【Linux编程】守护进程(daemon)详解与创建

    本文主要参考自 xff1a linux系统编程之进程 xff08 八 xff09 xff1a 守护进程详解及创建 xff0c daemon 使用 一 概述 Daemon xff08 守护进程 xff09 是运行在后台的一种特殊进程 它独立于

随机推荐

  • Android studio svn使用方法

    步骤 一 设置忽略文件 可参考工程目录下的 gitignore文件 iml DS Store externalNativeBuild local properties idea libraries idea modules xml idea
  • linux lsusb命令的安装及简单使用

    在 Linux 中我们可以使用 lsusb 来列出 USB 设备和它的属性 xff0c lsusb 会显示驱动和内部连接到你系统的设备 直接在控制台输入 lsusb 即可 安装 如果无法运行 lsusb xff0c 使用以下命令安装 xff
  • 算法总结

    在2020年的时候 xff0c 我第一次接触了C 43 43 编程 xff0c 那时的我是一位四年级的小学生 xff0c 觉得挺好玩的 xff0c 爸爸就给我推荐了一门课程 程序设计与算法 xff08 一 xff09 C语言程序设计 xff
  • ubuntu16.04安装docker

    ubuntu16 04安装docker 开始安装 开始安装 由于apt官方库里的docker版本可能比较旧 xff0c 所以先卸载可能存在的旧版本 xff1a span class token function sudo span span
  • docker命令中的/bin/bash

    docker run i t tomcat bin bash 中的 bin bash的作用是因为docker后台必须运行一个进程 xff0c 否则容器就会退出 xff0c 在这里表示启动容器后启动bash
  • 如何将文件从本机上传到docker容器

    1 如何从docker容器中下载文件 xff1a docker span class token function cp span container created path span class token operator lt sp
  • libjpeg.so.8: cannot open shared object file: No such file or directory.

    在docker容器里执行carla的PythonAPI报错 xff1a libjpeg so 8 cannot span class token function open span shared object file No such s
  • Docker容器图形界面显示的配置方法

    参考博客 0 环境说明 Ubuntu 16 04 docker 19 03 12 因为要在docker中用pygame xff0c 要用到显示器 xff0c 这个时候需要解决这个Docker 可视化 的问题 原理简介 原理上可以把docke
  • 在docker中运行carla

    参考carla文档 ubuntu18 04 carla0 9 9 docker19 03 12 Docker Installation Docker CE For our tests we used the Docker CE versio
  • Pyglet设置窗口标题

    Pyglet教程 Caption The window s caption appears in its title bar and task bar icon on Windows and some Linux window manage
  • Linux 解决远程连接的 “Gtk-WARNING **: cannot open display;”

    转发 ssh Y username 64 ip 使用 Y 参数实际上是授权了 X11 转发 xff0c 这样就可以看到来自远端的 gtk 图形窗口了 span class token function man span span class
  • android jni调试 - 堆栈分析

    一 环境 xff1a windows rk3399 android 7 1 二 奔溃信息 pid 13544 tid 13639 name no localmeeting gt gt gt com sino localmeeting lt
  • CFileDialog的使用[转]

    由于项目需要 xff0c 查阅了一下CFileDialog类 xff0c 以满足程序自动读取配置文件的需求 xff0c 现在小小记录一下 xff01 CFileDialog类封装了Windows常用的文件对话框 xff0c 提供个一种简单的
  • 记录一下c/c++的几种计时方式

    include lt iostream gt include lt string gt include lt chrono gt void Run for int i 61 0 i lt 10000000 i 43 43 void time
  • [转载] 强化学习开源框架整理

    转载 https zhuanlan zhihu com p 582396276 本篇主要是介绍了不同的 RL 开源工作 xff0c 包括环境开源工作和算法开源工作 xff0c 同时关注这些开源工作对于多机多卡并行分布式训练的支持 算法框架
  • tf模型在C++部署

    tensorflow训练好的模型使用ONNX Runtime在C 43 43 部署 tf模型转onnx使用tf2onnx 在前面的文章有讲到c 43 43 调用tf keras的模型 环境 ubuntu20 04cuda 11 6cudnn
  • Google Breakpad 之一,跨平台crash 处理上报系统简介

    C C 43 43 程序最棘手的时候就是一个字 挂 xff0c 总是经常和不经常的挂掉 xff0c 尤其是那些线上的不经常挂的情况 xff0c 光看日志定位问题真的很难 为解决C挂挂的问题 xff0c 有必要提供一个跨平台的crash处理系
  • ubuntu14.04更换内核为3.14

    查看ubuntu14 04支持的内核版本的命令 xff1a atp cache showpkg linux headers 现在Ubuntu14 04安装完成后为4 4 0的内核 xff0c 若要降低内核版本 xff0c 操作方法如下 xf
  • 回首2013,这一年的坚持

    2013年 xff0c 眨眼间已悄悄流逝 这一年回味起来 xff0c 总是那么美 xff0c 充满快乐 xff0c 令人陶醉 一 生活篇 2013年对我来说 xff0c 是快乐的一年 在这一年里 xff0c 遇见了很多美丽的景色 xff0c
  • 使用Cropper进行图片剪裁上传

    在项目中 xff0c 需要多上传的图片按照比例和尺寸进行裁剪 xff0c 这类场景在一些CMS系统中是比较常见的 xff0c 尤其是大部分的文章现在要适配PC Mobile两种平台 xff0c 文章的封面图等便需要按照尺寸做裁剪 xff0c