图像裁剪器 Cropperjs

前端npm包- CropperJS 提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。 阅读详情

近日前端项目中,需要实现上传图片、支持自定义裁剪,生成海报的功能。该项目采用Taro(react语法)实现。具体实现步骤如下:

1、插件安装

yarn add cropperjs -S 

2、引入

在项目中引入cropperjs,一定不要忘记引入样式

import Cropper from "cropperjs"
import "cropperjs/dist/cropper.css"

3、代码实现

import Taro, { Component } from "@tarojs/taro"
import { View, Image, Button } from "@tarojs/components"

import * as Api from "@/api/light"

import { to } from "@/utils/router"
import { toast } from "@/utils/feedBack"
import { lightShare } from "@/utils/share"

import "./index.less"

import Cropper from "cropperjs"
import "cropperjs/dist/cropper.css"
export default class Index extends Component {
  state = {
    picture_img: "",
    afterImg: "", // 确认裁剪的图片
    produceImg: "", // 生成图片
    myCropper: null,
    isUpload: false, // 是否已上传图片
    isCreated: false // 是否已裁剪生成图片
  }

  componentDidShow() {
    const { code = "" } = this.$router.params

    lightShare({
      link: `${window.location.href
        .split("?")[0]
        .replace("makePoster", "light")}?code=${code}`
    })
  }

  componentDidMount() {
    const options = {
      viewMode: 1,
      dragMode: "none",
      initialAspectRatio: 1,
      aspectRatio: 0.8,     // 设置宽高比例
      preview: ".before",
      background: true,    //显示容器的网格背景。(就是后面的马赛克)
      autoCropArea: 0.6,
      zoomOnWheel: false,
      ready: () => {
        const { width, height } = this.myCropper.getContainerData().   // 获取上传图片宽高信息
        this.myCropper.setCropBoxData({        //  设置裁剪区域(初始设置最大裁剪区域)
          width,
          left: 0,
          top: 0
        })
      }
    }
    this.myCropper = new Cropper(this.img.imgRef, options)
  }

  toBack = () => {
    to({ name: "light" })
  }

  // 上传图片
  onPicture = async () => {
    Taro.chooseImage({
      count: 1,
      success: res => {
        this.setState({
          picture_img: res.tempFilePaths[0],
          isUpload: true
        })
      },
      fail: e => {
        console.log(e)
      }
    })
  }

  // 生成海报
  createPoster = async () => {
    const { picture_img, afterImg, isCreated, produceImg } = this.state
    if (!picture_img) return toast("请上传照片!")
    const { base_url, img_url } = await Api.sharePoster({
      avatar_base64: afterImg
    })
    this.setState({
      produceImg: base_url + img_url,
      isCreated: true,
      isUpload: true
    })
  }

  // 取消
  onCancel = () => {
    const { isUpload } = this.state
    this.setState({
      isUpload: false,
      picture_img: ""
    })
  }

  // 确认裁剪
  onConfirm = () => {
    const pic = this.myCropper
      .getCroppedCanvas({
        imageSmoothingQuality: "high"
      })
      .toDataURL("image/jpeg")
    this.setState({
      afterImg: pic,
      isUpload: false
    })
  }

