0.2.0 • Published 10 months ago

react-native-webp-converter v0.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

react-native-webp-converter

Easily convert PNG and JPG images to WebP format for improved image optimization and performance in React Native applications.

WebP is a modern image format that provides superior compression, saving on file size without compromising quality, making it ideal for mobile apps where performance and storage are key.

Features

  • PNG/JPG to WebP conversion.
  • Custom hook useConverter() for easy in-component conversion.
  • convertImage() method for more controlled use cases.
  • Configurable options for quality, type (lossy/lossless), and preset.

Demo

Quality comparison

Below is a top-to-bottom comparison, with the original image at the top and the compressed version at the bottom.

Low Quality Setting(quality = 5)

High Quality Settings(quality = 80)

Installation

npm install react-native-webp-converter

or

yarn add react-native-webp-converter

Usage

Using convertImage

import * as WebP from 'react-native-webp-converter'
import * as fs from 'react-native-fs';
import { useCallback, useEffect, useState } from 'react';
import { ActivityIndicator, Image, StyleSheet } from 'react-native';

export default function App() {
  const [convertedImage, setConvertedImage] = useState('');

  const convertImage = useCallback(async () => {
    const inputPath = `path-to-my-local-image.png`;
    const outputPath = `${fs.CachesDirectoryPath}/my-image-converted.webp`;

    await WebP.convertImage(inputPath, outputPath, {
      quality: 80,
      type: WebP.Type.LOSSY,
      preset: WebP.Preset.PICTURE,
    });

    setConvertedImage(outputPath);
  }, []);

  useEffect(() => {
    convertImage();
  }, []);

  if (!convertedImage) return <ActivityIndicator />;

  return (
    <Image
      source={{ uri: `file://${convertedImage}` }}
      style={StyleSheet.absoluteFill}
      resizeMode="cover"
    />
  );
}

Example Config Object

const config: WebP.WebPConfig = {
  quality: 80,
  type: WebP.Type.LOSSY,
  preset: WebP.Preset.PICTURE,
};

API

import * as WebP from 'react-native-webp-converter';

Methods

convertImage(inputPath, outputPath, config)

ArgumentTypeDescription
inputPathstringPath to the input image file.
outputPathstringDesired path for the output WebP file.
configWebPConfigConfiguration options.
ReturnsPromise<string>Resolves to the output path of the converted image.

Configuration Options

PropertyTypeRequiredDescription
qualitynumberYesDefines the compression quality (0-100).
Lossy: Represents visual quality; higher values produce better quality.
Lossless: Indicates compression efficiency; higher values result in smaller files.
typeWebP.TypeYesSets compression type.
Type.LOSSY: Lossy compression.
Type.LOSSLESS: Lossless compression.
presetWebP.PresetNoAdjusts compression settings based on image type (iOS only).
Preset.DEFAULT: Standard preset.
Preset.PICTURE: Ideal for portraits or indoor shots.
Preset.PHOTO: Best for natural outdoor photography.
Preset.DRAWING: Suited for line art or drawings.
Preset.ICON: For small, colorful icons.
Preset.TEXT: For images containing text.

Interfaces

WebPConfig

Defines the configuration for image conversion.

type WebPConfig = {
  quality: number;
  type: WebP.Type;
  preset?: WebP.Preset;
};

Enums

Type

Compression types for image conversion.

enum Type {
  LOSSY,
  LOSSLESS,
}

Preset

Specifies the compression preset based on image type.

enum Preset {
  DEFAULT, // Default preset
  PICTURE, // Portrait or indoor shots
  PHOTO, // Outdoor, natural photos
  DRAWING, // Drawings or high-contrast images
  ICON, // Small, colorful images (icons)
  TEXT, // Text-like images
}

Contributing

To contribute, see the contributing guide for setup and pull request guidelines.

License

Licensed under the MIT License.


0.1.0

10 months ago

0.1.2

10 months ago

0.2.0

10 months ago

0.1.1

10 months ago

0.1.4

10 months ago

0.1.3

10 months ago

1.0.0

2 years ago