简化的微信小程序剪切头像we-cropper框架案例

微信公众号-图片裁剪并实现上传 看到这个诉求,我就去扒微信的api,发现有个属性叫wx.cropImage是做图片裁剪的,且可以传入对应的裁剪比例。在介入开发后才发现,这个是小程序的api,而非微信公众号的。阅读文档发现,小程序和微信公众号中都有一个叫chooseImage的api,但是返回的数据却不一样,小程序大家开发的都比较多了。选择成功后,返回localIds,是选定照片的本地ID列表,注意这个和小程序是不同的。组件具体的使用,我这里就不赘述了,上述github上有详细的使用文档。2、js代码,实现图片选择&裁剪&上传。 阅读详情

废话不多说,先上图~

目录结构是不是超简单?下面我们来分析一波怎么做。

1.首先将we-cropper框架包添加到自己的小程序项目中,这里我的we-cropper是经过删减的,因为只用到了两个文件;

2.新建cropper和upload这两个page;

cropper页面:

upload页面:

3.点击cropper页面中的圆形头像,可选择图片,跳转到upload页面进行剪切。

4.点击确定之后就看到第一张图所示的效果了。

相关代码贴一贴吧:

cropper.wxml

<view class="container flex">
    <view>
        <image src="{{src}}" class="avatar" bindtap="upload"></image>
        <view class="item flex" bindtap="upload">点我头像</view>
    </view>
</view>

cropper.js

Page({
  data: {
    src: ''
  },

  upload() {
    wx.chooseImage({
      count: 1, // 默认9
      sizeType: ['compressed'], // 可以指定是原图还是压缩图,默认二者都有
      sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
      success(res) {
        const src = res.tempFilePaths[0]

        wx.redirectTo({
          url: '../upload/upload?src=' + src
        })
      }
    })
  },

  onLoad(option) {
    let {
      avatar
    } = option

    if (avatar) {
      this.setData({
        src: avatar
      })
    }
  }
})

upload.wxml

<view class="cropper-wrapper">
  <template is="weCropper" data="{{...cropperOpt}}" />
  <view class="cropper-buttons">
    <view class="upload" bindtap="uploadTap">
      重新选择
    </view>
    <view class="getCropperImage" bindtap="getCropperImage">
      确定
    </view>
  </view>
</view>

upload.js

import weCropper from '../../we-cropper/dist/weCropper.js'

const device = wx.getSystemInfoSync()
const width = device.windowWidth
const height = device.windowHeight - 50

Page({
  data: {
    cropperOpt: {
      id: 'cropper',
      width,
      height,
      scale: 2.5,
      zoom: 8,
      cut: {
        x: (width - 300) / 2,
        y: (height - 300) / 2,
        width: 300,
        height: 300
      }
    }
  },

  touchStart(e) {
    this.wecropper.touchStart(e)
  },

  touchMove(e) {
    this.wecropper.touchMove(e)
  },

  touchEnd(e) {
    this.wecropper.touchEnd(e)
  },

  getCropperImage() {
    this.wecropper.getCropperImage((avatar) => {
      if (avatar) {
        // 获取到裁剪后的图片
        wx.redirectTo({
          url: '../cropper/cropper?avatar=' + avatar
        })
      } else {
        console.log('获取图片失败,请稍后重试')
      }
    })
  },

  uploadTap() {
    const self = this

    wx.chooseImage({
      count: 1, // 默认9
      sizeType: ['compressed'], // 可以指定是原图还是压缩图,默认二者都有
      sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
      success(res) {
        let src = res.tempFilePaths[0]
        // 获取裁剪图片资源后,给data添加src属性及其值
        self.wecropper.pushOrign(src)
      }
    })
  },

  onLoad(option) {
    // do something
    const {
      cropperOpt
    } = this.data
    const {
      src
    } = option

    if (src) {
      Object.assign(cropperOpt, {
        src
      })

      new weCropper(cropperOpt)
        .on('ready', function(ctx) {})
        .on('beforeImageLoad', (ctx) => {
          wx.showToast({
            title: '上传中',
            icon: 'loading',
            duration: 3000
          })
        })
        .on('imageLoad', (ctx) => {
          wx.hideToast()
        })
    }
  }
})

完整demo可直接下载~

