独立双端App《瓦格相机》的开发过程分享

2024-09-06 22:58

本文主要是介绍独立双端App《瓦格相机》的开发过程分享,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

Hello大家好,我是灯灯,独立开发者灯灯,也是天天学藏语的灯灯,哈哈哈...
好了屁话少说,今天和大家分享一下最近自己独立制作一款应用的经验历程,希望能对刚刚起步的新手们、还有独立开发者们有所帮助。

什么样的应用

我想做的是一款能够将照片转换成文字拼成的图片应用,也就是,图片中的每一个像素点都将会被文字取代,同时对应色彩、密集程度等。
之所以想做这样的应用是因为早在我高中的时候,我就用VB做过一个类似的应用,当时朋友们很喜欢,经常问我要这个软件。如今PC时代已经离我而去,自然就想在移动平台也做一个。
其实之前我已经用Python脚本写了一个,效果还算不错,大家可以前往使用:
图片转文字Python版本GitHub

构思与设计

软件的需求很简单,因为是自己独立开发而且软件结构比较简单,就没有设计流程图之类的。
初步构思,软件只有几个界面:

  • 首页:让用户打开图片或者拍照
  • 素材库:瀑布流,提供一些素材
  • 裁剪:让用户对图片进行裁剪
  • 设置:让用户对要生成图片的文字进行输入
  • 生成:得出结果,保存、社交分享

所以整体还是很简单的,核心技术肯定是生成页面,其余只是布局和第三方开源库(原谅我这么懒)的问题。
然后,设计师登场(还是我)。
我不怎么会用Sketch,于是还是用PS进行设计,一开始想采用唯美清新文艺小青年风格,整体浅绿色调,给人一种马卡龙配色的感觉。等我设计完,在不同手机查看的时候发现由于色温关系,不同手机显示效果差异极大,非常恶心。
一怒之下重新设计,这一次决定采用白色、橙色为主色调的卡通风格。


效果图


图标是自己用PS绘制的,采用了MBE风格,形象就是一只照相机...
至于名字,我一贯地总是想到什么就是什么。

技术方案

设计完后没有急着立马动手,先想了下每个页面的技术方案。

  • 首页:毫无难度
  • 素材库:collectionView,自己再写个简单的php接口
  • 裁剪:不会,求救GitHub开源库,我坚信一定有很多
  • 设置:毫无难度
  • 生成:算法已经用Python做过了,照搬就行了
  • 分享:友盟或者ShareSDK

于是,经过我在GitHub上苦苦的搜寻,和一遍遍地Demo尝试,最终确定下来用这些开源库:

  • 安卓:
    android-gif-drawable 用来显示Gif加载动画
    SimpleCropView 用来裁剪照片
    PhotoView 用来全屏显示图片
    ShareSDK 用来分享,友盟的AndroidStudio不支持
  • iOS:
    TKImageView 用来裁剪照片
    UIImage-Resize 用来缩放图片
    uiimage-from-animated-gif 用来显示加载动画
    友盟分享 社交分享

着手开发

这一次我没有先选择开发iOS端(以往总是先做iOS),选择了先做Android,原因是一开始测试核心代码的时候iOS没有写成功,安卓成功了。
先把PS设计图用CutterMan(切图神器)生成切图,然后就动手开发。
安卓端使用AndroidStudio开发,一遍遍构建Activity,构建xml布局,码字、测试...
遇到的棘手问题又:

  • 图像在Activity间的传递问题,我转换成bytes传递,经常发生崩溃的情况,不得已全部将图片压缩后再传输,知道原因的朋友可以留言告诉我下。
  • 像素读取的时候的横竖问题,x和y轴总是搞反,大家可以参考python版代码看下到底该如何写宽高。
  • ShareSDK的集成问题,由于不需要它的UI,采用直接分享接口,数据传递遇到了很多bug,总之,在AndroidStudio上,友盟和sharesdk都一塌糊涂,大家慎用。

安卓端基本做完后,着手开发iOS,第一步还是去解决核心图像算法,这一次终于成功解决,而且iOS生成的图片效果要比安卓好得多,不知道为什么。
iOS上的项目依赖我还是用的CocoaPods,暂时没有尝试其他的,代码采用OC。
然后开始搭建界面,我不喜欢用storyboard或者xib,所有界面都是用代码按照比例计算布局写的。
iOS上问题不大,比起安卓反而容易,前前后后安卓和iOS双端总共花了3天左右的时间完成。

上线之前的准备

不是开发完了就能发布的,还有很多很多事情要做。

  • 制作应用预览图(宣传图)
  • 申请分享需要的AppKey,包括微信、QQ、新浪
  • 制作简单的应用官网
  • 制作素材库需要的php接口

好在做这些事情已经得心应手,申请AppKey的过程提醒下大家:新浪最麻烦,需要demo、官网,其他的不需要demo和官网。


宣传图


自适应的“官网”,也就是下载页面 www.winterfeel.com/vug:


手机版官网

针对官网补充一些技巧,因为微信是无法直接下载apk和跳转AppStore的,所以在JS代码中我进行了检测,如果发现是微信,则弹出一个提示,引导用户用浏览器打开进行下载。

php接口由于接口简单,只是一个查询返回json,我就只用了原生php写了个select语句,没有采用任何框架。

结束的话

至此,这款小小的独立App已经差不多开发完成了,然后就是提交给各大应用商店以及苹果了,苹果总是很顺利的发布,安卓我就不想多说了,只上了应用宝和360。
整个软件可以说是很简单的小应用,但是开发中涉及到的问题还是很多的,尤其是作为独立开发者,所有的一切都得自己做的时候,还是很麻烦的。
我想,除了我这样闲的没事做的人应该也没有多少人会去做这样的一个应用吧,毕竟做完也没几个人下载,哈哈,毕竟

大四不考研,天天像过年

如果整个历程能够对大家所有帮助的话,希望大家支持下这个独立小应用。
如果你也喜欢自己做程序,如果你有好想法、缺伙伴,交个朋友一起玩!


个人微信,添加注明简书

瓦格相机 - 官方网站 欢迎大家下载试玩
GitHub Python版代码

这篇关于独立双端App《瓦格相机》的开发过程分享的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143361

相关文章

VSCode开发中有哪些好用的插件和快捷键

《VSCode开发中有哪些好用的插件和快捷键》作为全球最受欢迎的编程工具,VSCode的快捷键体系是提升开发效率的核心密码,:本文主要介绍VSCode开发中有哪些好用的插件和快捷键的相关资料,文中... 目录前言1、vscode插件1.1 Live-server1.2 Auto Rename Tag1.3

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

MySQL数据目录迁移的完整过程

《MySQL数据目录迁移的完整过程》文章详细介绍了将MySQL数据目录迁移到新硬盘的整个过程,包括新硬盘挂载、创建新的数据目录、迁移数据(推荐使用两遍rsync方案)、修改MySQL配置文件和重启验证... 目录1,新硬盘挂载(如果有的话)2,创建新的 mysql 数据目录3,迁移 MySQL 数据(推荐两

Agent开发核心技术解析以及现代Agent架构设计

《Agent开发核心技术解析以及现代Agent架构设计》在人工智能领域,Agent并非一个全新的概念,但在大模型时代,它被赋予了全新的生命力,简单来说,Agent是一个能够自主感知环境、理解任务、制定... 目录一、回归本源:到底什么是Agent?二、核心链路拆解:Agent的"大脑"与"四肢"1. 规划模

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.

Python+wxPython开发一个文件属性比对工具

《Python+wxPython开发一个文件属性比对工具》在日常的文件管理工作中,我们经常会遇到同一个文件存在多个版本,或者需要验证备份文件与源文件是否一致,下面我们就来看看如何使用wxPython模... 目录引言项目背景与需求应用场景核心需求运行结果技术选型程序设计界面布局核心功能模块关键代码解析文件大

C++多线程开发环境配置方法

《C++多线程开发环境配置方法》文章详细介绍了如何在Windows上安装MinGW-w64和VSCode,并配置环境变量和编译任务,使用VSCode创建一个C++多线程测试项目,并通过配置tasks.... 目录下载安装 MinGW-w64下载安装VS code创建测试项目配置编译任务创建 tasks.js

JAVA SpringBoot集成Jasypt进行加密、解密的详细过程

《JAVASpringBoot集成Jasypt进行加密、解密的详细过程》文章详细介绍了如何在SpringBoot项目中集成Jasypt进行加密和解密,包括Jasypt简介、如何添加依赖、配置加密密钥... 目录Java (SpringBoot) 集成 Jasypt 进行加密、解密 - 详细教程一、Jasyp

Java通过ServerSocket与Socket实现通信过程

《Java通过ServerSocket与Socket实现通信过程》本文介绍了Java中的ServerSocket和Socket类,详细讲解了它们的构造方法和使用场景,并通过一个简单的通信示例展示了如何... 目录1 ServerSocket2 Socket3 服务器端4 客户端5 运行结果6 设置超时总结1

MongoDB搭建过程及单机版部署方法

《MongoDB搭建过程及单机版部署方法》MongoDB是一个灵活、高性能的NoSQL数据库,特别适合快速开发和大规模分布式系统,本文给大家介绍MongoDB搭建过程及单机版部署方法,感兴趣的朋友跟随... 目录前言1️⃣ 核心特点1、文档存储2、无模式(Schema-less)3、高性能4、水平扩展(Sh