图片资源

FAQ1 Solution中,可以使用哪些图片资源? 那些图片资源需要转换?

Solution可以处理如下一些图片类资源。

文件类型

处理方式

png

该类型需要使用 eZIP 进行转换

png 序列帧

该类型需要使用 eZIP 进行转换。序列帧介绍参见序列帧打包

apng

该类型需要使用 eZIP 进行转换

gif

该类型需要使用 eZIP 进行转换

jpg

该类型采用软硬件结合的方式进行解码,需要先解码才能送去渲染

mp4

该类型目前采用软解(部分硬件)解码,推荐支持尺寸为240x240,需要使用ffmpeg进行转换(参数优化)

  • eZIP工具存放在目录 \sdk\tools\png2ezip下面

  • eZIP具体使用方法参见eZIP命令


FAQ2 Solution中,图片资源存放位置是否需要遵循某些规则? 是否需要手动转换?

在Solution中,图片资源的存放位置有具体的规则要求,工具会根据会根据存放的子目录自动进行相应的转换。

  • 在Solution中的存放位置具体参见图片资源及存放位置的介绍。注意: 必须严格遵循这个规则。

  • 编译时,ButterFli工具会调用eZIP的工具对资源目录对应分辨率进行相应的转换。

    • Nor方案和builtin_res的方案中,主代码中会转换为xxx.c,并生成对应的xxx_header.h参与编译

    • Nand的文件系统方案中,主代码中会转换为文件(png转换为bin,gif转换为agif,jpg和mp4直接原样copy)

    • 外置表盘及外置应用,由于运行在文件系统中,因此会统一转换为文件。


FAQ3 使用序列帧打包和采用N张png图片用LVGL实现有什么区别?

两种方式都能实现一样的效果,但序列帧打包具有以下一些优势:

  • eZIP提供了序列帧打包的功能,可以把N张相同png图片打包在一起,生成一个文件。通过调用专用的序列帧接口lv_img_set_src_seq就可以实现对某张png的播放,也可以调用控件seq_frame(接口是lvsf_seqframe_xxx)来实现动画的播放。

  • 序列帧打包只生成一个文件,特别使用与外置表盘/外置应用以及Nand的文件系统方案的场景。通过这种方式提高了存储利用率,以及访问速度。


FAQ4 如何评估一个产品中图片资源大致占用的空间? 从而选定flash的大小?

  1. 首先在一个目录下存放所有的图片资源。 有两种存放方式:

    • 确定存放的父目录(如d:\images),然后再该目录下建立以下目录。并按照图片资源及存放位置严格分类存放各种资源。

      + common
        + ezip
        + no_ezip
        + gif
        + jpg
        + mp4
      
    • 所有的图片资源都放在一个目录(如d:\images)下。(该种方式存在的问题是,旋转图片是非压缩图片,但由于只有一个目录,eZIP将按照压缩处理。因此,会导致评估不准)

  2. 假定这个资源放在d:\images目录下,基于52x芯片,则评估命令为:

    • ezip -dir d:\images -binfile 2 -chip sf52x -outdir images_out

    • : ezip使用方法参见eZIP命令

  3. 统计输出目录(如上面命令是images_out)下所有文件占用的size。

  4. 根据统计的size,预留一定的空间(如20%~30%)就可以确定图片资源占用的空间。


FAQ5 png的图片什么情况下需要选择带alpha的?什么情况下不需要带alpha的?

带 alpha 的 PNG 图片(也常称 PNG-32)是包含透明通道的格式,能实现图片背景 / 边缘的透明效果;不带 alpha 的 PNG 图片(也常称 PNG-24)无透明通道,仅保留 RGB 色彩信息。具体选择场景如下:

  1. 需要选择带 Alpha 通道的场景

  • 当图片需要与不同底色(如界面背景、渐变图层、动态背景)融合,或存在不规则 / 镂空 / 半透明效果时,必须使用带 Alpha 的 PNG:

  1. 不需要选择带 Alpha 通道的场景

  • 当图片为纯实色背景、无透明需求,或追求更小文件体积 / 更高加载效率时,使用不带 Alpha 的 PNG

  • 不需要带apha的图片(如背景)如果选择带了alpha,一方面会增加存储空间,另外一方面会降低渲染速度。

eZIP处理png图片时,基本的原则是:原图带alpha将转换为带alpha格式的eZIP,原图不带alpha将转换为不带alpha格式的eZIP。


FAQ6 为什么有些gif的图片用eZIP转换之后很大?

  • 问题:gif转换为agif之后,是直接送ePIC的硬件,不需要解码再送去渲染。因此对于gif是一张大图,但只有局部动画的场景,可能生成出来的agif会特别大。

  • 解决的方案: 把这个gif分为几个部分,一张静态底图,再加上一个或多个gif动画。


FAQ7 为什么图片用eZIP转换之后和原图差不多,甚至比原图大很多?

  • eZIP转换时,必须使用-binfile 2的参数,不能用-cfile 2-cfile 1-binfile 1

  • 由于转换的原图是png的格式,因此这个图已经是经过压缩的。一般来讲,eZIP转换后的尺寸会比png稍小或差不多。


FAQ8 为什么有些jpg不能显示?

目前Solution方案中,支持jpg图片,具体如下:

  • 只支持基线 JPEG(Baseline JPEG),尚不支持渐进式 JPEG(Progressive JPEG)JPEG2000

  • 在55x/56x/52x芯片上,jpg是软硬结合的解码,相比于纯软的解码效率要高很多,但也不能与eZIP(png)硬件解码速度比,需要注意使用场景,否则会影响帧率。58x以及后续的芯片是支持jpg的硬件解码的;

  • Solution中显示jpg的图片无论哪个平台都是用同一个接口(lv_img_set_src),中间层进行了适配。


因此,如果是从手机端推送,需要注意转换为Baseline的格式。

FAQ9 mp4(h264)格式使用是否有限制?

  • mp4在固件端显示需要经过ffmpeg的转换,具体转换方法参见JPG/H.264

  • 建议mp4的视频分辨率限制在240x240。


FAQ10 PC 仿真(simulator)时图片是否使用的是eZIP压缩格式?

PC仿真时,使用的是像素格式。


FAQ11 eZIP在哪些操作系统平台上可以使用?

eZIP有以下一些版本,但Solution包里面默认只带了windows的版本。


FAQ12 怎么确认内存中的eZIP图片数据是否是正确的?

如果需要确认内存中的eZIP图片数据是否是正确:

  • 可以导出内存,然后参照eZIP压缩文件反解为png文件命令反解

  • 如果能够反解为png图片,点击后能够正常显示,则能够确认数据是正确的。

注意: 非压缩的图片不支持反解。