  render() {
    const {
      picture_img,
      isUpload,
      afterImg,
      isCreated,
      produceImg
    } = this.state
    return (
      <View className="container">
        {!produceImg && isUpload ? (
          <View className="poster-mask">
            {/* 裁剪区域 */}
            <View className="img-container">
              <Image
                className="img-area"
                src={picture_img}
                // src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2Fa%2F53f550c675dd9.jpg&refer=http%3A%2F%2Fpic1.win4000.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1631435691&t=8ef60ec374e799bf4cfb4f3b83b9bb9b"
                ref={img => {
                  this.img = img
                }}
              />
            </View>
            {/* 按钮 */}
            <View className="btn-wrap">
              <Button className="back btn" onClick={this.onCancel}>
                取消
              </Button>
              <Button className="make btn" onClick={this.onConfirm}>
                确认裁剪
              </Button>
            </View>
          </View>
        ) : (
          <View className="poster-img-container">
            {produceImg && isCreated ? (
              <Image src={produceImg} className="poster_img" />
            ) : (
              <View className="make-poster-container">
                {/* 上传海报 */}
                <View className="poster-content">
                  <View className="picture-content">
                    <View
                      className="generate-img"
                      style={
                        afterImg
                          ? { backgroundImage: `url(${afterImg})` }
                          : { backgroundImage: `url(${picture_img})` }
                      }
                    >
                      <View
                        className="caream-wrap"
                        onClick={this.onPicture.bind(this)}
                      >
                        <View className="upload-btn">
                          <Image
                            src="https://img1.halobear.com/upload_page/Fstl6Jkaul8GGuwkweGnxKq02wFs.png"
                            className="camera"
                          />
                          <View className="add">
                            {afterImg ? "替换" : "添加"}照片
                          </View>
                        </View>
                      </View>
                    </View>
                  </View>
                </View>
                {/* 按钮  返回首页、生成海报 */}
                <View className="btn-wrap">
                  <Button className="back btn" onClick={this.toBack}>
                    返回首页
                  </Button>
                  <Button className="make btn" onClick={this.createPoster}>
                    生成海报
                  </Button>
                </View>
              </View>
            )}
          </View>
        )}
      </View>
    )
  }
}

4、效果图

在这里插入图片描述

