目录
- 项目背景和意义 2
1.1 项目背景简介 2
1.2 项目完成意义 2 - 需求分析 2
2.1 基本模块需求 2
2.2 基本算法需求 3
2.3 基本框架需求 3
2.4 基本UI需求 3 - 概要和详细设计 3
3.1 设计概要 3
3.2 设计流程 4
3.3 技术引用 4 - 代码实现 5
4.1 Python版本与IDE说明 5
4.2 相关库调用 5
4.3 文件分块说明 6
4.4 关键代码说明 6
4.4.1 滤镜文件代码说明 6
4.4.2 图像处理文件代码说明 8
4.4.3 图片配置文件代码说明: 11
4.4.4 布局和主程序文件代码说明: 13 - 代码测试 20
5.1 运行进入主界面 20
5.2 上传图片功能测试 21 - 结论与未来方向 24
6.1 结论 24
6.2 未来方向 24 - 致谢 25
- 参考文献与链接 25
- 需求分析
2.1 基本模块需求
针对一块基本的图形处理软件,包括了基本的文档打开存储,图形界面的搭建,图形处理,日志记录等。于是需要下载相关模块,包括pyQt5,pillow等。
2.2 基本算法需求
根据任意一个图像处理软件,必然会用到图像处理的相关函数,有些函数也就需要了解它的基本算法,比如滤镜的添加,便需要对图片的像素点进行处理,调用相关函数,已经一些调整函数,例如亮度,对比度,锐化这些图片调整的方式必然也有它的处理算法。于是需要查看相关文献,搜集资料来获取这些算法的原理和使用方式。
2.3 基本框架需求
类比正常的软件开发规范,工程文件创建的格式规范化,学习基本的开发要点,注释的规范,面向对象的开发方式,是否需要调用大框架等等。
2.4 基本UI需求
为了使UI界面更美观,需要一些图片挑选,字体选择规划,布局规划设计等。 - 概要和详细设计
3.1 设计概要
围绕图像编辑处理这一大功能,在设计时主要考虑到一下几点工作方向:
1.设计主界面窗口的布局:采用编辑主窗口+处理选项窗口设计。
2.分析要加入的基本功能:主要包括滤镜,调整,尺寸,旋转四个大方面进行功能细化。
滤镜:无滤镜原图,黑白滤波,负滤波,均值滤波。
调整:对比度,亮度,锐化。
尺寸:修改宽度,修改高度,比例修改。
旋转:顺时针和逆时针90度旋转,垂直和水平翻转。
3.分析功能并进行资料搜集处理:细化处理事项。
4.分析需要写的代码的层次与功能:将代码按功能分类分块,是整个文件具有层次感。
5.开始撰写代码:根据不同功能分别细化处理。
6.UI布局优化和细节调整。
7.程序调试与修改。
import getopt
import sys
import logging
from img_modifier import img_helper
logger = logging.getLogger()
def init():
"""Get and parse parameters from console"""
args = sys.argv[1:]
if len(args) == 0:
logger.error("-p can't be empty")
raise ValueError("-p can't be empty")
logger.debug(f"run with params: {args}")
# transform arguments from console
opts, rem = getopt.getopt(args, "p:", ["rotate=", "resize=", "color_filter=", "flip_top", "flip_left"])
rotate_angle = resize = color_filter = flip_top = flip_left = None
path = None
for opt, arg in opts:
if opt == "-p":
path = arg
elif opt == "--rotate":
rotate_angle = int(arg)
elif opt == "--resize":
resize = arg
elif opt == "--color_filter":
color_filter = arg
elif opt == "--flip_top":
flip_top = True
elif opt == "--flip_left":
flip_left = arg
if not path:
raise ValueError("No path")
img = img_helper.get_img(path)
if rotate_angle:
img = img_helper.rotate(img, rotate_angle)
if resize:
w, h = map(int, resize.split(','))
img = img_helper.resize(img, w, h)
if color_filter:
img = img_helper.color_filter(img, color_filter)
if flip_left:
img = img_helper.flip_left(img)
if flip_top:
img = img_helper.flip_top(img)
if __debug__:
img.show()
if __name__ == "__main__":
init()