react-native-runescape-text
v3.3.3
Published
Convert text to a text GIF image with RuneScape chat effects for React Native.
Downloads
32
Maintainers
Readme
react-native-runescape-text
Convert text to a text GIF image with RuneScape chat effects.
Refer to this wikiHow guide on How to Write Text Effects on RuneScape.
Getting started
npm install react-native-runescape-text
Examples
import React, {Component} from 'react';
import {Platform, StyleSheet, Text, TouchableOpacity, View} from 'react-native';
import {GCanvasView} from '@flyskywhy/react-native-gcanvas';
import getRuneScapeText from 'react-native-runescape-text';
export default class WebglCubeMaps extends Component {
constructor(props) {
super(props);
this.canvas = null;
this.state = {
debugInfo: 'hello world',
hasOc1: false,
};
}
takePicture = () => {
const options = {
scale: 1,
fps: 10,
motion: 'scroll',
};
const {width, height, extension, buffer} = getRuneScapeText(this.state.debugInfo, options);
console.warn(width, height, extension);
console.warn(buffer);
};
render() {
return (
<View style={styles.container}>
{Platform.OS !== 'web' && (
<GCanvasView
style={{
width: 1000, // 1000 should enough for offscreen canvas usage
height: 1000,
position: 'absolute',
left: 1000, // 1000 should enough to not display on screen means offscreen canvas :P
top: 0,
zIndex: -100, // -100 should enough to not bother onscreen canvas
}}
offscreenCanvas={true}
onCanvasCreate={(canvas) => this.setState({hasOc1: true})}
devicePixelRatio={1} // should not 1 < devicePixelRatio < 2 as float to avoid pixel offset flaw when GetImageData with PixelsSampler in @flyskywhy/react-native-gcanvas/core/src/support/GLUtil.cpp
isGestureResponsible={false}
/>
)}
{Platform.OS === 'web' || this.state.hasOc1 && (
<TouchableOpacity onPress={this.takePicture}>
<Text style={styles.welcome}>Click me console.warn()</Text>
</TouchableOpacity>
)}
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
marginVertical: 20,
},
});
Syntax
getRuneScapeText(string, [options], [wordWrapOptions]);
Parameters
| Parameter | Type | Required | Default | Description |
| ----------------------------------- | -------- | -------- | ------- | ------------------------------------------------------------------------------------- |
| string | string
| Yes | none | Text to convert |
| options | Object
| No | {}
| Options to configure script behavior |
| wordWrapOptions | Object
| No | {}
| Options to configure word-wrap behavior |
Options
| Property | Type | Required | Default | Description |
| ---------------- | --------- | -------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| version | string
| No | "osrs"
| Game version to use, either: osrs
or rs3
|
| color | string
| No | "yellow"
| Default color effect of the text, either: yellow
, red
, green
, cyan
, purple
, white
, glow1
, glow2
, glow3
, flash1
, flash2
, flash3
, or any other color format in tinycolor2
|
| motion | string
| No | "none"
| Default motion effect of the text, either: none
, wave
, wave2
, shake
, scroll
, or slide
|
| width | number
| No | 0
| Image width want to clip on center, 0 means no clip and width of Return value
depend on string text length |
| height | number
| No | 0
| Image height want to clip on center, 0 means no clip and height of Return value
depend on font height |
| suffix | string
| No | ":"
| String that should suffix each color and motion string |
| replacement | string
| No | ""
| String to replace characters the font does not support when supportNonAscii is false |
| supportNonAscii | boolean
| No | true
| Determines whether the text support Non-ASCII characters like Chinese |
| trimStart | boolean
| No | false
| Determines whether the text will be trimStart() |
| maxMessageLength | number
| No | 280
| Max message length allowed after the string has been sanitized |
| scale | number
| No | 2
| Scale factor of the font (multiples of 16px), prefer integer values greater than or equal to 1, decimal values will render blurry text |
| font | string
| No | runescape_uf
| font name |
| fps | number
| No | 20
| Frames per second to render animations at, prefer integer values less than or equal to 60 |
| cycleDuration | number
| No | 3000
| Duration in milliseconds of one cycle before the animation loops |
| imageSmoothingEnabled | boolean
| No | true
| Determines whether to linear filter the text image |
| imageGradientEnabled | boolean
| No | true
| Determines whether to let the color in text image be gradient, if false, it's better also set imageSmoothingEnabled
be false |
| gradientThreshold | number
| No | 100
| When imageGradientEnabled
is false, if pixel's a
> gradientThreshold
, a
will be modified to 255, otherwise rgba
will be modified to 00000000
|
| showLogs | boolean
| No | false
| Determines whether to print runtime logs or not |
| returnBufferType | string
| No | Buffer
| Determines return buffer type, either: Buffer
, Array
or ArrayOfImageData
|
WordWrapOptions
Property information can be found here. The defaults chosen by this module are listed below:
| Property | Default |
| -------- | ------------------------ |
| width | 50
|
| indent | ""
|
| newline | "\n"
|
| escape | (str) => str.trimEnd()
|
| trim | false
|
| cut | false
|
Return value
The return value is an Object with the following properties:
| Property | Type | Description |
| --------- | ----------------- | ------------------------------------- |
| width | number
| Image width |
| height | number
| Image height |
| framesLength | number
| GIF frames length |
| extension | string
| File extension gif
|
| buffer | <Buffer>
, <Array>
or ArrayOfImageData
| result in a buffer or array of a GIF image, or an array contains many ImageData |
Install custom Font
Ref to custom fonts
in README.md
of @flyskywhy/react-native-gcanvas to install custom fonts and registerFont() if on Android, e.g. install from src/assets/runescape_uf.ttf
and
if (Platform.OS === 'android') {
registerFont(`${RNFS.ExternalDirectoryPath}/fonts/runescape_uf.ttf`);
}
then options.font = 'runescape_uf'
before run getRuneScapeText()
.
Consider react-native-font-picker, and here is the result of Font Picker to fillText on @flyskywhy/react-native-gcanvas.
Exceptions
| Error | Description |
| ---------------------- | --------------------------------------------- |
| InvalidArgumentError
| Thrown if required string argument is missing |
| TypeError
| Thrown if argument type is unexpected |
| ValueError
| Thrown if string is empty |
| ValueError
| Thrown if the parsed message string is empty |