项目地址:https://download.youkuaiyun.com/download/java558/10544752

有问题在评论区留言

补充:we-cropper框架存在适配问题,目前已解决,请查看我的另一篇文章:https://blog.youkuaiyun.com/java558/article/details/81111666

头像裁剪【微信小程序、uni-app】 一、子组件,通过插件更改的头像裁剪头像上传裁切/剪切组件 - DCloud 插件市场 <template> <view class="container"> <view class="page-body uni-content-info"> <view class='cropper-content'> <view v-if="isShowImg" class="uni-corpper" :style="'width:'+cro.. 阅读详情

相关推荐

微信小程序we-cropper图片裁剪工具完全指南

本文还有配套的精品资源,点击获取 简介:在微信小程序开发中,经常需要实现图片的裁剪功能。 we-cropper 作为专为小程序设计的图片裁剪工具,提供了一系列API和自定义选项,使得开发者可以轻松集成并为用户提供友好的图片裁剪体验。本指南涵盖了 we-cropper 的基本用法、参数配置、事件监听以及与微信小程序图片处理API的协作,帮助开发者有...

weixin_33628677的博客 5657

小程序图片裁剪we-cropper的使用

小程序涉及到了用户上传头像的功能,用户可以手动选择裁剪区域。 (1)上传头像页面 选择图片,将得到的src地址传递到图片裁剪页面 wx.chooseImage({ count: 1, sizeType: ['compressed'], sourceType: ['album', 'camera'], success: function(res) { ...

Jester的博客 9707

wx-xcropper:小程序图片裁切插件(支持图片缩放、拖动;支持选取框缩放、拖动;支持多种比例裁切;支持多种尺寸裁切;支持多张图片裁切)

xCropper @(关键词)[小程序|图片裁切|多比例|多尺寸|多图] xCropper是一款专为微信小程序开发的图片裁切组件,通过精心的设计与技术实现,配合小程序强大的功能,带来前所未有的裁切体验。特点概述: 功能丰富 :支持图片缩放和拖动;支持裁切框缩放和拖动;支持多种裁切比例;支持多种裁切尺寸;支持多种裁切模式;支持多张图片依次裁切; 操作简单 :多张图片一次裁切,每张图片可选择不同裁切比例;一次选择裁切出多种尺寸 配置简单 :引入组件,配置一个参数即可使用裁切组件 [TOC] xCropper简介 图片裁切是一个非常普通功能,然而微信小程序原生并没有提供;从网上找了几个图片裁切插件功能也都比较简单,且存在各种小问题;因此决定自己尝试开发一个组件,也是抱着抛砖引玉的想法提交到GitHub上,希望大家一起努力完善。 使用 Clone源代码,从 components 目录中把 xcro

微信小程序头像上传以及剪切(使用插件image-cropper)

image-cropper插件引入后,会有很多默认功能,所有需求基本都可以满足; https://github.com/wx-plugin/image-cropper 第一步:在组件中添加image-cropper image-cropper.wxml文件 <view class='image-cropper' catchtouchmove='_preventTouchMove'> <view class='main' bindtouchend="_cutTouchEnd

随身笔记 5127

we-cropper 一款灵活小巧的canvas图片裁剪器

Usage 克隆至本地处理 git clone https://github.com/we-plugin/we-cropper.git npm方式引入 npm install we-cropper --save

WorkBuddy 集成 飞书CLI,全程10分钟,丝滑无比,老板要注意了...

飞书CLI实测:10分钟实现AI操控飞书办公 飞书CLI作为命令行工具,让用户通过简单命令完成飞书各项操作。本文记录了从安装到使用的完整过程:一键安装仅需10分钟,支持200多条命令覆盖飞书全部功能,与AI结合后可实现自然语言办公。实测中成功用语音指令创建了7天发文计划日程,验证了其便捷性。虽然首次认证存在超时问题,但整体体验流畅。该工具将复杂操作简化为自然语言指令,大幅提升办公效率,特别适合需要频繁使用飞书的用户。后续还将探索更多自动化办公场景。

三棱球的专栏 1142

微信小程序使用canvas剪切头像

待续加粗样式

weixin_43910427的博客 982

AI应用架构师总结:智能问答系统用户意图识别的8种方法与实践!

意图识别是智能问答系统的大脑入口,其技术水平决定了系统能否准确捕捉用户的核心诉求。本文系统剖析了从基础规则到前沿PLM的8种核心意图识别方法透明简单,冷启动快,维护成本高。中等规模场景基线,依赖特征工程。利用词义和局部/序列信息,训练成本高。当前最优精度,需大量资源。添加意图灵活,冷启动友好,精度可能略逊。提升鲁棒性,系统变复杂。解决歧义和自然交互的关键(多轮)。增强专业领域理解和推理能力。成功的意图识别模块需要:精准的意图定义(Schema)是前提!

AI云原生与云计算技术学院 1631

微信小程序剪切头像

使用开源插件:git地址 直接将上述项目中的example目录下 把we-cropper文件夹赋值到自己的项目中调用即可。 实现剪切的功能需用两个页面,一个用于展示,一个用于剪切 第一个页面userInfo: wxml: <tui-list-cell padding="0" arrow="{{true}}"> <view class="tui-list-cell" bindtap="chooseImage"> <view>头像</view>

xfy18317776108的博客 742

Android开发实战:5分钟搞定全屏沉浸式状态栏(附完整代码示例)

本文提供了Android开发中实现全屏沉浸式状态栏的完整实战指南。通过对比主题配置、动态代码设置和Window标志位三种方法,详细讲解了如何隐藏状态栏并处理布局适配。文章还涵盖了刘海屏、手势导航等高级适配场景,并附有可直接使用的工具类代码,帮助开发者快速提升应用视觉体验。

weixin_29197699的博客 357

达梦DM8整合Seata AT模式实战:手把手教你搞定分布式事务(含源码修改避坑)

本文详细介绍了达梦DM8数据库与Seata AT模式的深度整合实战,包括环境准备、架构设计、源码适配及分布式事务落地。通过独创性源码改造,解决了Seata官方对达梦数据库AT模式支持的限制,为国产数据库在微服务架构中的应用提供了可靠的事务保障。

weixin_30764771的博客 332

如何快速掌握微信小程序图片裁剪:we-cropper的完整实践指南

we-cropper是一款灵活小巧的canvas图片裁剪器,专为微信小程序开发设计。它提供了简单易用的API和丰富的配置选项,帮助开发者快速实现图片裁剪功能,提升小程序用户体验。 ## 为什么选择we-cropper? 在微信小程序开发中,图片裁剪是许多应用场景的必备功能,如用户头像上传、商品图片处理等。we-cropper作为一款专注于小程序图片裁剪的工具,具有以下优势: - **轻量级设

gitblog_00945的博客 710

python 常见算法(1-50题)

常见的算法题

weixin_58470558的博客 1755

微信小程序关于we-cropper框架对各类机型适配问题 - 已解决

这篇文章是针对上一篇文章做出的适配性修改。 上一章剪切头像完整demo下载地址为:https://download.youkuaiyun.com/download/java558/10544752 开始之前,来张美女镇楼: 实践中发现原本的cropper框架在小米手机和华为P10系列/P20系列的剪切头像页面存在着适配问题。 小米手机上表现为宽高多出1-2px的白边;而华为P10系列手机上表现为屏...

盛国强的博客 3776

骑砍Ⅱ霸主MOD开发(5)-2D界面

本文介绍了2D界面开发的技术框架,主要包括以下内容: 2D界面架构:由多个GauntletLayer(菜单/对话框/定制页面)和SceneLayer(3D页面)组成,支持屏幕切换和管理。 GauntletLayer实现:采用Movie(HTML页面)+ViewModel(动态数据)模式,支持优先级管理、焦点控制和事件响应。 2D控件系统:包括颜色字体、坐标布局、背景图(Sprite/Texture)等配置方式,支持自定义控件开发。 定制化页面开发:详细说明了游戏菜单和对话框的实现方法,包括状态管理、事件回调

骑砍战团&霸主MOD开发 1181

STM32F103待机模式原理与低功耗实战指南

待机模式是嵌入式系统实现超低功耗的核心机制,其本质是通过切断内核域电源(VDD/VDDA)实现微安级静态电流,区别于睡眠/停止模式的状态保持特性。原理上依赖电源域隔离、WKUP引脚事件唤醒与RTC备份域协同,技术价值在于支撑电池供电设备长达数年续航。典型应用场景包括物联网传感器节点、智能电表、便携医疗设备等对功耗极度敏感的终端。工程落地需严格遵循GPIO模拟输入配置、唤醒标志清除、备份域解锁等关键步骤,避免因漏电或误唤醒导致实测电流超标。本文以STM32F103为例,深入解析待机模式的硬件基础与HAL库实现

weixin_32999557的博客 66

微信小程序 头像裁剪功能

下载文件所需文件 https://github.com/we-plugin/we-cropper 找到对应文件,并导入小程序中 文件中核心模块 4. 页面中使用 //wxml <import src="../../we-cropper/we-cropper.wxml"/> // 导入模板 <view class="cropper-wrapper"> <template is="we-cropper" data="{{...cropperOpt.

weixin_45527865的博客 1187

【CANoe示例分析】0002_SOMEIPDemo

该工程由Vector官方提供,作为仿真SOME/IP节点的示例。Demo中介绍了两种仿真SOME/IP节点的方法,一种是基于arxml数据库的仿真,另一种是没有数据库(arxml、fibex)的仿真。无论是哪种形式的仿真,如果想要通过CAPL程序接收或者发送SOME/IP信息,都需要添加交互层的信息,这些信息可以通过添加DLL文件实现,DLL文件路径在CANoe安装目录下的Exec32文件中。

jasonj333 3513

微信小程序上传头像先裁剪图片后上传

使用we-cropper.js实现微信小程序选择图片后先进行剪裁后上传服务器

qq_35269556的博客 1007

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

微信小程序图片裁剪后上传

之后执行裁剪操作并通过getCurrentPages()触发之前页面的上传函数执行上传操作。2.在项目中新建一个page页面imgcorp.名字什么的随便你们自己改都行。可以把we-cropper.js文件放在小程序项目的utils中。这里需要用到小程序裁剪的库we-cropper  下载地址。最近的一个小程序项目中遇到了上传图片过长需要小程序裁剪的问题。imgcorp中的wxml要填入如下代码。imgcorp中的js要填入如下代码。跳转裁剪页面并将图片的链接传过去,3.图片裁剪上传要触发的函数。

qq_41567857的博客 569

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

微信小程序裁剪图片成圆形

前言最近在开发小程序,产品经理提了一个需求,要求微信小程序换头像,用户剪裁图片必须是圆形,也在github上看了一些例子,一般剪裁图片用的都是方形,所以自己打算写一个小组件,可以把图片剪裁成圆形,主要思路就是使用canvas绘图,把剪裁的图片绘制成圆形,另外剪裁图片的窗口还可以移动放大缩小,这个功能就用了微信组件movable-view,好了,该说的也说完了,下面咱们开始撸代码。movable-v...

weixin_33770878的博客 609

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

uniapp 微信小程序使用we-cropper实现图片裁剪

在开发微信小程序时,经常需要实现用户上传图像并进行裁剪操作的功能。为了实现这一需求,使用了uniapp作为开发框架,并结合了we-cropper这一图像裁剪插件来实现图片裁剪的功能。

weixin_71403100的博客 4476

小程序基本命令

onLoad: function () { // 生命周期函数--监听页面加载 onReady: function () { // 生命周期函数--监听页面初次渲染完成 }, onShow: function () { // 生命周期函数--监听页面显示 }, onHide: function () { // 生命周期函数--监...

aiven1637的博客 3558

【亲测免费】 微信小程序图片裁剪工具 we-cropper 安装配置指南

**we-cropper** 是一个专为微信小程序设计的轻量级图片裁剪插件。它利用Canvas技术实现图片的自由裁剪功能,适用于多种场景,如用户头像上传、图片编辑等。本项目采用JavaScript为主要编程语言,并遵循MIT开源协议。 ## 关键技术和框架 - **Canvas**: 核心技术在于HTML5 Canvas元素,用于图像的动态渲染和裁剪。 - **微信小程序环境**: 特别优化以适...

gitblog_09010的博客 1301
上一篇: 微信小程序实用的布局单位vw,vh
下一篇: Android实现聊天机器人之火影忍者
盛国强
博客等级 码龄11年 105粉丝 22原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值