当前位置:   article > 正文

uniapp vue3 裁剪头像(ksp-cropper) 支持旋转 和 缩放

ksp-cropper

一、前言

自己写个项目,需要用到裁剪头像功能,那肯定就在插件市场搜索,找到了它,感谢作者这个插件,很棒。我的使用环境 uniapp vue3 移动端 Android 真机测试

具体我使用后的效果图如下:下面我主要是详细的补充一下ksp-cropper官方文档

二、使用场景效果图和代码

 解释操作逻辑:我点击右上角三个点图标,进入相册选择图片,得到选择的图片路径赋值给

ksp-cropper 组件,此时进入裁剪模式。点击确认,将得到裁剪后的图片路径。具体代码如下

  1. <template>
  2. <view class="header">
  3. <view @click="goBack">
  4. <u-icon name="arrow-left" color="#fff" size="22px"></u-icon>
  5. </view>
  6. <text style="margin-left: 30rpx;">更换头像</text>
  7. <view class="moreDot" @click="selectNewImg">
  8. <u-icon name="more-dot-fill" color="#fff"></u-icon>
  9. </view>
  10. </view>
  11. <view class="portraitBox">
  12. <image mode="scaleToFill" class="myPortrait" :src="avatorUrl"></image>
  13. </view>
  14. <ksp-cropper
  15. mode="free"
  16. :width="250"
  17. :height="250"
  18. :maxWidth="1024"
  19. :maxHeight="1024"
  20. :url="url" @cancel="oncancel" @ok="onok"></ksp-cropper>
  21. </template>
  22. <script setup>
  23. import {userStore} from '@/stores/user.js';
  24. import { ref,onMounted } from "vue";
  25. const userStoreTemp = userStore();
  26. let url=ref(''); //选择裁剪的图片
  27. let avatorUrl = ref(''); //显示的头像
  28. onMounted(()=>{
  29. avatorUrl.value = userStoreTemp.user.portrait;
  30. });
  31. //返回上个路由页面
  32. const goBack = ()=>{
  33. uni.navigateBack();
  34. }
  35. //选择新的图像
  36. const selectNewImg = ()=>{
  37. uni.chooseImage({
  38. count: 1, //默认9
  39. sizeType: ['original', 'compressed'],
  40. success: function (res) {
  41. console.log(JSON.stringify(res.tempFilePaths));
  42. url.value = res.tempFilePaths[0];
  43. }
  44. });
  45. }
  46. const onok = (res)=>{
  47. console.log("点击确认",res);
  48. url.value = "";
  49. avatorUrl.value = res.path;
  50. };
  51. const oncancel = (res)=>{
  52. url.value = "";
  53. console.log("点击取消",res);
  54. };
  55. </script>
  56. <style scoped lang="less">
  57. .header{
  58. display: flex;
  59. flex-direction: row;
  60. justify-content: space-between;
  61. align-items: center;
  62. background-color: #000;
  63. height: 70rpx;
  64. line-height: 70rpx;
  65. color: #fff;
  66. padding: 8rpx 16rpx;
  67. .moreDot{
  68. padding: 15rpx 15rpx;
  69. }
  70. }
  71. .portraitBox{
  72. padding: 0 16rpx;
  73. .myPortrait{
  74. width: 500rpx;
  75. height: 500rpx;
  76. }
  77. }
  78. </style>

 三、遇到的问题解释

1. 在app移动端状态下,无法上下左右拖拽

答:解决办法是进入源码uni_modules下面,找到ksp-cropper.vue文件,将其中的 event.preventDefault(); event.stopPropagation(); 两行代码注释即可

2. 安卓真机会一直卡在 处理中

答:是因为没在取消 和确定的处理函数中,将url的值设置为空。

3. 点击 确认裁剪 得到的路径是相对路径

_doc/uniapp_temp_1667466828646/canvas/16674669200830.png

这样的路径,可以显示图片,但无法通过 new plus.io.FileReade 读取出来。

我的需求是需要将该图片转化为二进制。我将该相对路径转化成绝对路径后,

  1. //将对象路径转化为绝对路径
  2. let temp = plus.io.convertLocalFileSystemURL('相对路径');
  3. //将fill协议 拼接完成 绝对路径
  4. let imgStr = "file://"+temp;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/287105
推荐阅读