REACT-NATIVE-COMPRESSOR is a react-native package, which helps us to Compress Image, Video, and Audio before uploading, same like Whatsapp without knowing the compression algorithm
We should use react-native-compressor instead of FFmpeg because react-native-compressor gives you same compression of Whatsapp (Image, Video, and Audio) without knowing the algorithm of compression + it is lightweight only increase 50 KB Size Size in APK while FFmpeg increase ~> 9 MB Size in APK, and we have to give manual image/video/Audo size and quality as well as
If you find this package useful hit the star 🌟
yarn add react-native-compressor
you can give feedback on Discord channel
expo install react-native-compressor
Add the Compressor plugin to your Expo config (app.json, app.config.json or app.config.js):
{ "name": "my app", "plugins": ["react-native-compressor"] }
Finally, compile the mods:
expo prebuild
To apply the changes, build a new binary with EAS:
eas build
Automatic linking is supported for both Android and IOS
Note: If you are using react-native version 0.60 or higher you don't need to link this package.
react-native link react-native-compressor
pod 'react-native-compressor', :path => '../node_modules/react-native-compressor' into Podfilepod installCmd+R)<android/app/src/main/java/[...]/MainActivity.javaimport com.reactnativecompressor.CompressorPackage; to the imports at the top of the filenew CompressorPackage() to the list returned by the getPackages() methodandroid/settings.gradle:
include ':react-native-compressor'
project(':react-native-compressor').projectDir = new File(rootProject.projectDir,'../node_modules/react-native-compressor/android')
android/app/build.gradle:
compile project(':react-native-compressor')
import { Image } from 'react-native-compressor'; const result = await Image.compress('file://path_of_file/image.jpg'); // OR const result = await Image.compress('https://path_of_file/image.jpg', { progressDivider: 10, downloadProgress: (progress) => { console.log('downloadProgress: ', progress); }, });
Here is this package comparison of images compression with WhatsApp
import { Image } from 'react-native-compressor'; const result = await Image.compress('file://path_of_file/image.jpg', { compressionMethod: 'manual', maxWidth: 1000, quality: 0.8, });
import { Video } from 'react-native-compressor'; const result = await Video.compress( 'file://path_of_file/BigBuckBunny.mp4', {}, (progress) => { console.log('Compression Progress: ', progress); } ); //OR const result = await Video.compress( 'https://example.com/video.mp4', { progressDivider: 10, downloadProgress: (progress) => { console.log('downloadProgress: ', progress); }, }, (progress) => { console.log('Compression Progress: ', progress); } );
Here is this package comparison of video compression with WhatsApp
import { Video } from 'react-native-compressor'; const result = await Video.compress( 'file://path_of_file/BigBuckBunny.mp4', { compressionMethod: 'manual', }, (progress) => { console.log('Compression Progress: ', progress); } );
import { Video } from 'react-native-compressor'; let cancellationVideoId = ''; const result = await Video.compress( 'file://path_of_file/BigBuckBunny.mp4', { compressionMethod: 'auto', // getCancellationId for get video id which we can use for cancel compression getCancellationId: (cancellationId) => (cancellationVideoId = cancellationId), }, (progress) => { if (backgroundMode) { console.log('Compression Progress: ', progress); } else { setCompressingProgress(progress); } } ); // we can cancel video compression by calling cancelCompression with cancel video id which we can get from getCancellationId function while compression Video.cancelCompression(cancellationVideoId);
import { Audio } from 'react-native-compressor'; const result = await Audio.compress( 'file://path_of_file/file_example_MP3_2MG.wav', // recommended wav file but can be use mp3 file { quality: 'medium' } ); // OR const result = await Audio.compress( 'file://path_of_file/file_example_MP3_2MG.wav', // recommended wav file but can be use mp3 file { bitrate: 64000, samplerate: 44100, channels: 1, } );
import { backgroundUpload } from 'react-native-compressor'; const headers = {}; const uploadResult = await backgroundUpload( url, fileUrl, { httpMethod: 'PUT', headers }, (written, total) => { console.log(written, total); } ); //OR const uploadResult = await backgroundUpload( url, fileUrl, { uploadType: UploadType.MULTIPART, httpMethod: 'POST', headers }, (written, total) => { console.log(written, total); } );
for cancellation Upload, there is two ways
import { cancelUpload, backgroundUpload } from 'react-native-compressor'; // if we will call without passing any param then it will remove last pushed uploading cancelUpload() // if you pass true as second param then it will cancel all the uploading cancelUpload("",true) // if there is multiple files are uploading, and you wanna cancel specific uploading then you pass specific video id like this let videoId='' const uploadResult = await backgroundUpload( url, fileUrl, { httpMethod: 'PUT', getCancellationId: (cancellationId) =>(videoId = cancellationId), }, (written, total) => { console.log(written, total); } ); cancelUpload(videoId)
import { backgroundUpload } from 'react-native-compressor'; const abortSignalRef = useRef(new AbortController()); const uploadResult = await backgroundUpload( url, fileUrl, { httpMethod: 'PUT' }, (written, total) => { console.log(written, total); }, abortSignalRef.current.signal ); abortSignalRef.current?.abort(); // this will cancel uploading
import { download } from 'react-native-compressor'; const downloadFileUrl = await download(url, (progress) => { console.log('downloadProgress: ', progress); });
import { createVideoThumbnail, clearCache } from 'react-native-compressor'; const thumbnail = await createVideoThumbnail(videoUri); await clearCache(); // this will clear cache of thumbnails cache directory
compress(value: string, options?: CompressorOptions): Promise<string>Compresses the input file URI or base-64 string with the specified options. Promise returns a string after compression has completed. Resizing will always keep the original aspect ratio of the image, the maxWidth and maxHeight are used as a boundary.
compressionMethod: compressionMethod (default: "auto")if you want to compress images like whatsapp then make this prop auto. Can be either manual or auto, defines the Compression Method.
downloadProgress?: (progress: number) => void;it is callback, only trigger when we pass image url from server
progressDivider?: number (default: 0)we uses it when we use downloadProgress
maxWidth: number (default: 1280)The maximum width boundary used as the main boundary in resizing a landscape image.
maxHeight: number (default: 1280)The maximum height boundary used as the main boundary in resizing a portrait image.
quality: number (default: 0.8)The quality modifier for the JPEG and PNG file format, if your input file is JPEG and output file is PNG then compressed size can be increase
input: InputType (default: uri)Can be either uri or base64, defines the contentents of the value parameter.
output: OutputType (default: jpg)The quality modifier for the JPEG file format, can be specified when output is PNG but will be ignored. if you wanna apply quality modifier then you can enable disablePngTransparency:true,
Note: if you png image have no transparent background then enable disablePngTransparency:true modifier is recommended
disablePngTransparency: boolean (default: false)when user add output:'png' then by default compressed image will have transparent background, and quality will be ignored, if you wanna apply quality then you have to disablePngTransparency like disablePngTransparency:true, it will convert transparent background to white
returnableOutputType: ReturnableOutputType (default: uri)Can be either uri or base64, defines the Returnable output image format.
if you wanna get image metadata (exif) then read this
compress(url: string, options?: videoCompresssionType , onProgress?: (progress: number)): Promise<string>cancelCompression(cancellationId: string): voidwe can get cancellationId from getCancellationId which is the callback method of compress method options
activateBackgroundTask(onExpired?: (data: any) => void): Promise<any>if you wanna compress video while app is in backgroup then you should call this method before compression
deactivateBackgroundTask(): Promise<any>if you call activateBackgroundTask method, then after video compression, you should call deactivateBackgroundTask for disable background task mode.
getCancellationId: functiongetCancellationId is a callback function that gives us compress video id, which can be used in Video.cancelCompression method to cancel the compression
compressionMethod: compressionMethod (default: "manual")if you want to compress videos like whatsapp then make this prop auto. Can be either manual or auto, defines the Compression Method.
downloadProgress?: (progress: number) => void;it is callback, only trigger when we pass image url from server
progressDivider?: number (default: 0)we uses it when we use downloadProgress/onProgress
maxSize: number (default: 640)The maximum size can be height in case of portrait video or can be width in case of landscape video.
bitrate: numberbitrate of video which reduce or increase video size. if compressionMethod will auto then this prop will not work
minimumFileSizeForCompress: number (default: 0)previously default was 16 but now it is 0 by default. 0 mean 0mb. This is an offset, which you can set for minimumFileSizeForCompress will allow this package to dont compress less than or equal to minimumFileSizeForCompress ref #26
if you wanna get video metadata then read this


免费创建高清无水印Sora视频
Vora是一个免费创建高清无水印Sora视频的AI工具


最适合小白的AI自动化工作流平台
无需编码,轻松生成可复用、可变现的AI自动化工作流

大模型驱动的Excel数据处理工具
基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


AI论文写作指导平台
AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频