本文是自2024年9月13日14时起展开的计算机网络与安全方向综合工程设计的过程记录,与本科毕业设计无关。

课题

基于Android平台的图片处理滤镜应用开发
题目方向:网络/物联网
Android是一种基于Java语言的手机软件开发平台,其应用非常广泛。本课题将基于Android平台开发图片处理滤镜软件,要求可以对图片做一些基本处理。Android开发采用Android Studio或Eclipse集成开发工具,其中有手机模拟器可用于调试程序。

背景分析

Android|Java

安卓Android系统本身是基于Linux内核(不含GNU)的开源移动操作系统,由Google开发。目前,安卓已经扩展到平板电脑操作系统市场;作为上网设备全球市场份额占近4成的操作系统,其目前仍居世界第一。1注意到安卓系统本身的开源性广泛性,选用此系统作为课题环境无疑是合理的。

Java语言之前实习期间接触过够多了,不再赘述。和先前纯粹的开发相比,安卓系统中所运行的Java语言少了一部分罕见或使用率低的库,这无伤大雅。作为应用率前三高的语言之一,这个语言开发出的应用程式可以很大程度上推广到其他平台所支持的语言对应的版本(如Swift等)。这里稍微功利一些,暂不考虑其他语言的版本。

应用程式·原理

在Android系统存取图片

(参考论文:2

这本质上是安卓存储机制的一部分。图片在存入系统时会包含一个含有EXIF信息的文件,在实机观察图片变化时注意到这个信息在图片进行旋转时会发生更改。安卓系统提供了修改EXIF信息的接口。

和视频、通讯录等的存储方式类似,安卓系统提供了专门的内容提供Content Provider组件来存储图片信息。系统中与媒体存储、获取相关的API主要包含在android.provider.MediaStorepackage中;其所对应的这一组件的URI也因此以MediaStore开头。例如,视频的URI会是MediaStore.Video.*;而图片相关的则会是MediaStore.Images.*。现在集中观察存储图片的URI;可以注意到图片相关的URI有且仅有用于存储、获取图片的MediaStore.Images.Media和存储、获取缩略图的MediaStore.Images.Thumbnails。这2个URI下还可以添加EXTERNAL_CONTENT_URIINTERNAL_CONTENT_URI两个字段来区分SD卡和机身内存上的数据。

通过query函数遍历获取所有手机图片的信息——这些信息全都通过SQLite的一张表存储。根据Android开发文档中对Images.ImageColumns的介绍表,可以注意到这个SQLite表中比较重要的是BUCKET_DISPLAY_NAMEBUCKET_ID这两个参数,它们分别对应文件夹名及其ID号。而ImageColumns本身继承自BaseColumns,而后者中的_ID表示图片独有的ImageID,所以这个参数也比较重要。Data表示图片的实际存储位置。再看缩略图读取时对应的MediaStore.Images.Thumbnails表,其中DATAIMAGE_IDKIND三参数比较重要。和ImageColumns类似,我们更关注图片本身独特的IMAGE_ID

滤镜

(参考论文:3 4

应用程式·实现

参考/注释

1StatCounter Global Stats: OS Market Share Worldwide (March 2012 - March 2017), “Android 37.93% in March 2017”
2刘昶.Android操作系统的存储技术研究[D].北京理工大学,2011.
3盛兆勇.云存储网盘安卓客户端图片识别模块的设计与实现[J].网络安全技术与应用,2019,(08):48-50.
4杨开广.基于安卓平台的具有实时滤镜功能的Camera开发[D].东南大学,2018.