5、常用参数options

 1、viewMode —— 定义cropper的视图模式
	(https://img-blog.csdnimg.cn/8e0ab5f02ad34b298a8d72a6e58a089b.png)
	  类型: Number;默认:0;
      0: 无限制 (3可以移动到2外)
      1: 限制裁剪框不超过画布的大小。(3只能在2内移动)
      2:限制最小画布大小以适合容器。如果画布和容器的比例不同,则最小画布将被维度之一的额外空间包围。(2不全部铺满1)
      3:限制最小画布尺寸以填充适合容器。如果画布和容器的比例不同,容器将无法在其中一个维度中容纳整个画布。 (2整个填充1)

 2、dragMode —— 定义cropper的拖拽模式。
      类型: String;默认:'crop'
      'crop': 创建一个新的裁剪框
      'move': 移动画布
      'none': 没做什么

 3、aspectRatio —— 定义裁剪框的宽高比
      类型: Number;默认: NaN
      定义裁剪框的初始纵横比。默认情况下,它与画布(图像包装器)的纵横比相同。

 4、background —— 显示容器的网格背景(就是后面的马赛克)
 	  类型: Boolean;默认: true
 5、modal —— 显示图片上方的黑色模态并在裁剪框下面。
      类型: Boolean;默认: true
 6、guides —— 显示在裁剪框内的虚线。
      类型: Boolean;默认: true
 7、autoCrop —— 当初始化时,可以自动生成图像。(就是自动显示裁剪框,改成false裁剪框自动消失)
	  类型: Boolean;默认: true

 8、autoCropArea —— 自动裁剪区域
      类型: Number;默认值:(0.8图像的 80%)
      它是一个介于 0 和 1 之间的数字。定义自动裁剪区域大小(百分比)。

 9、ready —— 插件准备完成执行的函数(只执行一次)
      类型: Function;默认: null

5、常用方法

   1、getContainerData() —— 输出容器大小数据
        类型: Object
        width: 容器的当前宽度 ;height: 容器的当前高度

   2、getData([rounded])  —— 输出最终裁剪的区域位置和大小数据
   	    https://img-blog.csdnimg.cn/0092151f621d4346a3081ccd6ac53321.png
        rounded 类型:Boolean 默认:false;设置true可以获取其所有数据;
        返回的数据类型:Object;
        - x裁切框距离左边的距离
        - y裁切框距离顶部的距离
        - width裁切框的宽度
        - height裁切框的高度
        - rotate裁切框的旋转的角度
        - scaleX缩放图像的横坐标
        - scaleY缩放图像的纵坐标

   3、setData(data) —— 用新数据改变裁切区域的位置和大小(以原始图像为基础)。
        data类型: Object

   4、setCropBoxData —— 输出剪切框的位置和大小数据
   		返回的数据类型:Object;
   		- left剪切框距离左边的距离
   		- top剪切框距离顶部的距离
  		- width剪切框的宽度
  		- height剪切框的高度

6 、结尾

以上内容为本次项目中所涉及和掌握到的常用参数和方法,更多参数和方法可以自行去cropperjs文档深入了解和学习。
文档链接:cropperjs
.

玩转cropperjs图片裁剪及数据提交文件流互相转换详解 阅读详情

相关推荐

【Vue】基于Cropperjs的图片裁剪对话框

设置裁剪区域的拖动方式,可以是"move"、“resize"或"both”。:设置裁剪视图模式,1 表示方形裁剪,2 表示比例裁剪,3 表示填充裁剪。是一个功能强大的图像裁剪库,可以在Vue项目中实现图像裁剪的功能。:设置裁剪区域的比例,即裁剪区域的宽度和高度之比。:设置预览区域的元素选择器,用于显示裁剪后的图片。:设置初始比例,即裁剪区域的宽度和高度之比。// 设置视图模式为限制在裁剪框内。// 将需要裁剪的图片传进来。// 自动选择裁剪区域的大小。:设置自动裁剪区域的大小。导入cropper库。

qq_40205510的博客 681

CropperJS中文文档(翻译自Cropper.js原英文文档)

Cropper.js JavaScript 图片裁剪工具 官网 Photo Editor - Cropper.js的高级示例。 jquery-cropper - Cropper.js 的 jQuery 插件包装器。 A schematic diagram for data’s properties 目录 快速上手 配置 方法 事件 无冲突 支持的浏览器 相关项目 快速上手 npm安装 npm install cropperjs CDN: <link href="/path/to/cro

简廉的博客 1万+

image-cropper-taro:基于taro框架的高性能图片裁剪组件

基于taro的高性能图片裁剪组件 支持移动 支持旋转 支持缩放 可导出绘制的图片的本地地址 使用 下载代码 赋值src/components/ImageCropper 下的文件到你的项目中 引入import ImageCropper from "@/components/ImageCropper" 使用<ImageCropper imgSrc='xxx.png'> 参数说明 属性 类型 描述 必填 imgSrc String 图片地址 是 cut_ratio Number 裁剪框的 宽/高 比 否 img_height Number 图片的高度 否 img_width Number 图片的宽度 否 img_left Number 图片相对屏幕的左边距 否 img_top Number 图片相对屏幕的上边距 否 如何拿到绘制的图片地址 class demo extend Component{

cropperjs的简单使用

前言 最近发现了cropperjs,可以用于裁剪图片,特点来踩一下坑。

weixin_41897680的博客 1万+

RocketMQ源码分析之消息轨迹

文章目录前言一、消息轨迹二、消息轨迹源码分析1、producer端2、consumer端三、消息轨迹中存储的信息1.TraceContext2.TraceBean3.TraceType四、总结 前言   本篇文章将会从以下方面介绍消息轨迹:什么是消息轨迹?如何启用消息轨迹?示例demo、消息轨迹的源码分析和消息轨迹中存储的信息。最后会用一张图来总结消息轨迹的工作原理。 一、消息轨迹 1.什么是消息轨迹? 消息轨迹是用来跟踪记录消息发送、消息消费的轨迹。 2.如何启用消息轨迹? broker端 需要在b

不爱学习的小妞博客 1076

Ubuntu20.04 高效安装企业微信的完整指南

本文提供了在Ubuntu20.04系统上高效安装企业微信的完整指南,详细介绍了通过Deepin-wine环境运行Windows版企业微信的步骤和优化技巧。内容包括系统环境检查、依赖安装、企业微信包的获取与安装、首次运行配置及常见问题解决方案,帮助开发者在Ubuntu系统中流畅使用企业微信进行办公通讯。

weixin_42568801的博客 351

【cropperjs】优秀、优雅的前端图片裁剪库

cropperjs组件 图片处理库

此人太懒,没有任何简介 6004

5分钟搞定:用Pyannote和Whisper实现带说话人分离的语音转文字(附完整代码)

本文详细介绍了如何快速构建一个集成了说话人分离功能的语音转文字系统。通过结合OpenAI的Whisper模型进行高精度语音识别和Pyannote模型实现说话人分离,并提供了完整的代码实现、环境搭建指南以及核心的对齐与合并逻辑,帮助开发者高效处理会议录音、访谈等多说话人音频,实现自动化转录。

threejs5artist的博客 635

图片裁剪-cropperjs详解

图片裁剪cropperjs GitHub:https://github.com/fengyuanchen/cropperjs 安装 cnpm install cropperjs 使用 //<!-- Wrap the image or canvas element with a block element (container) --> //图片必须被块级元素所包裹 <div> <img id="image" src="picture.jpg"> </

WikY 3670

INCA基础教程

以软件自带Demo为例记录INCA学习过程,主要内容包括测量与标定。

yunqianrui的博客 6万+

学习Fidder主要掌握的技术——流量篡改

本文介绍了Fiddler工具的三种常用调试方法:1)本地映射-通过保存修改JSON响应文件实现接口数据模拟;2)Composer接口调试-通过修改请求参数快速测试接口异常处理;3)断点调试-在请求/响应过程中拦截并修改数据。这三种方法分别适用于前端开发、接口测试和健壮性验证等场景,能够有效提高调试效率。操作步骤包括保存响应、修改数据、配置规则等关键环节,并提供了详细的界面操作指引。

