首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在LinkedIn中实现像React.js编辑背景这样的照片编辑功能?

如何在LinkedIn中实现像React.js编辑背景这样的照片编辑功能?
EN

Stack Overflow用户
提问于 2020-12-23 14:28:21
回答 1查看 453关注 0票数 0

谁有经验或想法如何实现编辑照片功能,如在LinkedIn编辑照片或背景在React.js?

这是我想要的功能。

  1. 可以上传图像
  2. 显示图像
  3. 编辑上传图像
  4. 放大/放大
  5. 旋转
  6. 删除

EN

回答 1

Stack Overflow用户

发布于 2020-12-24 05:03:16

使用反应器包,它是cropper.js的一个反应版本。您可以使用它来执行所需的所有功能。在此代码中需要进行一些更改,也可以从cropper.js中添加旋转功能。

代码语言:javascript
运行
复制
import React, { useState, useRef } from "react";
import Cropper from "react-cropper";
import Button from "@material-ui/core/Button";
import "cropperjs/dist/cropper.css";
import Grid from '@material-ui/core/Grid';
import IconButton from '@material-ui/core/IconButton';
import Tooltip from '@material-ui/core/Tooltip';
import CheckCircleIcon from '@material-ui/icons/CheckCircle';
import ArrowForwardIcon from '@material-ui/icons/ArrowForward';
import ArrowBackIcon from '@material-ui/icons/ArrowBack';
import ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';
import ArrowUpwardIcon from '@material-ui/icons/ArrowUpward';
import CancelIcon from '@material-ui/icons/Cancel';

import { makeStyles } from '@material-ui/core/styles';

const useStyles = makeStyles((theme) => ({
button: {
    backgroundColor: "#2774b8",
    '&:hover': {
        backgroundColor: "#2774b8",
    }
},
toolsCtr: {
    display: 'flex',
    padding: '0.5rem'
},
tooltip: {
    marginRight: '0.5rem'
},
icnBtn: {
    padding: '8px',
    borderRadius: '3px',
    backgroundColor: '#f0f8ff'

},
icn: {
    fontSize: '1.5rem',
    color: '#2774b8'
},
cropperCtr: {
    border: '2px solid #d9e5f0'
}
}))



export default function Crop(props) {
const cropperRef = useRef();
 const classes = useStyles();
const [uploadedImg, setUploadedImg] = useState(props && props.image)
const [croppedLiveUrl, setCoppedLiveUrl] = useState("");
const [croppedData, setCoppedData] = useState({ url: "", data: {} });

const selForProcessing = () => {
    props.useImage(croppedLiveUrl);
}


const _onMoveCropBox = () => {

    if (null !== cropperRef.current) {
        
setCoppedLiveUrl(cropperRef.current.cropper.getCroppedCanvas().toDataURL());
        setCoppedData({ url: "", data: {} });
    }
};

const _onMoveImageLeft = () => {
    if (null !== cropperRef.current) {
        cropperRef.current.cropper.move(-10, 0);
    }
}

const _onMoveImageRight = () => {
    if (null !== cropperRef.current) {
        cropperRef.current.cropper.move(10, 0);
    }
}

const _onMoveImageTop = () => {
    if (null !== cropperRef.current) {
        cropperRef.current.cropper.move(0, -10);
    }
}

const _onMoveImageBottom = () => {
    if (null !== cropperRef.current) {
        cropperRef.current.cropper.move(0, 10);
    }
}

return (
    <React.Fragment>
        <div className={classes.cropperCtr}>
            <Grid container spacing={2}>
                <Grid item xs={12} sm={12} md={12} lg={12}>

                    <Cropper
                        ref={cropperRef}
                        src={uploadedImg}
                        style={{ height: 400, width: "100%", overflow: 
      'scroll' }}
                        guides={false}
                        crop={() => { _onMoveCropBox() }}
                        crossOrigin={"true"}
                        autoCrop={false}
                        movable={true}
                        move={() => { _onMoveImageTop() }}

                    />

                </Grid>
            </Grid>
            <div className={classes.toolsCtr}>

                <Tooltip title="Use Selection" aria-label="use" className=. 
      {classes.tooltip}>
                    <IconButton className={classes.icnBtn} onClick={() => {
                        selForProcessing()
                    }}>
                        <CheckCircleIcon className={classes.icn} />
                    </IconButton>
                </Tooltip>

                <Tooltip title="Move Left" aria-label="left" className= 
      {classes.tooltip}>
                    <IconButton className={classes.icnBtn} onClick={() => {
                        _onMoveImageLeft()
                    }}>
                        <ArrowBackIcon className={classes.icn} />
                    </IconButton>
                </Tooltip>

                <Tooltip title="Move Right" aria-label="right" className= 
          {classes.tooltip}>
                    <IconButton className={classes.icnBtn} onClick={() => {
                        _onMoveImageRight()
                    }}>
                        <ArrowForwardIcon className={classes.icn} />
                    </IconButton>
                </Tooltip>

                <Tooltip title="Move Top" aria-label="top" className=. 
        {classes.tooltip}>
                    <IconButton className={classes.icnBtn} onClick={() => {
                        _onMoveImageTop()
                    }}>
                        <ArrowUpwardIcon className={classes.icn} />
                    </IconButton>
                </Tooltip>

                <Tooltip title="Move Down" aria-label="down" className={classes.tooltip}>
                    <IconButton className={classes.icnBtn} onClick={() => {
                        _onMoveImageBottom()
                    }}>
                        <ArrowDownwardIcon className={classes.icn} />
                    </IconButton>
                </Tooltip>

               
            </div>
        </div>
    </React.Fragment >
);
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65425929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档