• 图片上传裁剪react-cropper


    效果图

    安装插件

    npm  i  react-cropper

    或者

    yarn  add  react-cropper

    主要代码

    1. import React, { useRef, useState } from 'react';
    2. import Cropper from 'react-cropper';
    3. import 'cropperjs/dist/cropper.css';
    4. import './index.less';
    5. import { UploadOutlined } from '@ant-design/icons';
    6. import { Upload, Button, Space, Divider } from 'antd';
    7. function cropper() {
    8. const cropperRef = useRef(null);
    9. const [imgsrc, setImgsrc] = useState(null); // 裁剪好的imgsrc
    10. const [image, setImage] = useState("https://img2.baidu.com/it/u=1361506290,4036378790&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500"); // 记录图片
    11. const handleCrop = () => {
    12. const imageElement: any = cropperRef?.current;
    13. const cropper: any = imageElement?.cropper;
    14. const back64Cropper = cropper.getCroppedCanvas().toDataURL();
    15. console.log(cropper.getCroppedCanvas().toDataURL("image/jpeg"), "裁剪的base64编码");
    16. const base64Data = back64Cropper; // base64 格式的图像数据
    17. const url = base64ToUrl(base64Data); // 转换为 URL
    18. console.log("剪切url=", url); // 输出 URL
    19. setImgsrc(url);
    20. };
    21. function base64ToUrl(base64Data: any) {
    22. const blob = base64ToBlob(base64Data); // 将 base64 转为 Blob
    23. const url = URL.createObjectURL(blob); // 生成 URL
    24. return url;
    25. }
    26. function base64ToBlob(base64Data: any) {
    27. const byteString = atob(base64Data.split(',')[1]); // 将 base64 的数据部分解码成二进制数据
    28. const mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0]; // 获取 MIME 类型
    29. const ab = new ArrayBuffer(byteString.length);
    30. const ia = new Uint8Array(ab);
    31. for (let i = 0; i < byteString.length; i++) {
    32. ia[i] = byteString.charCodeAt(i);
    33. }
    34. return new Blob([ab], { type: mimeString }); // 生成 Blob 对象
    35. }
    36. const replaceImg = (img) => {
    37. console.log(img.file, "img");
    38. // 通过FileReader读取用户选取的文件
    39. const reader = new FileReader();
    40. reader.readAsDataURL(img.file.originFileObj);
    41. //加载图片后获取到图片的base64格式
    42. reader.onload = ({ target: { result } = {} }) => {
    43. console.log(result, "base64");
    44. //更新替换为目标图片
    45. setImage(result);
    46. };
    47. return false;
    48. };
    49. return (
    50. <div className='copy'>
    51. <Cropper
    52. ref={cropperRef}
    53. // 你所需要剪切图片的路径
    54. src={image}
    55. // 设置其他相关参数例如裁剪框宽高比裁剪框移动限制等
    56. style={{ height: 400, width: '100%' }}
    57. // 裁剪比例
    58. aspectRatio={16 / 9}
    59. />
    60. <div className='copy-but'>
    61. <Space>
    62. <Upload fileList={[]} onChange={replaceImg} accept="image/*">
    63. <Button size='large' className="upload" icon={<UploadOutlined />}>
    64. 选择图片
    65. Button>
    66. Upload>
    67. <Button size='large' className="button" type="primary" onClick={handleCrop}>
    68. 确定裁剪
    69. Button>
    70. Space>
    71. div>
    72. <div className='copy-img'>
    73. <Divider plain>裁剪好的图片Divider>
    74. <div style={{ minHeight: "300px", minWidth: "500px", border: "1px solid #ccc", display: "flex", justifyContent: "center", alignItems: "center"}}>
    75. <img src={imgsrc} alt="" />
    76. div>
    77. div>
    78. div>
    79. )
    80. }
    81. export default cropper

  • 相关阅读:
    某基金投资公司绩效考核设计项目成功案例纪实
    《计算机病毒技术及其防御》 第一章 课后练习详解
    中国针织行业市场深度分析及发展规划咨询综合研究报告
    【大模型AIGC系列课程 3-8】AI 代理的应用
    某团实习面经
    HTML DOM 对象
    alsa音频pcm设备之i2c调试
    实验三 Servlet 相关技术
    Spring Cloud Consul 从入门到精通
    ISR实现RDN图像增强
  • 原文地址:https://blog.csdn.net/xiao970615/article/details/140351133