2301_79022773的博客 353

Vue-cropperjs:轻量级的Vue图片裁剪组件

Vue-cropperjs是一个专为Vue框架设计的高效图片裁剪封装组件,由JavaScript编写,完美融入Vue生态。它基于广受欢迎的cropperjs库,通过Vue组件的形式提供了更简洁的使用方式。这使得在Vue应用中实现图片选取与自定义裁剪变得简单易行,大大提升了前端开发者的工作效率。 ## 核心功能 - **灵活的图片裁剪**:允许用户自由调整裁剪框大小与位置,以满足不同场景下的图片处

gitblog_01270的博客 1079

Multi-Agent

Multi-Agent System(MAS,多代理系统)是分布式人工智能(DAI)领域皇冠上的明珠,其核心思想是通过多个自主、交互、目标导向的智能体(Agent)的协同与竞争,解决单智能体无法或难以高效处理的复杂问题——包括大规模资源调度、多模态数据理解与决策、复杂软件架构的自治运维、甚至未来城市级的交通与能源管理。本文将以结构化分析推理和第一性原理思考。

AI智能探索者的博客 407

Vue图片裁剪组件vue-cropperjs完整使用指南

vue-cropperjs是基于Cropper.js封装的Vue图片裁剪组件,为Vue项目提供专业的图片裁剪功能。该组件支持拖拽调整裁剪区域、实时预览、多角度旋转、缩放等核心功能,适用于用户头像裁剪、产品图片处理等场景。 ## 安装方法 使用npm安装: ```shell npm install --save vue-cropperjs ``` 使用yarn安装: ```shell yarn

gitblog_00776的博客 1010

ICC2: place阶段的clock network delay

设置了set_clock_latency之后,即便没长tree,也会有反标值,显示为clock network delay(ideal)和设置的clock latency值,需要注意的是同时设置set_clock_latency和set_clock_latency -source,clock network delay(ideal)值是二者叠加的。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 316

LLaMA Factory多卡微调的实战教程(持续更新)

本文主要介绍了LLaMA Factory多卡微调的实战教程(持续更新),希望对学习大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 配置环境 2.1 安装虚拟环境 2.2 安装依赖库 2.3 模型选型与下载 2.4 配置多卡环境 3. 运行代码 3.1 构建训练数据 3.2 修改配置文件 3.3 微调 3.3.1 zero3微调 3.3.2 启动API 3.3.3 模型测试

herosunly的博客 25万+

Vue图片裁剪组件vue-cropperjs终极使用指南

在现代Web开发中,图片处理已成为提升用户体验的关键环节。vue-cropperjs作为专为Vue.js设计的图片裁剪工具,将专业的Cropper.js功能与Vue的响应式特性完美融合,为开发者提供了简单高效的图片处理解决方案。 ## 🚀 快速入门:五分钟搭建裁剪环境 ### 环境配置与组件安装 确保您的开发环境满足以下基本要求: - Vue 3.x项目:推荐使用vue-cropperj

gitblog_00017的博客 1104

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

vue图像裁剪器的使用

