heic_to_png_jpg
A Flutter package to convert HEIC images to JPG, PNG, or WebP on mobile, web, and desktop platforms.
0.1.2
15K downloads/mo
#2476 most downloaded on pub.dev
IbrahimElmourchidi/heic_to_png_jpg
What this package is like to depend on
Last release 2 months ago
31 May 2026
Ships on a steady schedule
a new release about every 3 months
Nearly every release is documented
notes for 9 of 9 stable releases
Nothing withdrawn
no release was ever pulled
1 years old
9 releases · first in 2025
4 releases in the last 12 months
see the full history below
Release timeline
9 releases · May 2025 to May 2026Releases
latest 9-
0.1.231 May 2026Release notes
Open source →- Bump heif_converter ^1.0.1 → ^1.0.6 (Swift Package Manager support,
fixes 'plugins do not support Swift Package Manager' warning on Flutter 3.24+) - Raise flutter floor >=3.22.0 → >=3.24.0
- Uncomment platform :ios, '12.0' in example Podfile
- Bump flutter_lints ^2.0.1 → ^5.0.0, refresh all transitive lockfiles
- Remove unnecessary library directive (unnecessary_library_name lint)
- Use super parameter in InvalidHeicDataException (use_super_parameters lint)
Closes #3
Release notes
Open source →Fixed
- Bump
heif_converterdependency to^1.0.6— adds Swift Package Manager (SPM) support on iOS, silencing Flutter's "plugins do not support Swift Package Manager" warning that appeared on Flutter 3.24+. - Minimum iOS deployment target is now 12.0 (transitive requirement from
heif_converter1.0.3+; iOS 11 is no longer supported). - Raise Flutter SDK floor to
>=3.24.0to match stable SPM support.
Changed
- Bump
flutter_lintsdev dependency to^5.0.0(was^2.0.1). - Refresh lockfile to latest within-constraint versions of all transitive
dependencies (
image4.5.4 → 4.9.1,path_provider_android2.2.17 → 2.3.1,path_provider_foundation2.4.1 → 2.6.0,archive,crypto,ffi,xml, and others). No API changes; bug-fix and performance improvements only. - Apply
use_super_parameterstoInvalidHeicDataException. - Remove unnecessary
librarydirective fromlib/heic_to_png_jpg.dart.
- Bump heif_converter ^1.0.1 → ^1.0.6 (Swift Package Manager support,
-
0.1.121 Mar 2026 -
0.1.021 Mar 2026Release notes
Open source →Added
- WebP output format — new
ImageFormat.webpvalue andHeicConverter.convertToWebP()convenience method. Web uses native canvasimage/webp; mobile falls back to PNG (theimagepackage has no WebP encoder). maxHeightparameter on all conversion methods. When bothmaxWidthandmaxHeightare set, images are scaled to fit within the bounding box (contain mode) while preserving aspect ratio.HeicConverter.isHeic()— pure-Dart magic-byte check; no decode needed.HeicConverter.getImageInfo()— returnsHeicImageInfo(width, height) by decoding in an isolate.HeicConverter.convertToWebP()— convenience wrapper for WebP output.HeicConverter.convertBatch()— converts a list ofHeicConversionTaskobjects concurrently with a configurableconcurrencylimit (default 3).HeicConverter.convertFile()— file-path based API (mobile/desktop only); reads from disk, writes result back, returns output path.- Custom exception hierarchy —
HeicConversionException,InvalidHeicDataException,ConversionFailedException,PlatformNotSupportedException. HeicImageInfoclass — holdswidthandheightof a HEIC image.HeicConversionTaskclass — describes a single job forconvertBatch().- Desktop platform support — added
macos,windows,linuxtopubspec.yamlplatforms block (existing Dart fallback handles them). - Unit tests — 20 tests covering
isHeic, enum values, exception hierarchy, and data classes. topicsin pubspec.yaml for better pub.dev discoverability (image,heic,heif,converter).
Fixed
- Temp file name collision — temp files now use a microsecond timestamp (
heic_<id>.heic) instead of the hardcodedtemp.heic, preventing corruption when multiple conversions run concurrently. - Temp file cleanup on error — a
finally-style delete ensures the input.heictemp file is removed even whenheif_converterthrows. - Debug
log()calls removed — alldart:developerlog()calls have been removed fromheic_to_png_jpg_web.dart. - Quality parameter validation — values outside 0–100 now throw
InvalidHeicDataExceptioninstead of being silently passed to encoders.
Changed
- Lazy platform singleton —
HeicToImagePlatformis now instantiated once (lazy singleton) instead of on everyconvertToImage()call. drawImageScaledreplaced withdrawImage(the former was deprecated inpackage:web).- Barrel file now exports
HeicConversionException,InvalidHeicDataException,ConversionFailedException,PlatformNotSupportedException,HeicImageInfo, andHeicConversionTask. - Version bump to
0.1.0.
- WebP output format — new
-
0.0.623 Dec 2025Release notes
Open source →Closes #2
Co-authored-by: Iskander Shamsudinov https://github.com/iska9der
Release notes
Open source →Changed
- BREAKING: Default quality increased from 80 to 100 for maximum quality output
- Quality parameter now applies correctly even when
maxWidthis not specified - Optimized conversion process to avoid unnecessary re-encoding when quality is 100% (default)
Fixed
- Fixed issue where quality parameter was only applied during image resizing
- Fixed quality not being respected when converting without resizing
- Improved image quality preservation in all conversion scenarios
Improved
- Better performance: Skip re-encoding when using default quality (100%) and no resizing
- More efficient memory usage by avoiding decode/encode cycles when not needed
- Enhanced quality control consistency across different conversion paths
Technical Details
- Added smart processing detection: only re-encodes when quality < 100 or resizing is needed
- Maintained backward compatibility with existing API
- Quality parameter now works as expected in all scenarios:
- Converting without resizing (previously ignored)
- Converting with resizing (previously worked)
- Converting with custom quality settings
-
0.0.510 Aug 2025Release notes
Open source →- Moved web implementation to
package:webanddart:js_interopto support wasm compilations. - The plugin handles loading the
libheif-bundle.jsitself, no longer do you need to add it manually to your index.html. - You can provide a different libheif js version in the convertors e.g.
final output = await HeicConverter.convertToPNG( heicData: heicData, maxWidth: maxWidth, libheifJsUrl:'https://cdn.jsdelivr.net/npm/[email protected]/libheif-wasm/libheif-bundle.js', ); - Moved web implementation to
-
0.0.413 May 2025 -
0.0.313 May 2025 -
0.0.213 May 2025Release notes
Open source →- Fixed "No implementation found for this platform" error by removing default
HeicToImageImplementationand ensuring explicit platform instantiation.
- Fixed "No implementation found for this platform" error by removing default
-
0.0.113 May 2025Release notes
Open source →- Initial release of
heic_to_png_jpg. - Supports HEIC to PNG and JPG conversion on web (via libheif-js) and mobile (via heif_converter).
- Includes platform interface for extensibility.
- Initial release of