jpeg_turbo_resizer 0.2.0 copy "jpeg_turbo_resizer: ^0.2.0" to clipboard
jpeg_turbo_resizer: ^0.2.0 copied to clipboard

PlatformWindows

A custom Flutter plugin for Windows that enables fast and efficient image resizing using the libjpeg-turbo library. This initial release focuses on resizing JPEG images with high performance. More fea [...]

example/lib/main.dart

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:jpeg_turbo_resizer/jpeg_turbo_resizer.dart';
import 'package:file_picker/file_picker.dart';
import 'package:path/path.dart' as path;

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'JPEG Turbo Resizer Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: JpegTurboResizerExample(),
    );
  }
}

class JpegTurboResizerExample extends StatefulWidget {
  @override
  _JpegTurboResizerExampleState createState() => _JpegTurboResizerExampleState();
}

class _JpegTurboResizerExampleState extends State<JpegTurboResizerExample> {
  String? _inputImagePath;
  String? _resizedImagePath;
  String? _destinationDirectory;
  String _outputFileName = '';
  int _maxResolution = 300;
  bool _isProcessing = false;
  final _formKey = GlobalKey<FormState>();

  Future<void> _pickImage() async {
    FilePickerResult? result = await FilePicker.platform.pickFiles(
      type: FileType.custom,
      allowedExtensions: ['jpg', 'jpeg', 'jp2', 'j2k', 'jfif'],
    );

    if (result != null) {
      final file = File(result.files.single.path!);
      setState(() {
        _inputImagePath = file.path;
        _destinationDirectory = path.dirname(file.path);
        _outputFileName = '${path.basenameWithoutExtension(file.path)}_resized${path.extension(file.path)}';
        _resizedImagePath = null; // Reset resized image when new input is selected
      });
    }
  }

  Future<void> _resizeImage() async {
    if (_formKey.currentState!.validate() && _inputImagePath != null) {
      setState(() {
        _isProcessing = true;
      });

      try {
        final outputPath = path.join(_destinationDirectory!, _outputFileName);

        JpegTurboResizer turboResizer = JpegTurboResizer();
        bool result = await turboResizer.resizeJpeg(
          _inputImagePath!,
          outputPath,
          _maxResolution,
        );

        if (result) {
          setState(() {
            _resizedImagePath = outputPath;
          });
          _showSnackBar('Image resized successfully!');
        } else {
          _showSnackBar('Error resizing image: $result');
        }
      } catch (e) {
        _showSnackBar('An error occurred: $e');
      } finally {
        setState(() {
          _isProcessing = false;
        });
      }
    }
  }

  void _showSnackBar(String message) {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text(message)),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('JPEG Turbo Resizer Example'),
      ),
      body: SingleChildScrollView(
        padding: EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              ElevatedButton.icon(
                onPressed: _isProcessing ? null : _pickImage,
                icon: Icon(Icons.image),
                label: Text('Select Image'),
              ),
              SizedBox(height: 16),
              if (_inputImagePath != null) ...[
                Text('Selected image:', style: TextStyle(fontWeight: FontWeight.bold)),
                Text(_inputImagePath!),
                SizedBox(height: 16),
                Image.file(
                  File(_inputImagePath!),
                  height: 200,
                  fit: BoxFit.cover,
                ),
                SizedBox(height: 16),
                Text('Destination directory:', style: TextStyle(fontWeight: FontWeight.bold)),
                Text(_destinationDirectory ?? ''),
                SizedBox(height: 16),
                TextFormField(
                  decoration: InputDecoration(
                    labelText: 'Output File Name',
                    border: OutlineInputBorder(),
                  ),
                  initialValue: _outputFileName,
                  validator: (value) {
                    if (value == null || value.isEmpty) {
                      return 'Please enter a file name';
                    }
                    if (!value.toLowerCase().endsWith('.jpg') &&
                        !value.toLowerCase().endsWith('.jpeg')) {
                      return 'File name must end with .jpg or .jpeg';
                    }
                    return null;
                  },
                  onChanged: (value) {
                    setState(() {
                      _outputFileName = value;
                    });
                  },
                ),
              ],
              SizedBox(height: 16),
              TextFormField(
                decoration: InputDecoration(
                  labelText: 'Max Resolution',
                  border: OutlineInputBorder(),
                ),
                initialValue: _maxResolution.toString(),
                keyboardType: TextInputType.number,
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Please enter a max resolution';
                  }
                  if (int.tryParse(value) == null || int.parse(value) <= 0) {
                    return 'Please enter a valid positive number';
                  }
                  return null;
                },
                onChanged: (value) {
                  setState(() {
                    _maxResolution = int.tryParse(value) ?? 300;
                  });
                },
              ),
              SizedBox(height: 16),
              ElevatedButton.icon(
                onPressed: _isProcessing || _inputImagePath == null ? null : _resizeImage,
                icon: Icon(Icons.photo_size_select_large),
                label: Text('Resize Image'),
              ),
              SizedBox(height: 16),
              if (_isProcessing) Center(child: CircularProgressIndicator()),
              if (_resizedImagePath != null) ...[
                Text('Resized Image:', style: TextStyle(fontWeight: FontWeight.bold)),
                Text(_resizedImagePath!),
                SizedBox(height: 16),
                Image.file(
                  File(_resizedImagePath!),
                  height: 200,
                  fit: BoxFit.cover,
                ),
              ],
            ],
          ),
        ),
      ),
    );
  }
}
1
likes
140
points
21
downloads

Publisher

unverified uploader

Weekly Downloads

A custom Flutter plugin for Windows that enables fast and efficient image resizing using the libjpeg-turbo library. This initial release focuses on resizing JPEG images with high performance. More features, such as additional image processing capabilities, will be added in future updates.

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

flutter, path, plugin_platform_interface

More

Packages that depend on jpeg_turbo_resizer