github地址:https://github.com/fengyuanchen/cropperjs 演示地址:https://fengyuanchen.github.io/cropperjs/ 安装依赖 npm install cropperjs 引入文件 import 'cropperjs/dist/cropper.css'; import Cropper from 'cropperjs'; <p @click="$refs.file.click()">点击修改头像</p>

weixin_42562086的博客 282

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

在vue中使用cropperjs,裁剪图片

今天逛网站,发现一篇文章 5分钟搞定图片裁剪,上传,觉得很酷炫,于是便试了试,特此记录一下 cropperjs:github地址 实现效果: 首先项目中引入这个库:npm i cropperjs -S, 在使用的页面中代码(我用了vant组件,然后css中的px2rem是为了手机适配,为了方便调试看效果,你也可以把css中的样式px2rem改为一个具体的px): <template> ...

misterHao的博客 1247

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Vue Cropperjs 安装与配置完全指南

Vue Cropperjs 是一个基于 Vue.js 的图片裁剪组件,由开发者 Agontuk 创建并维护。它作为 cropperjs 的 Vue 封装版本,简化了在 Vue 应用中集成图片裁剪功能的过程。该项目使用的主要编程语言是 JavaScript,并且借助 Vue.js 框架实现组件化。 ## 关键技术和框架 - **Vue.js**: 被用作基础前端框架,提供响应式视图和组件系统。

gitblog_01219的博客 1450

Cropperjs使用 前端图像裁剪

Cropperjs Demo

qq_63494932的博客 1433

Vue图片裁剪组件vue-cropperjs实战应用指南

在现代Web应用开发中,图片处理功能已成为提升用户体验的关键环节。无论是构建社交平台、电商网站还是内容管理系统,为用户提供直观的图片裁剪功能都显得尤为重要。vue-cropperjs作为专为Vue.js生态设计的图片裁剪解决方案,将强大的Cropper.js功能与Vue的响应式特性完美融合,让开发者能够轻松实现各种图片裁剪需求。 ## 项目环境配置与快速集成 ### 环境要求检查 在开始使用

gitblog_00566的博客 1086

ionic3+angular4 使用cropperJS 完成图片裁剪功能

需求: 图片拍照或者图库选择之后,将图片进行裁剪(图片允许放大,缩小,移动),裁剪框不变 实现: 1.安装cropperjs: npm install cropperjs 2.在页面中导入: 3.裁剪插件初始化 initCropper(){ let image = document.getElementById("imgPrev") as HTMLImageEle...

assassin_0302的博客 1199

Vue项目中使用图片裁切器 cropperjs (头像裁切)

cropperjs官方文档 cropperjs结合element-ui 组件后的显示效果: 1. npm 安装 cropperjs cmd命令行输入:npm install cropperjs --save 2. 导入相关js和css文件 import 'cropperjs/dist/cropper.css' import Cropper from 'cropperjs' 3. 用块元素(容器)包裹图像或画布元素 4. 设置样式,确保图像的大小完全铺满容器 5. 初始化裁切器 <te.

zep 2898

Vue图片裁剪组件vue-cropperjs完全使用指南

在当今的Web应用开发中,图片处理功能已成为不可或缺的一部分。无论您正在构建社交平台、电商网站还是内容管理系统,为用户提供直观的图片裁剪功能都是提升用户体验的关键环节。vue-cropperjs作为专为Vue.js设计的图片裁剪组件,将强大的Cropper.js功能与Vue的响应式特性完美结合,让图片裁剪变得简单而高效。 ## 🚀 5分钟快速集成 ### 环境准备与安装 首先确保您的项目环

gitblog_00931的博客 659

【亲测免费】 推荐使用:Vue-cropperjs - 简化图片裁剪的Vue组件

在当今数字时代,处理图片成为了前端开发不可或缺的一部分。无论是社交应用中的头像上传、电商平台的商品图片编辑还是媒体网站的图像管理,图片裁剪功能都至关重要。今天,我们要向您推荐一个强大的开源工具——**Vue-cropperjs**,它是专为Vue框架设计的图片裁剪封装组件,基于著名的JavaScript图片裁剪库[cropperjs](https://github.com/fengyuanchen

gitblog_00967的博客 887
上一篇: node抓取豆瓣数据
下一篇: 实现预览图片上下滑动关闭效果
伦为JAY下囚
博客等级 码龄7年 52粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值