---
description: Practical guide to the Capacitor File Compressor API: compress images and files at native speed in Ionic and Capacitor apps.
title: Exploring the Capacitor File Compressor API - Capawesome
image: https://capawesome.io/docs/assets/images/social/blog/exploring-the-capacitor-file-compressor-api.png
---

<!doctype html> 

[Skip to content ](#exploring-the-capacitor-file-compressor-api) 

[🖥️ Introducing the **Capacitor Electron Platform** — build desktop apps for macOS, Windows, and Linux. Free & open source. ](/blog/announcing-the-capacitor-electron-platform/) 

* [ SDKs ](/docs/sdks/)
* [ Formbricks ](/docs/sdks/capacitor/formbricks/)
* [ Geocoder ](/docs/sdks/capacitor/geocoder/)
* [ Google Sign-In ](/docs/sdks/capacitor/google-sign-in/)
* [ Grafana Faro ](/docs/sdks/capacitor/grafana-faro/)
* [ Gyroscope ](/docs/sdks/capacitor/gyroscope/)
* [ Haptics ](/docs/sdks/capacitor/haptics/)
* [ Home Indicator ](/docs/sdks/capacitor/home-indicator/)
* [ In-App Browser ](/docs/sdks/capacitor/in-app-browser/)
* [ Install Referrer ](/docs/sdks/capacitor/install-referrer/)
* [ Intercom ](/docs/sdks/capacitor/intercom/)
* [ Intune ](/docs/sdks/capacitor/intune/)
* [ Keep Awake ](/docs/sdks/capacitor/keep-awake/)
* [ libSQL ](/docs/sdks/capacitor/libsql/)
* [ Light Sensor ](/docs/sdks/capacitor/light-sensor/)
* [ Live Update ](/docs/sdks/capacitor/live-update/)
* [ Localization ](/docs/sdks/capacitor/localization/)
* [ Mail Composer ](/docs/sdks/capacitor/mail-composer/)
* [ Managed Configurations ](/docs/sdks/capacitor/managed-configurations/)
* [ Maps Launcher ](/docs/sdks/capacitor/maps-launcher/)
* [ Media Session ](/docs/sdks/capacitor/media-session/)
* [ ML Kit ](/docs/sdks/capacitor/mlkit/)
* [ Navigation Bar ](/docs/sdks/capacitor/navigation-bar/)
* [ Network ](/docs/sdks/capacitor/network/)
* [ NFC ](/docs/sdks/capacitor/nfc/)
* [ Node.js ](/docs/sdks/capacitor/nodejs/)
* [ OAuth ](/docs/sdks/capacitor/oauth/)
* [ Passkeys ](/docs/sdks/capacitor/passkeys/)
* [ Password Autofill ](/docs/sdks/capacitor/password-autofill/)
* [ PDF Generator ](/docs/sdks/capacitor/pdf-generator/)
* [ PDF Viewer ](/docs/sdks/capacitor/pdf-viewer/)
* [ Pedometer ](/docs/sdks/capacitor/pedometer/)
* [ Permissions ](/docs/sdks/capacitor/permissions/)
* [ Phone Dialer ](/docs/sdks/capacitor/phone-dialer/)
* [ Photo Editor ](/docs/sdks/capacitor/photo-editor/)
* [ Photo Manipulator ](/docs/sdks/capacitor/photo-manipulator/)
* [ PixLive ](/docs/sdks/capacitor/pixlive/)
* [ PostHog ](/docs/sdks/capacitor/posthog/)
* [ Printer ](/docs/sdks/capacitor/printer/)
* [ Privacy Screen ](/docs/sdks/capacitor/privacy-screen/)
* [ Proximity Sensor ](/docs/sdks/capacitor/proximity-sensor/)
* [ Purchases ](/docs/sdks/capacitor/purchases/)
* [ RealtimeKit ](/docs/sdks/capacitor/realtimekit/)
* [ Root Detection ](/docs/sdks/capacitor/root-detection/)
* [ Screen Brightness ](/docs/sdks/capacitor/screen-brightness/)
* [ Screen Orientation ](/docs/sdks/capacitor/screen-orientation/)
* [ Screen Reader ](/docs/sdks/capacitor/screen-reader/)
* [ Screenshot ](/docs/sdks/capacitor/screenshot/)
* [ Secure Preferences ](/docs/sdks/capacitor/secure-preferences/)
* [ Settings Launcher ](/docs/sdks/capacitor/settings-launcher/)
* [ Shake ](/docs/sdks/capacitor/shake/)
* [ Silent Mode ](/docs/sdks/capacitor/silent-mode/)
* [ SIM ](/docs/sdks/capacitor/sim/)
* [ SMS Composer ](/docs/sdks/capacitor/sms-composer/)
* [ Speech Recognition ](/docs/sdks/capacitor/speech-recognition/)
* [ Speech Synthesis ](/docs/sdks/capacitor/speech-synthesis/)
* [ Share Target ](/docs/sdks/capacitor/share-target/)
* [ Square Mobile Payments ](/docs/sdks/capacitor/square-mobile-payments/)
* [ SQLite ](/docs/sdks/capacitor/sqlite/)
* [ Superwall ](/docs/sdks/capacitor/superwall/)
* [ System WebView ](/docs/sdks/capacitor/system-webview/)
* [ Tauri ](/docs/sdks/capacitor/tauri/)
* [ Text Interaction ](/docs/sdks/capacitor/text-interaction/)
* [ Text Zoom ](/docs/sdks/capacitor/text-zoom/)
* [ Thermal State ](/docs/sdks/capacitor/thermal-state/)
* [ Toast ](/docs/sdks/capacitor/toast/)
* [ Torch ](/docs/sdks/capacitor/torch/)
* [ Vault ](/docs/sdks/capacitor/vault/)
* [ Volume ](/docs/sdks/capacitor/volume/)
* [ Wallet ](/docs/sdks/capacitor/wallet/)
* [ Wifi ](/docs/sdks/capacitor/wifi/)
* [ YouTube Player ](/docs/sdks/capacitor/youtube-player/)
* [ Zip ](/docs/sdks/capacitor/zip/)
* [ Cordova ](/docs/sdks/cordova/)
* [ Cloud ](/docs/cloud/)
* [ Integrations ](/docs/cloud/live-updates/integrations/)
* Concepts
* Reference
* [ Troubleshooting ](/docs/cloud/live-updates/troubleshooting/)
* [ FAQ ](/docs/cloud/live-updates/faq/)
* [ Native Builds ](/docs/cloud/native-builds/)
* [ Set Up Environments ](/docs/cloud/native-builds/environments/)
* [ Overwrite Native Configurations ](/docs/cloud/native-builds/native-configurations/)
* [ Auto-Increment Build Numbers ](/docs/cloud/native-builds/auto-incrementing-build-numbers/)
* [ Configure the Web Build Script ](/docs/cloud/native-builds/web-build-script/)
* [ Build from a Monorepo ](/docs/cloud/native-builds/monorepo/)
* [ Use pnpm, Yarn, or bun ](/docs/cloud/native-builds/package-managers/)
* [ Install Private npm Packages ](/docs/cloud/native-builds/npm-private-registry/)
* [ Override the Java Version ](/docs/cloud/native-builds/override-java-version/)
* [ Custom iOS Provisioning Profiles ](/docs/cloud/native-builds/custom-ios-provisioning-profiles/)
* [ Build without Git ](/docs/cloud/native-builds/build-without-git/)
* [ Access Git Behind a Firewall ](/docs/cloud/native-builds/firewall-access/)
* [ Integrations ](/docs/cloud/native-builds/integrations/)
* Reference
* [ Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [ FAQ ](/docs/cloud/native-builds/faq/)
* [ App Store Publishing ](/docs/cloud/app-store-publishing/)
* [ Submit a Build ](/docs/cloud/app-store-publishing/submit-a-build/)
* [ Submit Automatically After a Build ](/docs/cloud/app-store-publishing/submit-automatically/)
* [ Troubleshooting ](/docs/cloud/app-store-publishing/troubleshooting/)
* [ FAQ ](/docs/cloud/app-store-publishing/faq/)
* [ Automations ](/docs/cloud/automations/)
* [ Reference ](/docs/cloud/automations/reference/)
* [ Troubleshooting ](/docs/cloud/automations/troubleshooting/)
* [ FAQ ](/docs/cloud/automations/faq/)
* [ Assist ](/docs/cloud/assist/)
* [ CLI ](/docs/cloud/cli/)
* APIs and SDKs
* [ Webhooks ](/docs/cloud/webhooks/)
* [ Integrations ](/docs/cloud/integrations/)
* Account
* [ Organization ](/docs/cloud/organizations/)
* [ Two-Factor Enforcement ](/docs/cloud/organizations/two-factor-authentication/)
* [ Audit Logs ](/docs/cloud/organizations/audit-logs/)
* [ Billing ](/docs/cloud/organizations/billing/)
* [ License Keys ](/docs/cloud/license-keys/)
* [ AI ](/docs/ai/)
* [ Insiders ](/docs/insiders/)
* [ Billing & Plans ](/docs/insiders/billing-and-plans/)
* [ FAQ ](/docs/insiders/faq/)
* [ License ](https://capawesome.io/legal/eula/)
* [ Support ](/docs/support/)
* [ Contributing ](/docs/contributing/)
* Contributing code
* [ Code of Conduct ](/docs/contributing/code-of-conduct/)
* [ Questions ](https://docs.github.com/en/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion#creating-a-discussion)
* [ Blog ](/blog/)
* Categories

* [ Best Practices ](#best-practices)
* [ FAQ ](#faq)
* [ Conclusion ](#conclusion)

* Related links

# Exploring the Capacitor File Compressor API[¶](#exploring-the-capacitor-file-compressor-api "Permanent link")

File compression is a critical feature for modern mobile applications, especially when dealing with image uploads, storage optimization, and bandwidth management. With the [Capacitor File Compressor plugin](/docs/sdks/capacitor/file-compressor/) from Capawesome, developers can seamlessly integrate powerful image compression capabilities into their Ionic and Capacitor applications, reducing file sizes while maintaining acceptable quality levels across Android, iOS, and Web platforms through a unified API that simplifies the complexity of platform-specific compression implementations.

## Installation[¶](#installation "Permanent link")

To install the Capacitor File Compressor plugin, please refer to the [Installation](/docs/sdks/capacitor/file-compressor/#installation) section in the plugin documentation.

## Usage[¶](#usage "Permanent link")

Let's explore the key features of the Capacitor File Compressor API and how to implement them effectively in your Ionic applications.

### Compressing Images[¶](#compressing-images "Permanent link")

The primary functionality of the plugin is provided through the [compressImage(...)](/docs/sdks/capacitor/file-compressor/#compressimage) method, which handles image compression with customizable quality settings:

`[](#%5F%5Fcodelineno-0-1)import { FileCompressor } from '@capawesome-team/capacitor-file-compressor';
[](#%5F%5Fcodelineno-0-2)
[](#%5F%5Fcodelineno-0-3)const compressImage = async (imagePath: string) => {
[](#%5F%5Fcodelineno-0-4)  const { path } = await FileCompressor.compressImage({
[](#%5F%5Fcodelineno-0-5)    mimeType: 'image/jpeg',
[](#%5F%5Fcodelineno-0-6)    path: imagePath,
[](#%5F%5Fcodelineno-0-7)    quality: 0.7,
[](#%5F%5Fcodelineno-0-8)  });
[](#%5F%5Fcodelineno-0-9)  return path;
[](#%5F%5Fcodelineno-0-10)};
`

The `compressImage(...)` method accepts several configuration options to control the compression process, including:

* `mimeType`: The output format (image/jpeg, image/png, or image/webp)
* `path`: The file path of the image to compress
* `quality`: Compression quality from 0.0 (maximum compression) to 1.0 (best quality)

For more aggressive compression, you can lower the quality value:

`[](#%5F%5Fcodelineno-1-1)const compressImageHeavily = async (imagePath: string) => {
[](#%5F%5Fcodelineno-1-2)  const { path } = await FileCompressor.compressImage({
[](#%5F%5Fcodelineno-1-3)    mimeType: 'image/jpeg',
[](#%5F%5Fcodelineno-1-4)    path: imagePath,
[](#%5F%5Fcodelineno-1-5)    quality: 0.3, // Higher compression, lower quality
[](#%5F%5Fcodelineno-1-6)  });
[](#%5F%5Fcodelineno-1-7)
[](#%5F%5Fcodelineno-1-8)  return path;
[](#%5F%5Fcodelineno-1-9)};
`

You can also specify different output formats based on your needs. For example, converting PNG images to JPEG for better compression:

`[](#%5F%5Fcodelineno-2-1)const convertAndCompress = async (pngPath: string) => {
[](#%5F%5Fcodelineno-2-2)  const { path } = await FileCompressor.compressImage({
[](#%5F%5Fcodelineno-2-3)    mimeType: 'image/jpeg', // Convert PNG to JPEG
[](#%5F%5Fcodelineno-2-4)    path: pngPath,
[](#%5F%5Fcodelineno-2-5)    quality: 0.8,
[](#%5F%5Fcodelineno-2-6)  });
[](#%5F%5Fcodelineno-2-7)
[](#%5F%5Fcodelineno-2-8)  return path;
[](#%5F%5Fcodelineno-2-9)};
`

You can also resize images while compressing them by specifying the desired height and/or width:

`[](#%5F%5Fcodelineno-3-1)const compressAndResizeImage = async (imagePath: string, inputFormat: string) => {
[](#%5F%5Fcodelineno-3-2)  const { path } = await FileCompressor.compressImage({
[](#%5F%5Fcodelineno-3-3)    height: 800, // Resize height to 800 pixels
[](#%5F%5Fcodelineno-3-4)    mimeType: 'image/jpeg',
[](#%5F%5Fcodelineno-3-5)    path: imagePath,
[](#%5F%5Fcodelineno-3-6)    quality: 0.7,
[](#%5F%5Fcodelineno-3-7)    width: 600, // Resize width to 600 pixels
[](#%5F%5Fcodelineno-3-8)  });
[](#%5F%5Fcodelineno-3-9)  return path;
[](#%5F%5Fcodelineno-3-10)};
`

## Best Practices[¶](#best-practices "Permanent link")

When implementing image compression with the Capacitor File Compressor API, consider these best practices:

1. **Choose appropriate quality levels**: Balance file size reduction with visual quality by testing different quality values for your specific use case. Generally, values between 0.6 and 0.8 provide good compression while maintaining acceptable quality for most applications.
2. **Handle compression errors gracefully**: Implement comprehensive error handling to manage scenarios where compression fails, such as unsupported file formats or corrupted images. Always provide fallback options or user feedback when compression cannot be completed.
3. **Consider format conversion strategically**: Convert PNG images to JPEG format when transparency is not required, as JPEG typically provides better compression ratios. However, preserve PNG format when working with images that require transparency or when dealing with graphics with sharp edges and solid colors.

## FAQ[¶](#faq "Permanent link")

### Can I output a compressed image as PNG?[¶](#can-i-output-a-compressed-image-as-png "Permanent link")

No — PNG is only supported as an input format, not as an output `mimeType`. On Android and web, you can compress to `image/jpeg` or `image/webp`; on iOS, only `image/jpeg` is supported as output. If you feed the plugin a PNG and set `mimeType: 'image/jpeg'`, it converts it to JPEG in the process — there's no way to get a compressed PNG back out.

### Does WebP output work the same on iOS as on Android?[¶](#does-webp-output-work-the-same-on-ios-as-on-android "Permanent link")

No. WebP output is supported on Android and web, but iOS only supports `image/jpeg` as an output format. If your app needs consistent WebP output across all three platforms, iOS is the platform that won't support it — plan for a JPEG fallback there.

### What's the actual default quality if I don't set one?[¶](#whats-the-actual-default-quality-if-i-dont-set-one "Permanent link")

`0.6`, on a `0.0` (maximum compression, lowest quality) to `1.0` (least compression, best quality) scale. If your app doesn't explicitly set `quality`, it isn't running uncompressed — it's already applying this default level.

### Does specifying `width` and `height` preserve the image's aspect ratio?[¶](#does-specifying-width-and-height-preserve-the-images-aspect-ratio "Permanent link")

The plugin resizes to whatever width and height values you pass — it doesn't independently calculate and lock an aspect ratio for you. If you want to preserve the original proportions, you need to calculate the target `width`/`height` pair yourself based on the source image's dimensions before passing them in.

### Can I compress a `Blob` directly, or do I always need a file path?[¶](#can-i-compress-a-blob-directly-or-do-i-always-need-a-file-path "Permanent link")

It depends on the platform. On web, you pass a `blob`; on Android and iOS, you pass a `path` to the file instead. The two options aren't interchangeable across platforms — code that branches on `Capacitor.getPlatform()` to supply the right one is the typical pattern for a cross-platform implementation.

## Conclusion[¶](#conclusion "Permanent link")

The Capacitor File Compressor Plugin from Capawesome provides an efficient solution for integrating image compression into Ionic applications. By offering a unified API across multiple platforms, it enables developers to optimize file sizes and improve application performance without the complexity of platform-specific compression implementations.

To stay updated with the latest updates, features, and news about the Capawesome, Capacitor, and Ionic ecosystem, subscribe to the [Capawesome newsletter](/newsletter/) and follow us on [X (formerly Twitter)](https://x.com/capawesomeio).

If you have any questions or need assistance with the Capacitor File Compressor Plugin, feel free to reach out to the Capawesome team. We're here to help you implement efficient image compression in your Ionic applications.

July 17, 2026 

Back to top

```json
{
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "headline": "Exploring the Capacitor File Compressor API",
      "description": "Practical guide to the Capacitor File Compressor API: compress images and files at native speed in Ionic and Capacitor apps.",
      "image": "https://capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.png",
      "datePublished": "2025-07-10T00:00:00+00:00",
      "dateModified": "2026-07-17T00:00:00+00:00",
      "author": [
        {
          "@type": "Person",
          "name": "Robin Genz",
          "url": "https://github.com/robingenz"
        }
      ],
      "publisher": {
        "@type": "Organization",
        "name": "Capawesome",
        "url": "https://capawesome.io",
        "logo": {
          "@type": "ImageObject",
          "url": "https://capawesome.io/assets/images/logo.svg"
        }
      },
      "articleSection": "Capacitor",
      "keywords": ["Capacitor", "Guides", "SDKs"],
      "isPartOf": {
        "@type": "Blog",
        "@id": "https://capawesome.io/blog/#blog"
      },
      "mainEntityOfPage": "https://capawesome.io/blog/exploring-the-capacitor-file-compressor-api/",
      "url": "https://capawesome.io/blog/exploring-the-capacitor-file-compressor-api/"
    }
{
      "@context": "https://schema.org",
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://capawesome.io/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Blog",
          "item": "https://capawesome.io/blog/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Exploring the Capacitor File Compressor API",
          "item": "https://capawesome.io/blog/exploring-the-capacitor-file-compressor-api/"
        }
      ]
    }
{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Can I output a compressed image as PNG?", "acceptedAnswer": {"@type": "Answer", "text": "No — PNG is only supported as an input format, not as an output mimeType. On Android and web, you can compress to image/jpeg or image/webp; on iOS, only image/jpeg is supported as output. If you feed the plugin a PNG and set mimeType: 'image/jpeg', it converts it to JPEG in the process — there's no way to get a compressed PNG back out."}}, {"@type": "Question", "name": "Does WebP output work the same on iOS as on Android?", "acceptedAnswer": {"@type": "Answer", "text": "No. WebP output is supported on Android and web, but iOS only supports image/jpeg as an output format. If your app needs consistent WebP output across all three platforms, iOS is the platform that won't support it — plan for a JPEG fallback there."}}, {"@type": "Question", "name": "What's the actual default quality if I don't set one?", "acceptedAnswer": {"@type": "Answer", "text": "0.6, on a 0.0 (maximum compression, lowest quality) to 1.0 (least compression, best quality) scale. If your app doesn't explicitly set quality, it isn't running uncompressed — it's already applying this default level."}}, {"@type": "Question", "name": "Does specifying width and height preserve the image's aspect ratio?", "acceptedAnswer": {"@type": "Answer", "text": "The plugin resizes to whatever width and height values you pass — it doesn't independently calculate and lock an aspect ratio for you. If you want to preserve the original proportions, you need to calculate the target width / height pair yourself based on the source image's dimensions before passing them in."}}, {"@type": "Question", "name": "Can I compress a Blob directly, or do I always need a file path?", "acceptedAnswer": {"@type": "Answer", "text": "It depends on the platform. On web, you pass a blob; on Android and iOS, you pass a path to the file instead. The two options aren't interchangeable across platforms — code that branches on Capacitor.getPlatform() to supply the right one is the typical pattern for a cross-platform implementation."}}], "url": "https://capawesome.io/blog/exploring-the-capacitor-file-compressor-api/"}
```
