dart 在Flutter iOS中将jpg图像转换为png图像

mklgxw1f  于 2023-09-28  发布在  Flutter
关注(0)|答案(5)|浏览(224)

如何将从照片库中选择的jpg图像转换为flutter中的png图像?

dvtswwa3

dvtswwa31#

看看image package。以下是examples section中的代码片段,它将JPEG转换为PNG

import 'dart:io';
import 'package:image/image.dart';
void main() {
  // Read a jpeg image from file.
  Image image = decodeImage(new File('test.jpg').readAsBytesSync());

  // Resize the image to a 120x? thumbnail (maintaining the aspect ratio).
  Image thumbnail = copyResize(image, 120);

  // Save the thumbnail as a PNG.
  new File('out/thumbnail-test.png')
    ..writeAsBytesSync(encodePng(thumbnail));
}
xurqigkl

xurqigkl2#

你需要做的第一件事是导入IMAGE库。然后使用类似的自定义功能,如下面你可以转换JPG到PNG

import 'package:flutter/material.dart';
import 'dart:io';
import 'dart:convert';
import 'package:image/image.dart' as Im;
import 'dart:math' as Math;
void jpgTOpng(path) async {
  File imagePath = File(path);
  //get temporary directory
  final tempDir = await getTemporaryDirectory();
  int rand = new Math.Random().nextInt(10000);
  //reading jpg image
  Im.Image image = Im.decodeImage(imagePath.readAsBytesSync());
  //decreasing the size of image- optional
  Im.Image smallerImage = Im.copyResize(image, width:800);
      //get converting and saving in file
  File compressedImage = new File('${tempDir.path}/img_$rand.png')..writeAsBytesSync(Im.encodePng(smallerImage, level:8));     
}
epggiuax

epggiuax3#

使用image库,您可以执行此操作

jpegToPng(jpegimage){
new File('output.png')
    ..writeAsBytesSync(encodePng(thumbnail));
}
zxlwwiss

zxlwwiss4#

列出的许多建议都很好,我只是想补充一些可能会让一些人感到困惑的东西。如果你得到的是黑色的图像,看看图像中是否有Alpha通道。我使用Image包来实现我的目的,所以我只是在解码过程中添加一个:img.decodeImage(imageFile.readAsBytesSync())..channels = img.Channels.rgba
我还使用Image/Paint方法来获取Dart UI Image作为.png:
img =图像包,缩略图是一个img图像。

import 'dart:ui' as ui;
import 'package:image/image.dart' as img;

    ui.Image imageN;
        try {
          final paint = await PaintingBinding.instance
              .instantiateImageCodec(img.encodePng(thumbnail, level: 0));
          final nextFrame = await paint.getNextFrame();
          imageN = nextFrame.image;
        } catch (e, s) {
          // handle the exception
        }
        return imageN;
7vux5j2d

7vux5j2d5#

如果你直接使用bytes,你可以做以下事情:

import 'dart:typed_data';
  import 'package:image/image.dart';

  Uint8List jpgToPng(Uint8List bytes) {
    final jpgImage = decodeImage(bytes);
    final pngImage = copyResize(
      jpgImage!,
      width: jpgImage.width,
      height: jpgImage.height,
    );

    return Uint8List.fromList(encodePng(jpgImage));
  }

这将返回PNG字节,而无需跟踪图像尺寸。

相关问题