ReactNative: 使用图片裁剪组件ImageEditor组件

一、简介

图片在应用中的使用非常常见,绚丽的图片能使App增色不少。当设计师给开发者一张图片后,有时根据情况需要用到该图片中的某一部分,当然研发可以让设计师再设计一张,其实,还有其他的办法可以实现,例如绘制指定局域的图片、裁剪图片等。在ReactNative中,提供了图片裁剪组件ImageEditor,这个组件可以将一张图片进行任意的裁剪,获取需要的那一部分。ImageEditor组件的API相当简单,仅仅提供了一个静态方法,下面就来研究一下。

二、API

提供的裁剪图片的静态方法如下:

//uri:图片的地址
//cropData:裁剪的规格设置
//success:裁剪成功后的回调
//failure:裁剪失败后的回调
static cropImage(
    uri: string,
    cropData: ImageCropData,
    success: (uri: string) => void,
    failure: (error: Object) => void
  )

裁剪规格内容如下:

//是一个对象
type ImageCropData = {
  /**
   * 裁剪图片的起始位置,x和y为偏移坐标
   */
  offset: {
    x: number,
    y: number,
  },
  /**
   * 裁剪图片的大小。就是按照宽高多少来裁剪
   */
  size: {
    width: number,
    height: number,
  },
  /**
   * 可选值,裁剪完后按照多大尺寸显示
   */
  displaySize?: ?{
    width: number,
    height: number,
  },
  /**
   * 可选值,裁剪完的图片按照什么模式显示
   * resizeMode: 图片显示模式有三个枚举值,如下:
        cover模式只求在显示比例不失真的情况下填充整个显示区域。可以对图片进行放大或者缩小,超出显示区域的部分不显示。
        contain模式是要求显示整张图片, 可以对它进行等比缩小, 图片会显示完整,可能会露出Image控件的底色。
        stretch模式不考虑保持图片原来的宽,高比.填充整个Image定义的显示区域,这种模式显示的图片可能会畸形和失真。
   */
  resizeMode?: ?$Enum<{
    contain: string,
    cover: string,
    stretch: string,
  }>,
};

三、使用

现在来裁剪一张图片,示例如下:

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React, { Component } from ‘react‘;

import {
    AppRegistry,
    StyleSheet,
    View,
    Image,
    ImageEditor
} from ‘react-native‘;

//设置裁剪的规格
const cropData = {
    offset: {x: 120, y: 150},//从原图裁剪的起始坐标
    size: {width: 400, height: 400},//裁剪的宽高
    displaySize: {width: 100, height: 100},//裁剪后生成图片的大小
    resizeMode: ‘contain‘, //缩放图像时使用的调整大小模式
};

export default class ReactNativeDemo extends Component {

