摘要:OpenExif是用于访问Exif格式的JPEG图像文件的面向对象的库。

本文分享自华为云社区《LiteOS组件尝鲜-玩转Openexif》,作者: W922 。

基本信息

Exif:Exchangeable image File Format。用于记录数码照片的属性信息和拍摄数据,例如厂商、分辨率、ISO、白平衡、饱和度、锐度等。然后将这些信息按照JPEG文件标准放在图像文件头部。

Exif实际上也是JPEG文件的一种,遵循JPEG标准,只是在头文件中增加了有关拍摄信息的内容和索引图。通俗来说Exif信息就是由数码相机在拍摄过程中采集一系列信息镶嵌在JPEG/TIFF文件内的一组参数。

OpenExif是用于访问Exif格式的JPEG图像文件的面向对象的库。该工具包允许在Exif文件中创建,读取和修改元数据,详情请参考Openexif

LiteOS中提供对C++的支持,并提供Openexif Demo来演示如何使用Openexif。

目前暂时只支持以下开发板运行Openexif Demo:

  • STM32F769

使能Openexif Demo

在LiteOS源码根目录下根据实际使用的开发板,拷贝tools/build/config/目录下的默认配置文件${platform}.config到根目录,并重命名为.config。

继续在LiteOS源码根目录下执行make menuconfig命令,按如下菜单路径使能C++支持和Openexif Demo。

Kernel  --->
[*] Enable Extend Kernel
[*] C++ Support Demos --->
Media Demo --->
[*] Enable Openexif Demo

使能Openexif Demo后,LiteOS会去下载Openexif源码,并打入patch。

注意:

如需开启C++ thread特性,需要使能LOSCFG_LIB_CPP_EXTEND。并动态调整Task Defalut Stack Size的大小。

Kernel  --->
Basic Config --->
Task --->
(4096)Task Defalut Stack Size
Lib --->
[*] Enable libc++ extend

使能LOSCFG_LIB_CPP_EXTEND后,LiteOS会去下载libstdc++源码。

保存退出后,LiteOS会从github上自动下载Openexif源代码,并从gitee上下载适配于LiteOS系统的patch包,并打入patch。 详细流程在components/download.sh文件中。

编译运行Openexif Demo

1.需要一张SD卡,并在SD卡中放入一张测试图片。

注意: 由于嵌入式设备内存有限,文件过大可能导致打开失败,大小限制在100kb以下即可。

2.修改demos/media/openexif/openexif_demo.cpp文件中DEMO_FILENAME为

放入SD卡的图片文件名。本Demo所用文件名为/fatfs/test.jpg,可根据实际自行修改。

#define DEMO_FILENAME               "/fatfs/test.jpg"

3.使能Openexif Demo后,在LiteOS源码根目录下执行make clean; make

-j命令编译LiteOS工程,编译成功后会在out/${platform}/lib路径下生成openexif.a和openexif_demo.a文件,系统镜像文件为Huawei_LiteOS.bin。

注意: 选择不同开发板out路径会有不同。

4.烧录系统镜像文件到开发板中可以看到如下运行结果。

********Hello Huawei LiteOS********

LiteOS Kernel Version : 5.0.0
build data : Apr 20 2021 17:05:27 **********************************
osAppInit
cpu 0 entering scheduler
app init!
Hello, welcome to liteos demo!
Openexif demo task start to run.
file system mount success
"Exif" entries:
IFD: 0 Idx: 0
Tag# Type Count Value
282 5 1 72
283 5 1 72
296 3 1 2
531 3 1 1
34665 4 1 90
IFD: 0 Idx: 0
IFD: 34665 Idx: 0
Tag# Type Count Value
36864 7 4 [48,50,49,48]
37121 7 4 [1,2,3,0]
40960 7 4 [48,49,48,48]
40961 3 1 1
40962 4 1 0
40963 4 1 0
Openexif demo task finished. Huawei LiteOS #

可以看到Openexif Demo会去读取图片文件的元数据,并打印出来。

其他更多关于exif的信息请参考Exif

结语

未来我们还会持续新增更多组件、开发板、架构、特性等。

感谢您的阅读,有任何问题、建议,都可以留言给我们,让我们一起进步: https://gitee.com/LiteOS/LiteOS/issues

更多学习内容,请关注IoT物联网社区

添加华为云IoT小助手微信号(hwc-iot),回复“阅读”获取更多资讯

点击关注,第一时间了解华为云新鲜技术~

