【问题标题】:How to display a TIFF image in a Flutter app on an Android device?如何在 Android 设备上的 Flutter 应用中显示 TIFF 图像?
【发布时间】:2019-01-03 22:56:15
【问题描述】:

我们的应用程序允许用户设置各种类型的资源库,例如 PDF、电子表格等。即几乎任何 MIME 类型的文档,我们存储在 S3 上。

当用户点击查看任何这些资源时,我们基本上会确定我们使用的是 iOS 设备还是 Android。在 iOS 上,我们使用 url_launcher 基本上可以显示任何内容。

Android 有点复杂,但如果 mime 类型是图像,我们也只需使用 url_launcher。如果不是,我们将文件下载到本地文件并调用 OpenFile 包来显示结果(如果可以的话)。

这通常工作得很好,除了 TIFF 图像类型,它不会在浏览器中原生显示...

有没有一种简单的方法可以在 Android 平台上以全屏显示 TIFF 图像(类似于在浏览器中显示)?实际上对于图像/ mime 类型,有没有比一般的 url_launcher 更简单的方法来显示它们?

关于 Android 上的 TIFF 的另一个 Stack Overflow 问题没有解决这个问题,因为这是针对原生 Android 应用程序的,这是针对 Flutter 的,并且该解决方案不适合(我很容易看到)Flutter 应用程序。

【问题讨论】:

  • 我没用过这个包:pub.dartlang.org/packages/image说支持读取TIFF图片
  • 图像包用于读取和操作 TIFF 图像,而不是用于在 Flutter 中显示它们。已经看过那个了! :)
  • @darms - 我认为不完全相关。这是针对 Flutter 应用程序的,而不是原生 Android 应用程序(本身)。

标签: android image flutter tiff


【解决方案1】:

这个问题很老了,但我仍然想回答它:)

您可以对图像库执行的操作是解码图像(无论它是什么),然后将其编码为 png,然后将其传递给图像小部件。

为什么选择 PNG? => 在 widgets/images.dart 它说

 /// This only accepts compressed image formats (e.g. PNG). Uncompressed
  /// formats like rawRgba (the default format of [dart:ui.Image.toByteData])
  /// will lead to exceptions.

待办事项: 我必须将图像库导入为 imgLib,否则它会与 Flutter 中的图像小部件发生冲突......

import 'package:image/image.dart' as imgLib;
....
imgLib.Decoder dec = imgLib.findDecoderForData(response.data);
Image.memory(imgLib.encodePng(dec.decodeImage(response.data)))

然后你有一个 Image Widget 用于在 UI 上显示它

【讨论】:

  • 干得好!终于有一个很好的答案了——不确定图书馆“过去”是否可用!
猜你喜欢
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
相关资源
最近更新 更多