簡體   English   中英

在 Flutter iOS 中將 jpg 圖像轉換為 png 圖像

[英]Convert jpg image to png image in Flutter iOS

如何將從照片庫中選擇的 jpg 圖像轉換為顫振中的 png 圖像?

看看圖像包 以下是示例部分中可用的片段,它將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));
}

您需要做的第一件事是導入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));     
}

使用圖像庫你可以做到這一點

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

列出的許多建議都很好,我只是想添加一些可能會使某些人感到困惑的東西。 如果您收到黑色圖像,請查看圖像中是否有 Alpha 通道。 我出於我的目的使用 Image 包,所以我只在解碼過程中添加一個: img.decodeImage(imageFile.readAsBytesSync())..channels = img.Channels.rgba

我還使用 Image/Paint 方法將 Dart UI 圖像作為 .png 獲取:

img = 圖片包,thumbnail 是一個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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM