利用pyQt5搭建一个简易的图片编辑器(PhotoEdit)

目录

  1. 项目背景和意义 2
    1.1 项目背景简介 2
    1.2 项目完成意义 2
  2. 需求分析 2
    2.1 基本模块需求 2
    2.2 基本算法需求 3
    2.3 基本框架需求 3
    2.4 基本UI需求 3
  3. 概要和详细设计 3
    3.1 设计概要 3
    3.2 设计流程 4
    3.3 技术引用 4
  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
  5. 代码测试 20
    5.1 运行进入主界面 20
    5.2 上传图片功能测试 21
  6. 结论与未来方向 24
    6.1 结论 24
    6.2 未来方向 24
  7. 致谢 25
  8. 参考文献与链接 25
  9. 需求分析
    2.1 基本模块需求
    针对一块基本的图形处理软件,包括了基本的文档打开存储,图形界面的搭建,图形处理,日志记录等。于是需要下载相关模块,包括pyQt5,pillow等。
    2.2 基本算法需求
    根据任意一个图像处理软件,必然会用到图像处理的相关函数,有些函数也就需要了解它的基本算法,比如滤镜的添加,便需要对图片的像素点进行处理,调用相关函数,已经一些调整函数,例如亮度,对比度,锐化这些图片调整的方式必然也有它的处理算法。于是需要查看相关文献,搜集资料来获取这些算法的原理和使用方式。
    2.3 基本框架需求
    类比正常的软件开发规范,工程文件创建的格式规范化,学习基本的开发要点,注释的规范,面向对象的开发方式,是否需要调用大框架等等。
    2.4 基本UI需求
    为了使UI界面更美观,需要一些图片挑选,字体选择规划,布局规划设计等。
  10. 概要和详细设计
    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()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/newlw/article/details/133156519