如何在Flutter资产中添加/管理多个图像尺寸/分辨率

时间:2019-02-11 12:20:43

标签: flutter flutter-layout

以最简单/最快捷的方式提供帮助

希望在Android Studio中以hdpi / mdpi之类的格式管理多个图像

2 个答案:

答案 0 :(得分:1)

声明可识别分辨率的图像资产 来源-https://flutter.io/docs/development/ui/assets-and-images#declaring-resolution-aware-image-assets

  

AssetImage了解如何将逻辑请求的资产映射到一个   最接近当前设备像素比例的像素。为了   这种工作映射,资产应根据   特定的目录结构:

content_copy
  .../image.png
  .../Mx/image.png
  .../Nx/image.png
  ...etc.
     

…其中M和N是与标称值相对应的数字标识符   包含在其中的图像的分辨率,换句话说,它们   指定要用于图像的设备像素比率。

     

假定主要资产对应于1.0的分辨率。对于   例如,对于名为的图像,请考虑以下资产布局   my_icon.png:

content_copy
  .../my_icon.png
  .../2.0x/my_icon.png
  .../3.0x/my_icon.png
     

在设备像素比为1.8的设备上,资产   ... / 2.0x / my_icon.png将被选择。对于2.7的设备像素比,   资产... / 3.0x / my_icon.png将被选择。

     

如果未在屏幕上指定渲染图像的宽度和高度   图像小部件,标称分辨率用于缩放资产,因此   它将占用与主要资产相同的屏幕空间   会有更高的分辨率。也就是说,如果... / my_icon.png   是72px x 72px,则... / 3.0x / my_icon.png应该是216px x 216px;   但是如果它们都将呈现为72px x 72px(以逻辑像素为单位)   宽度和高度未指定。

     

pubspec.yaml资产部分中的每个条目都应对应   到一个真实文件,主要资产条目除外。如果   主资产条目与真实文件不对应,则资产   分辨率最低的设备将用作设备的后备设备   设备像素比率低于该分辨率。该条目仍应   但是,将其包含在pubspec.yaml清单中。

答案 1 :(得分:1)

虽然 iOS 将图像和资产视为不同的项目,但 Flutter 应用程序只有资产。在 iOS 上放置在 Images.xcasset 文件夹中的资源被放置在 Flutter 的 assets 文件夹中。与 iOS 一样,资产是任何类型的文件,而不仅仅是图像。例如,您可能在 my-assets 文件夹中有一个 JSON 文件:

my-assets/data.json

pubspec.yaml 文件中声明资产:

assets:
 - my-assets/data.json

然后使用 AssetBundle 从代码访问它:

import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;

Future<String> loadAsset() async {
  return await rootBundle.loadString('my-assets/data.json');
}

对于图像,Flutter 遵循类似于 iOS 的简单的基于密度的格式。图像资产可能是 1.0x, 2.0x, 3.0x 或任何其他乘数。所谓devicePixelRatio,表示单个逻辑像素中物理像素的比例。

资产位于任意文件夹中——Flutter 没有预定义的文件夹结构。您在 pubspec.yaml 文件中声明资产(带位置),然后 Flutter 将其提取。

例如,要将名为 my_icon.png 的图像添加到您的 Flutter 项目,您可能决定将其存储在任意名为 images 的文件夹中。将基本图像 (1.0x) 放在图像文件夹中,并将其他变体放在以适当倍数命名的子文件夹中:

images/my_icon.png       // Base: 1.0x image
images/2.0x/my_icon.png  // 2.0x image
images/3.0x/my_icon.png  // 3.0x image

接下来,在 pubspec.yaml 文件中声明这些图像:

assets:
 - images/my_icon.png

您现在可以使用 AssetImage 访问您的图片:

return AssetImage("images/a_dot_burr.jpeg");

或直接在 Image 小部件中:

@override
Widget build(BuildContext context) {
  return Image.asset("images/my_image.png");
}

有关详细信息,请参阅Adding Assets and Images in Flutter