玩转LiteOS组件:Openexif的更多相关文章

  1. 一起玩转玩转LiteOS组件:TinyFrame

    摘要:TinyFrame是一个简单的用于解析串口(如 UART.telnet.套接字等)通信数据帧的库. 本文分享自华为云社区<LiteOS组件尝鲜-玩转TinyFrame>,作者:Lio ...

  2. 玩转LiteOS组件:玩转Librws

    摘要:Librws是一个跨平台的websocket客户端,使用C语言编写. 本文分享自华为云社区<LiteOS组件尝鲜-玩转Librws>,作者: W922 . 本期小编为大家带来Lite ...

  3. 带你尝鲜LiteOS 组件EasyFlash

    摘要:EasyFlash是一个开源的轻量级嵌入式闪存库. 本文分享自华为云社区<LiteOS组件尝鲜-玩转EasyFlash>,作者:Lionlace . 基本介绍 EasyFlash是一 ...

  4. 《微信小程序七日谈》- 第三天:玩转Page组件的生命周期

    <微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 前两篇 ...

  5. 《微信小程序七日谈》- 第四天:页面路径最多五层?导航可以这么玩

    <微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 微信小 ...

  6. openstack手动玩转

    <一,preface Important Project Network> openstack or all most cloud env Network desgine  is so m ...

  7. react初探(二)之父子组件通信、封装公共组件

    一.前言 在组件方面react和Vue一样的,核心思想玩的就是组件,下面举两个组件常用的情景. 场景一:假如我们现在有一个页面包含表格以及多个弹框,这种时候如果将这个页面的业务代码写在一个组件中,那么 ...

  8. Vue.js之组件(component)

    从结构上看,组件之于实例,就好比轮子之于汽车.从属性和方法来看,组件有实例的大部分方法,如果Vue实例是孙悟空,组件就好比实例的一个毫毛,变化多端却为Vue实例所用. 目录: 组件的注册 is的作用 ...

  9. vue - 组件的创建

    组件的创建 vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来.组件的使用更使我们的项目解耦合.更加符合vue的设计思想MVVM. 那接下来就跟我看一下如何在一个Vue实例中使 ...

  10. vue.js组件(component)

    简介: 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面 ...

随机推荐

  1. LINUX基础知识和命令 二

    LINUX alias (别名) 自定义命令=原始命令 原始命令中有特殊符@#%()请打上 引号,单双无所谓 例:vim /etc/sysconfig/network-scripts/ifcfg-en ...

  2. PolygonCollider2D.OverlapPoint()在小scale下失效的一种解决办法

    偶然发现PolygonCollider2D的方法OverlapPoint()有时会失效(一直返回false),测试后发现在scale(这里指世界空间的scale,后同)很小的情况下(通常在UI Can ...

  3. 在不知带头节点地址的情况下删除和插入一个p指针指向的节点总结

    在不知带头节点地址的情况下删除和插入一个p指针指向的节点总结 (p指向的不是第一个,也不是最后一个)A->B->C *p->B 插入(在p结点之前插入q) 解析: 直接往p前插入q, ...

  4. App支付报错"商家订单参数异常,请重新发起付款"排查流程

    今天在对接支付宝 APP 支付的时候遇到了一个报错,记录下问题的排查过程~ 报错过程 APP 中弹窗提示的报错"商家订单参数异常,请重新发起付款",检查了下参数感觉没啥问题,不知道 ...

  5. PoW、PoS、DPoS和PBFT简介

    1. 概览 PoW(工作量证明).PoS(权益证明).DPoS(委托权益证明)和PBFT(拜占庭容错)是区块链和分布式系统领域中常见的共识算法.下面将详细介绍这些共识算法的原理和特点: PoW(工作量 ...

  6. 基于.NET、Uni-App开发支持多平台的小程序商城系统 - CoreShop

    前言 小程序商城系统是当前备受追捧的开发领域,它可以为用户提供一个更加便捷.流畅.直观的购物体验,无需下载和安装,随时随地轻松使用.今天给大家推荐一个基于.NET.Uni-App开发支持多平台的小程序 ...

  7. 🔥🔥想快速进入人工智能领域的Java程序员?你准备好了吗?

    引言 今天我们来探讨一下作为Java程序员,如何迅速融入人工智能的领域.,当前有一些流行的LLMs选择,例如ChatGPT.科大讯飞的星火.通义千问和文心一言等.如果你还没有尝试过这些工具,那么现在也 ...

  8. 暴力+DP:买卖股票的最佳时机

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润. 注意:你不能在买入股票前卖出股票. ...

  9. Git、GitHub、Gitlab的区别以及与SVN的比较

    概念解析 Git   Git是一个开源的分布式版本控制系统(Version Control System,VCS),可以有效.高速地处理项目版本管理.   版本控制是一种记录一个或若干文件内容变化,以 ...

  10. 【Android Studio】 SQLite 数据库 增删改查

    今日目标:参照标题 实现效果: 实现过程: 1.创建实现页面 页面设计思路: 最外层垂直线性布局.内部使用三个线性布局.后两个用的水平排版,用来显示数值. 实例化四个Button,两个EditText ...