    state = {‘uri‘:‘http://image.biaobaiju.com/uploads/20180803/22/1533306030-xbmaHzIVwL.jpg‘};

    constructor(props){
        super(props);

        //裁剪图片
        ImageEditor.cropImage(this.state.uri,cropData,
            (new_uri)=>{
                this.setState({
                    uri: new_uri
             })
        }, (error)=>{
            console.log(‘error:‘+error);
        });
    }

    render() {
        return (
            <View style={[styles.flex,styles.bgColor,styles.center]}>
                <Image
                    source={{uri:`${this.state.uri}`}}
                    resizeMode="stretch"
                    style={{width:300,height: 300}}
                />
            </View>
        );
    }
}

const styles = StyleSheet.create({
    flex: {
        flex: 1
    },
    bgColor: {
      backgroundColor: ‘white‘
    },
    center: {
        alignItems: ‘center‘,
        justifyContent: ‘center‘
    },
    font: {
        fontSize: 30,
        color: ‘purple‘,
        textAlign: ‘center‘
    },
    size: {
        height: 50
    }
});

AppRegistry.registerComponent(‘ReactNativeDemo‘, () => ReactNativeDemo);

原图和裁剪图对比如下。左边为原图、右边为剪完图

 

原文地址:https://www.cnblogs.com/XYQ-208910/p/12132062.html

时间: 2024-08-03 10:52:20

ReactNative: 使用图片裁剪组件ImageEditor组件的相关文章

图片上传和裁剪,bitmapcutter组件的使用

图片上传在上篇博文中讲过. 这里主要是裁剪的实现,需要用到bitmapcutter组件. jquery.bitmapcutter该插件由Jericho开发,它的主要作用是客户端裁图. 引入jquery库 <script language="javascript" type="text/javascript" src="/js/jquery1.4.2.min.js"></script> 引入jquery.bitmapcutt

文件(图片)上传组件

1. 问题: https://zhuwenlong.com/blog/51f6519532ffd70b27000001 HTML5 File api 实现断点续传 http://www.jianshu.com/p/2a42a0c89640 html5 上传本地图片处理各种问题 2. 组件: http://fex.baidu.com/webuploader/ http://fex.baidu.com/webuploader/demo.html 百度上传组件 http://kindeditor.ne

jQuery.imgLazyLoad图片懒加载组件

一.前言 当一个页面中请求的图片过多,而且图片太大,页面访问的速度是非常慢的,对用户的体验非常不友好:使用图片懒加载,可以减轻服务器的压力,增加页面的访问量,这里主要是总结一下我自己写的图片懒加载组件jQuery.imgLazyLoad:使用该组件应在img标签中设置一个imglazyload-src属性,存放图片地址. 二.应用实例demo /** * component: imgLazyLoad 2013/12/12 华子yjh * invoking: jQuery.imgLazyLoad(

《React-Native系列》19、 ListView组件之上拉刷新(iOS和Android通用)

ReactNative提供了RefreshControl下拉刷新组件,但是没有提供上拉刷新组件,上拉刷新在App中是很常用的. 今天我们来实现一个iOS和Android通用的上拉刷新功能. 下面简要介绍下我实现的思路. 如果你对ListView的基础知识不是很清楚,建议先移步:<React-Native系列>16. RN组件之ListView 思路: 1.常量定义: const moreText = "加载完毕"; //foot显示的文案 //页码 var pageNum

利用简洁的图片预加载组件提升h5移动页面的用户体验

在做h5移动页面,相信大家一定碰到过页面已经打开,但是里面的图片还未加载出来的情况,这种问题虽然不影响页面的功能,但是不利于用户体验.抛开网速的原因,解决这个问题有多方面的思路:最基本的,要从http请求合并,缓存管理,图片压缩等方面做性能优化:另外就是可以对页面里用到的所有图片做预加载的处理,当用户打开页面的时候不立即显示第一屏,而是先显示资源加载效果,等到加载完毕,再来显示页面的主内容,这样就能解决那个问题.虽然这种加载效果占用了用户的浏览时间,但是我们可以把它做的好看有趣一点,所以也不会影

再和“面向对象”谈恋爱 - 图片预加载组件(七)

再和"面向对象"谈恋爱 - 对象简介(一)再和"面向对象"谈恋爱 - 对象相关概念(二)再和"面向对象"谈恋爱 - 面向对象编程概念(三)再和"面向对象"谈恋爱 - class(四)再和"面向对象"谈恋爱 - 继承(五)再和"面向对象"谈恋爱 - super(六) 通过前面的六篇文章已经把ES6的面向对象跟大伙说清楚了,大家最关心的应该是来个例子实战一下,别担心自行车都会有.那这篇文章通

ReactNative: 使用选择器组件Picker组件

一.简介 本系列博客已经介绍过了日期选择器的使用,日期选择器是高度封装的组件,开发者可以选择最原始的选择器组件Picker组件进行定制,它是跨平台的组件.Picker组件需要配合Picker.Item组件一起使用.Picker.Item组件是Picker组件的子项,用来设置Picker组件值的.Picker.Item组件可以嵌套多个Picker.Item组件. 二.Picker组件API Picker组件提供的都是静态属性,分析每一个属性的作用如下所示: //选择器样式 style: picke

ReactNative: 使用滑块组件Slider组件

一.简介 滑块组件Slider组件是一个跨平台的组件,用户可以拖拽它的值来调整播放或浏览的进度,例如音乐.视频.电子书等等. 二.API 它的API如下所示: //滑块组件风格布局 style: ViewPropTypes.style //滑块的初始值. 该值应介于minimumValue和maximumValue之间,分别默认为0和1. 预设值为0. value: PropTypes.number //滑块的步长值. 该值应介于0到(maximumValue-minimumValue)之间.

react-native多图选择、图片裁剪(支持ad/ios图片个数控制)

扯淡: 目前关于rn比较知名并且封装好的图片选择控件很多,不过能同时支持多图片上传,个数控制兼容iOS/Ad的却寥寥无几,而今天介绍的这款框架可以实现:图片裁剪.最大图片个数限制.拍照.本地相册等功能. 效果:        使用简介: 原理:react-native-syan-image-picker多图片选择器: Android 基于 PictureSelector 2.0 iOS 基于 TZImagePickerController 1.9.0 iOS/android配置:具体步骤参考:h