工具分享04 | Python高级图片处理工具

大家好,我是欧K~

本期使用Python的Tkinter制作高级图片处理工具,可用于图片的快速缩小、放大、旋转、水平翻转、垂直翻转等基础操作,以及各种特效操作:灰度、灰色反转、彩色反转、高斯模糊、锐化、美颜、镜像、怀旧、流年、素描、马赛克、卡通、水波纹、毛玻璃、霓虹效果、万花筒、雨滴效果、热成像效果。希望对大家有所帮助,如有疑问或者需要改进的地方可以联系小编。

1. 运行流程

1.1 工具面板

1.2 图像缩小

1.3 图像放大

1.4 水平翻转(类似镜像)

1.5 垂直翻转

1.6 高斯模糊

1.7 镜像

1.8 流年

1.9 素描

1.10 马赛克

1.11 毛玻璃

1.12 霓虹效果

1.13 热成像

2. 绘图

2.1 框架结构布局

def create_widgets(self):
        """创建所有UI组件"""
        # 主框架
        main_frame = ttk.Frame(self.root, style="MainFrame.TFrame")
        main_frame.pack(fill=tk.BOTH, expand=True, padx=15, pady=10)

        # 创建菜单
        self.create_menu()

        # 左侧控制面板
        control_panel = ttk.LabelFrame(main_frame, text="控制面板", style="Bold.TLabelframe")
        control_panel.pack(side=tk.LEFT, fill=tk.Y, padx=(0, 15))

        # 操作区域
        self.create_operation_panel(control_panel)

        # 形状调整区域
        self.create_shape_panel(control_panel)

        # 特效区域
        self.create_effects_panel(control_panel)

        # 右侧图片显示区域
        self.create_image_display(main_frame)

        # 状态栏
        self.create_status_bar()

2.2 添加菜单

def create_menu(self):
        """创建菜单系统"""
        menu_bar = tk.Menu(self.root)

        file_menu = tk.Menu(menu_bar, tearoff=0)
        help_menu.add_command(label="联系作者", command=self.about_command)
        menu_bar.add_cascade(label="帮助", menu=help_menu)

        self.root.config(menu=menu_bar)

2.3 选择图像

def create_operation_panel(self, parent):
        """创建操作面板"""
        operation_frame = ttk.LabelFrame(parent, text="操作", style="Bold.TLabelframe")
        operation_frame.pack(fill=tk.X, padx=5, pady=5)

        ttk.Button(operation_frame, text="选择图片", style="Green.TButton",
                   command=self.select_image).pack(fill=tk.X, pady=3)
        ttk.Button(operation_frame, text="保存图片", style="Red.TButton",
                   command=self.save_image).pack(fill=tk.X, pady=3)

2.4 形状面板

def create_shape_panel(self, parent):
        """创建形状调整面板"""
        shape_frame = ttk.LabelFrame(parent, text="形状调整", style="Bold.TLabelframe")
        shape_frame.pack(fill=tk.X, padx=5, pady=5)

        # 创建按钮网格(3列)
        shape_buttons = [
            ("重置", self.reset_image),
            ("缩小", self.narrow_image),
            ("放大", self.enlarge_image),
            ("旋转", self.rotate_image),
            ("水平翻转", self.flip_horizontal),
            ("垂直翻转", self.flip_vertical),
        ]

        for i, (text, command) in enumerate(shape_buttons):
            row = i // 3# 每行3个按钮
            col = i % 3
            ttk.Button(shape_frame, text=text, style="Blue.TButton", command=command).grid(
                row=row, column=col, padx=5, pady=3, sticky="ew"
            )
            if text == '重置':
                ttk.Button(shape_frame, text=text, style="Purple.TButton", command=command).grid(
                    row=row, column=col, padx=5, pady=3, sticky="ew"
                )

2.5 特性面板

def create_effects_panel(self, parent):
        """创建特效面板"""
        effect_frame = ttk.LabelFrame(parent, text="特效", style="Bold.TLabelframe")
        effect_frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)

        # 特效按钮网格布局
        effects = [
            ("灰度", self.gray_image),
            ("灰色反转", self.grayReversal_image),
            ("彩色反转", self.colorReversal_image),
            ("高斯模糊", self.blur_image),
            ("锐化", self.sharpen_image),
            ("美颜", self.beauty_image),
            ("镜像", self.mirror_effect),
            ("怀旧", self.nostalgia_image),
            ("流年", self.flowingYear_image),
            ("素描", self.sketch_image),
            ("马赛克", self.pixelate),
            ("卡通", self.cartoon_image),
            ("水波纹", self.ripple_effect),
            ("毛玻璃", self.glass_image),
            ("霓虹效果", self.neon_effect),
            ("万花筒", self.kaleidoscope),
            ("雨滴效果", self.rain_drop),
            ("热成像效果", self.thermal_imaging),
        ]

        for i, (text, command) in enumerate(effects):
            row = i // 3
            col = i % 3
            ttk.Button(effect_frame, text=text, command=command, style="Orange.TButton").grid(
                row=row, column=col, padx=5, pady=3, sticky="ew"
            )

源码+数据

下载资源