1.0.1 • Published 1 year ago

react-screenshots-tool v1.0.1

Weekly downloads
-
License
MIT
Repository
-
Last release
1 year ago

react-screenshots

a screenshot cropper tool by react

Install

NPM

Usage

  1. web 中使用
import React, { ReactElement, useCallback } from 'react'
import Screenshots, { Bounds } from 'react-screenshots'
import url from './image.jpg'

interface Bounds {
  x: number
  y: number
  width: number
  height: number
}

export default function App(): ReactElement {
  const onSave = useCallback((blob: Blob, bounds: Bounds) => {
    console.log('save', blob, bounds)
    console.log(URL.createObjectURL(blob))
  }, [])
  const onCancel = useCallback(() => {
    console.log('cancel')
  }, [])
  const onOk = useCallback((blob: Blob, bounds: Bounds) => {
    console.log('ok', blob, bounds)
    console.log(URL.createObjectURL(blob))
  }, [])

  return (
    <Screenshots
      url={url}
      width={window.innerWidth}
      height={window.innerHeight}
      lang={{
        operationUndoTitle: 'Undo',
        operationMosaicTitle: 'Mosaic',
        operationTextTitle: 'Text',
        operationBrushTitle: 'Brush',
        operationArrowTitle: 'Arrow',
        operationEllipseTitle: 'Ellipse',
        operationRectangleTitle: 'Rectangle'
      }}
      onSave={onSave}
      onCancel={onCancel}
      onOk={onOk}
    />
  )
}
  1. electron 中使用
  • electron 中使用可直接加载渲染进程的页面,页面路径为require.resolve('react-screenshots/electron/electron.html'),不推荐自己手动开发主进程,推荐直接使用electron-screenshots模块
interface ScreenshotsData {
  bounds: Bounds
  display: Display
}

interface GlobalScreenshots {
  ready: () => void
  reset: () => void
  save: (arrayBuffer: ArrayBuffer, data: ScreenshotsData) => void
  cancel: () => void
  ok: (arrayBuffer: ArrayBuffer, data: ScreenshotsData) => void
  on: (channel: string, fn: ScreenshotsListener) => void
  off: (channel: string, fn: ScreenshotsListener) => void
}

// 需要在electron的preload中提前初始化这个对象,用于渲染进程与主进程通信
window.screenshots: GlobalScreenshots

Props

interface Bounds {
  x: number
  y: number
  width: number
  height: number
}

interface Lang {
  magnifierPositionLabel: string
  operationOkTitle: string
  operationCancelTitle: string
  operationSaveTitle: string
  operationRedoTitle: string
  operationUndoTitle: string
  operationMosaicTitle: string
  operationTextTitle: string
  operationBrushTitle: string
  operationArrowTitle: string
  operationEllipseTitle: string
  operationRectangleTitle: string
}
名称说明类型是否必选
url要编辑的图像资源地址string
width画布宽度number
height画布宽度number
lang多语言支持,默认中文Partial<Lang>
onSave保存按钮回调(blob: Blob, bounds: Bounds) => void
onCancel取消按钮回调() => void
onOk取消按钮回调(blob: Blob, bounds: Bounds) => void

example

import React from 'react'

function App() {
  return (
    <Screenshot
      url="./example.png"
      width={window.innerWidth}
      height={window.innerHeight}
      onSave={() => {}}
      onCancel={() => {}}
      onOk={() => {}}
    />
  )
}

Screenshot

screenshot

Icons

Iconfont