├── .gitignore ├── LICENSE ├── README.md ├── com ├── __init__.py └── zeketian │ ├── __init__.py │ └── imageutil │ ├── Main.py │ ├── __init__.py │ ├── control │ ├── BasicProcessingUtil.py │ └── __init__.py │ └── ui │ ├── ColorCatcher.py │ ├── CustomDialog.py │ ├── CustomLabel.py │ ├── MainUI.py │ ├── UiColorCatcher.py │ ├── __init__.py │ ├── edit_image.png │ ├── font.ttf │ └── rotate.png ├── compress-dialog.py ├── compress-dialog.ui ├── edit_image.png ├── filter-dialog.py ├── filter-dialog.ui ├── main-ui.py ├── main-ui.ui ├── orc-dialog.py ├── orc-dialog.ui ├── resource ├── lenna.png └── 界面运行图.png ├── watermark-dialog.py └── watermark-dialog.ui /.gitignore: -------------------------------------------------------------------------------- 1 | # PyCharm 2 | .idea/ 3 | 4 | # Byte-compiled / optimized / DLL files 5 | __pycache__/ 6 | *.py[cod] 7 | *$py.class 8 | 9 | # C extensions 10 | *.so 11 | 12 | # Distribution / packaging 13 | .Python 14 | build/ 15 | develop-eggs/ 16 | dist/ 17 | downloads/ 18 | eggs/ 19 | .eggs/ 20 | lib/ 21 | lib64/ 22 | parts/ 23 | sdist/ 24 | var/ 25 | wheels/ 26 | pip-wheel-metadata/ 27 | share/python-wheels/ 28 | *.egg-info/ 29 | .installed.cfg 30 | *.egg 31 | MANIFEST 32 | 33 | # PyInstaller 34 | # Usually these files are written by a python script from a template 35 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 36 | *.manifest 37 | *.spec 38 | 39 | # Installer logs 40 | pip-log.txt 41 | pip-delete-this-directory.txt 42 | 43 | # Unit test / coverage reports 44 | htmlcov/ 45 | .tox/ 46 | .nox/ 47 | .coverage 48 | .coverage.* 49 | .cache 50 | nosetests.xml 51 | coverage.xml 52 | *.cover 53 | *.py,cover 54 | .hypothesis/ 55 | .pytest_cache/ 56 | 57 | # Translations 58 | *.mo 59 | *.pot 60 | 61 | # Django stuff: 62 | *.log 63 | local_settings.py 64 | db.sqlite3 65 | db.sqlite3-journal 66 | 67 | # Flask stuff: 68 | instance/ 69 | .webassets-cache 70 | 71 | # Scrapy stuff: 72 | .scrapy 73 | 74 | # Sphinx documentation 75 | docs/_build/ 76 | 77 | # PyBuilder 78 | target/ 79 | 80 | # Jupyter Notebook 81 | .ipynb_checkpoints 82 | 83 | # IPython 84 | profile_default/ 85 | ipython_config.py 86 | 87 | # pyenv 88 | .python-version 89 | 90 | # pipenv 91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 94 | # install all needed dependencies. 95 | #Pipfile.lock 96 | 97 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 98 | __pypackages__/ 99 | 100 | # Celery stuff 101 | celerybeat-schedule 102 | celerybeat.pid 103 | 104 | # SageMath parsed files 105 | *.sage.py 106 | 107 | # Environments 108 | .env 109 | .venv 110 | env/ 111 | venv/ 112 | ENV/ 113 | env.bak/ 114 | venv.bak/ 115 | 116 | # Spyder project settings 117 | .spyderproject 118 | .spyproject 119 | 120 | # Rope project settings 121 | .ropeproject 122 | 123 | # mkdocs documentation 124 | /site 125 | 126 | # mypy 127 | .mypy_cache/ 128 | .dmypy.json 129 | dmypy.json 130 | 131 | # Pyre type checker 132 | .pyre/ 133 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ImageUtils 2 | 本项目是计算机视觉课程上的一个练手项目,是基于 OpenCV 、PyQt 编写的一个可视化的图片处理软件。该软件能够对图片进行一些基本的处理,提供的功能包括:图片裁剪、亮度调整、添加水印、图片模糊、图片压缩、添加滤镜、图片加密、图片解密、OCR、取色。 3 | 4 | 5 | 6 | ## 1. 界面设计 7 | 8 | 软件界面主要分为三个区域,如下图所示。![软件运行界面](./resource/界面运行图.png) 9 | 10 | 软件界面的上面部方,分别为软件图标、菜单区;在下面部分中,左侧为功能区,右侧为图片显示区域。当用户在使用部分功能时,软件的右上角区域会出现图中所示的 “确定” 、“取消” 按钮。只有当用户点击 “确定” 按钮后,相应的功能才会真正生效。 11 | 12 | 13 | 14 | ## 2. 功能介绍 15 | 16 | 软件功能的具体介绍如下: 17 | 18 | - **图片裁剪** 19 | 20 | 用户在打开图片后,点击功能区的 “裁剪” ,然后可以在图片显示区域内,用矩形选出待裁剪的区域,之后点击右上角的 “确定” 即可。 21 | 22 | - **亮度调整** 23 | 24 | 点击功能区的 “亮度” ,然后会显示一个滑动条。用户滑动滑动条,可以将图片的亮度调亮或调暗,当用户调到满意的亮度后,点击右上角的 “确定” 即可。 25 | 26 | - **添加水印** 27 | 28 | 点击功能区的 “水印” ,然后会弹出一个对话框。用户可以在对话框内输入水印的文本内容,支持输入中文,同时可从 “左上角、右上角、中间、左下角、右下角” 五个选项中选择水印的位置。之后,点击对话框的 “OK” 按钮,添加水印。最后,点击右上角的 “确定” 即可。 29 | 30 | - **图片模糊** 31 | 32 | 点击功能区的 “模糊” ,然后可以在图片显示区域内,用矩形选出待模糊的区域,之后点击右上角的 “确定” 即可。 33 | 34 | - **图片压缩** 35 | 36 | 点击功能区的 “压缩” ,然后会弹出一个对话框。用户在对话框内输入目标图片的宽度、高度,之后点击对话框的 “OK” 按钮即可将图片压缩到指定大小。 37 | 38 | - **添加滤镜** 39 | 40 | 点击功能区的 “滤镜” ,然后会弹出一个对话框。用户可以在对话框中选择 “黑白、素描、浮雕、怀旧” 四种预设的滤镜效果,选择完滤镜效果后,点击对话框的 “OK” 按钮,添加滤镜效果。最后,点击右上角的 “确定” 按钮后,滤镜效果真正生效。 41 | 42 | - **图片加密** 43 | 44 | 点击功能区的 “加密” ,然后会弹出一个文件对话框,让用户选择密钥的保存位置。用户选择文件的保存位置后,图片便会被加密,同时在相应的目录下生成一个名为 “img_key” 的密钥文件。 45 | 46 | - **图片解密** 47 | 48 | 点击功能区的 “解密” ,然后会弹出一个文件对话框,让用户选择密钥文件。如果选择的是正确的密钥文件,则图片会被解密,并且在右侧的图片显示区域中显示。否则,图片不会被解密成功。 49 | 50 | - **OCR** 51 | 52 | 用户打开待识别文字的图片后,点击功能区的 “OCR” 。待OCR识别完后,软件会弹出一个对话框,在对话框内的文本区域内会显示识别的文字结果。同时,用户可以在文本区域内对识别结果进行格式、内容的调整。用户调整完后,可以选择复制结果。 53 | 54 | - **取色** 55 | 56 | 点击功能区的 “取色” ,然后会弹出一个对话框,在对话框中会显示当前鼠标所在位置的颜色。用户移动鼠标的位置,对话框中显示的颜色值会发生相应的变化,待用户移到需要取色的位置后,按 “空格” 键即可确定颜色值。最后,用户可以选择复制颜色的RGB值或十六进制值。 57 | 58 | - **恢复** 59 | 60 | 当用户操作错误后,想要恢复原始的图片,点击软件上方菜单区中的 “恢复” 即可。 61 | 62 | 63 | 64 | ## 3. 代码说明 65 | 66 | - 核心代码(图片处理代码) 67 | 68 | 本项目中所有图片处理相关的代码均在 [**“com/zeketian/imageutil/control/BasicProcessingUtil.py”**](https://github.com/ZekeTian/ImageUtils/blob/master/com/zeketian/imageutil/control/BasicProcessingUtil.py) 文件中。 69 | 70 | - 界面代码 71 | 72 | 软件的界面是利用 PyQT 的 **Designer** 工具设计,所有 **.ui** 文件均是由该工具生成。之后,再利用 **Pyuic** 工具将 **.ui** 文件转换成 Python 文件。软件主体界面代码在文件 [“com/zeketian/imageutil/ui/MainUI.py”](https://github.com/ZekeTian/ImageUtils/blob/master/com/zeketian/imageutil/ui/MainUI.py) 中。 73 | 74 | 75 | 76 | ## 4. 特别说明 77 | 78 | - OCR 配置 79 | 80 | 本项目中的 “OCR” 功能使用了百度的 OCR 识别 API,因此如果需要使用该功能,请先在百度 AI 开放平台中创建OCR 识别项目,然后修改 [**“com/zeketian/imageutil/control/BasicProcessingUtil.py”**](https://github.com/ZekeTian/ImageUtils/blob/master/com/zeketian/imageutil/control/BasicProcessingUtil.py) 的 **img_ocr** 函数中的API 配置信息,如下所示。 81 | 82 | ```python 83 | APP_ID = '你的 App ID' 84 | API_KEY = '你的 Api Key' 85 | SECRET_KEY = '你的 Secret Key' 86 | ``` 87 | 88 | - 取色功能 89 | 90 | 本项目中 “取色” 功能使用了 shuoGG1239 的 [ColorCatcher](https://github.com/shuoGG1239/ColorCatcher) 项目的代码,特别感谢。 91 | 92 | - 图片文件路径 93 | 94 | 在选择图片时,图片文件所在的路径中不要出现中文,否则打开图片时可能会出现问题。 95 | 96 | -------------------------------------------------------------------------------- /com/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZekeTian/ImageUtils/af2adfe8b4457cae95e2bb6a0a4200ca5611344d/com/__init__.py -------------------------------------------------------------------------------- /com/zeketian/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZekeTian/ImageUtils/af2adfe8b4457cae95e2bb6a0a4200ca5611344d/com/zeketian/__init__.py -------------------------------------------------------------------------------- /com/zeketian/imageutil/Main.py: -------------------------------------------------------------------------------- 1 | import sys, os 2 | from com.zeketian.imageutil.ui.MainUI import MainWindow 3 | from PyQt5.QtWidgets import QApplication, QMainWindow 4 | from PyQt5 import QtCore 5 | 6 | 7 | class MyWindow(QMainWindow, MainWindow): 8 | def __init__(self, parent=None): 9 | super(MyWindow, self).__init__(parent) 10 | self.setupUi(self) 11 | 12 | 13 | if __name__ == '__main__': 14 | try: 15 | app = QApplication(sys.argv) 16 | window = MyWindow() 17 | window.show() 18 | sys.exit(app.exec_()) 19 | except Exception as e: 20 | print(e) 21 | -------------------------------------------------------------------------------- /com/zeketian/imageutil/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZekeTian/ImageUtils/af2adfe8b4457cae95e2bb6a0a4200ca5611344d/com/zeketian/imageutil/__init__.py -------------------------------------------------------------------------------- /com/zeketian/imageutil/control/BasicProcessingUtil.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | import numpy as np 3 | from aip import AipOcr 4 | from PIL import Image, ImageDraw, ImageFont 5 | import os, math 6 | 7 | 8 | def crop_image(src_img, x_start, x_end, y_start, y_end): 9 | """ 10 | 图片裁剪 11 | :param src_img: 原始图片 12 | :param x_start: x 起始坐标 13 | :param x_end: x 结束坐标 14 | :param y_start: y 开始坐标 15 | :param y_end: y 结束坐标 16 | :return: 17 | """ 18 | tmp_img = cv2.cvtColor(src_img, cv2.COLOR_BGR2RGB) 19 | tmp_img = tmp_img[y_start:y_end, x_start:x_end] # 长,宽 20 | return cv2.cvtColor(tmp_img, cv2.COLOR_RGB2BGR) 21 | 22 | 23 | def adjust_lightness(src_img, lightness_value): 24 | """ 25 | :param src_img: 待调整亮度的图片 26 | :param lightness_value: 亮度值 27 | :return: 28 | """ 29 | height, width, channel = src_img.shape # 获取shape的数值,height和width、通道 30 | 31 | # 新建全零图片数组src2,将height和width,类型设置为原图片的通道类型(色素全为零,输出为全黑图片) 32 | src2 = np.zeros([height, width, channel], src_img.dtype) 33 | # new_img = cv2.addWeighted(src_img, a, src2, 1 - a, lightnessValue) # 处理后的图片 34 | new_img = cv2.addWeighted(src_img, 1, src2, 1, lightness_value) # 处理后的图片 35 | 36 | return new_img 37 | 38 | 39 | def add_watermark(src_img, water_text, position, color): 40 | """ 41 | 添加水印 42 | :param src_img: 原始图片 43 | :param water_text: 水印文字 44 | :param position: 水印位置 45 | :param color: 水印文字颜色 46 | :return: 47 | """ 48 | # 根据选择的位置,确定水印的起始位置 49 | height, width, channel = src_img.shape 50 | x_padding, y_padding = width * 0.05, height * 0.05 # 与边缘的间距 51 | 52 | scale = min((width / 1000), (height / 1000)) # 按照图片的长宽大小对字体进行一个放大,scale 即为放大倍数 53 | font_size = 20 + int(scale) * 5 # 根据 scale 增加字体的大小,从而使得字体大小适应图片的大小 54 | font_path = "{0}/ui/font.ttf".format(os.getcwd()) 55 | font = ImageFont.truetype(font_path, font_size, encoding="utf-8") # 获取自定义的字体 56 | (text_width, text_height) = font.getsize(water_text) 57 | 58 | x_start, y_start = 0, 0 # 水印文字的左下角坐标 59 | if position == "左上角": 60 | x_start = x_padding 61 | y_start = y_padding 62 | elif position == "右上角": 63 | x_start = width - text_width - x_padding 64 | y_start = y_padding 65 | elif position == "中间": 66 | x_start = (width - text_width) / 2 67 | y_start = (height - text_height) / 2 68 | elif position == "左下角": 69 | x_start = x_padding 70 | y_start = height - y_padding - text_height 71 | elif position == "右下角": 72 | x_start = width - text_width - x_padding 73 | y_start = height - y_padding - text_height 74 | 75 | img_pil = Image.fromarray(cv2.cvtColor(src_img, cv2.COLOR_BGR2RGB)) # 将 OpenCV 的 BGR 色彩转换成 PIL 需要的 RGB 色彩 76 | draw = ImageDraw.Draw(img_pil) 77 | draw.text((x_start, y_start), water_text, color, font=font) 78 | return cv2.cvtColor(np.asarray(img_pil), cv2.COLOR_RGB2BGR) # 将 PIL 的 RGB 色彩转换成 OpenCV 的 BGR 色彩 79 | 80 | 81 | def gaussian_blur(src_img, x_start, x_end, y_start, y_end, ksize, sigmaX): 82 | """ 83 | 高斯模糊 84 | """ 85 | blur = src_img[y_start:y_end, x_start:x_end] 86 | blur = cv2.GaussianBlur(blur, ksize, sigmaX) 87 | src_img[y_start:y_end, x_start:x_end] = blur 88 | return src_img 89 | 90 | 91 | def compress_img(src_img, size): 92 | """ 93 | 调整图片到指定大小 94 | """ 95 | return cv2.resize(src_img, size, interpolation=cv2.INTER_AREA) 96 | 97 | 98 | def img_stitching(images): 99 | """ 100 | 图片拼接 101 | """ 102 | stitcher = cv2.Stitcher_create() 103 | status, stitch_img = stitcher.stitch(images) 104 | if status != cv2.Stitcher_OK: 105 | print(f"合拼图片失败,status = {status}") 106 | return stitch_img 107 | 108 | 109 | def img_encoding(image, dir_path): 110 | """ 111 | 图片加密 112 | :return: 113 | """ 114 | height, width, channel = image.shape 115 | 116 | # 随机创建密钥文件 117 | img_key = np.random.randint(0, 256, size=[height, width, channel], dtype=np.uint8) 118 | # 保存密钥 119 | np.save(dir_path + "/" + "img_key2", img_key) 120 | 121 | # 返回加密后的图片 122 | return cv2.bitwise_xor(image, img_key) 123 | 124 | 125 | def img_decoding(image, key_file_path): 126 | """ 127 | 图片解密 128 | """ 129 | img_key = np.load(key_file_path) 130 | return cv2.bitwise_xor(image, img_key) 131 | 132 | 133 | def img_ocr(image): 134 | """ 135 | OCR 文字识别 136 | """ 137 | APP_ID = '你的 App ID' 138 | API_KEY = '你的 Api Key' 139 | SECRET_KEY = '你的 Secret Key' 140 | 141 | client = AipOcr(APP_ID, API_KEY, SECRET_KEY) 142 | text = client.basicGeneral(image) 143 | words_result = text["words_result"] 144 | result_str = "" # 存储最终的结果 145 | for w in words_result: 146 | result_str = result_str + w["words"] + "\n" 147 | 148 | return result_str 149 | 150 | 151 | # 滤镜效果 152 | def black_white_filter(src_img): 153 | """ 154 | 黑白滤镜 155 | """ 156 | return cv2.cvtColor(src_img, cv2.COLOR_BGR2GRAY) # 直接将图片转换为灰度图片即可 157 | 158 | 159 | def sketch_filter(src_img): 160 | """ 161 | 素描滤镜 162 | """ 163 | # 图像灰度处理 164 | gray_img = cv2.cvtColor(src_img, cv2.COLOR_BGR2GRAY) 165 | 166 | # 高斯滤波降噪 167 | gaussian = cv2.GaussianBlur(gray_img, (5, 5), 0) 168 | 169 | # Canny算子 170 | canny = cv2.Canny(gaussian, 50, 150) 171 | 172 | # 阈值化处理 173 | ret, result = cv2.threshold(canny, 100, 255, cv2.THRESH_BINARY_INV) 174 | return result 175 | 176 | 177 | def embossment_filter(src_img): 178 | """ 179 | 浮雕滤镜 180 | """ 181 | # 获取图像行和列 182 | height, width = src_img.shape[:2] 183 | # 图像灰度处理 184 | gray_img = cv2.cvtColor(src_img, cv2.COLOR_BGR2GRAY) 185 | 186 | result = np.zeros(gray_img.shape, np.uint8) 187 | 188 | for w in range(0, width - 1): 189 | new_value = np.int32(gray_img[:, w]) - np.int32(gray_img[:, w + 1]) + 120 190 | new_value[new_value > 255] = 255 191 | new_value[new_value < 0] = 0 192 | result[:, w] = new_value 193 | 194 | return result 195 | 196 | 197 | def reminiscence_filter(src_img): 198 | """ 199 | 怀旧滤镜 200 | """ 201 | # 图像怀旧特效 202 | B = 0.272 * src_img[:, :, 2] + 0.534 * src_img[:, :, 1] + 0.131 * src_img[:, :, 0] 203 | G = 0.349 * src_img[:, :, 2] + 0.686 * src_img[:, :, 1] + 0.168 * src_img[:, :, 0] 204 | R = 0.393 * src_img[:, :, 2] + 0.769 * src_img[:, :, 1] + 0.189 * src_img[:, :, 0] 205 | 206 | # 像素值大于 255 的,则直接赋值为 255 207 | B[B > 255] = 255 208 | G[G > 255] = 255 209 | R[R > 255] = 255 210 | 211 | filter_result = np.dstack((B, G, R)) # 加了滤镜效果后的图片 212 | return np.uint8(filter_result) # 将像素值从 numpy.float64 类型转换成 np.uint8 类型,从而可以正常显示 213 | 214 | # for i in range(rows): 215 | # for j in range(cols): 216 | # B = 0.272 * src_img[i, j][2] + 0.534 * src_img[i, j][1] + 0.131 * src_img[i, j][0] 217 | # G = 0.349 * src_img[i, j][2] + 0.686 * src_img[i, j][1] + 0.168 * src_img[i, j][0] 218 | # R = 0.393 * src_img[i, j][2] + 0.769 * src_img[i, j][1] + 0.189 * src_img[i, j][0] 219 | # if B > 255: 220 | # B = 255 221 | # if G > 255: 222 | # G = 255 223 | # if R > 255: 224 | # R = 255 225 | # dst[i, j] = np.uint8((B, G, R)) 226 | # return dst 227 | 228 | 229 | def add_filter(src_img, filter_type): 230 | """ 231 | 为图片添加滤镜效果 232 | :param src_img: 原始图片 233 | :param filter_type: 滤镜类型 234 | """ 235 | if filter_type == "黑白": 236 | return black_white_filter(src_img) 237 | elif filter_type == "素描": 238 | return sketch_filter(src_img) 239 | elif filter_type == "浮雕": 240 | return embossment_filter(src_img) 241 | elif filter_type == "怀旧": 242 | return reminiscence_filter(src_img) 243 | -------------------------------------------------------------------------------- /com/zeketian/imageutil/control/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZekeTian/ImageUtils/af2adfe8b4457cae95e2bb6a0a4200ca5611344d/com/zeketian/imageutil/control/__init__.py -------------------------------------------------------------------------------- /com/zeketian/imageutil/ui/ColorCatcher.py: -------------------------------------------------------------------------------- 1 | from PyQt5.QtCore import Qt, QTimer 2 | from PyQt5.QtGui import QGuiApplication, QColor, QCursor 3 | from PyQt5.QtWidgets import QWidget, QApplication, QDialog 4 | 5 | from com.zeketian.imageutil.ui.UiColorCatcher import ColorCatcherDialog 6 | 7 | 8 | class ColorCatcher(QDialog): 9 | def __init__(self): 10 | QDialog.__init__(self) 11 | self.ui = ColorCatcherDialog() 12 | self.ui.setupUi(self) 13 | self.ui.lineEditMark.setText("按空格键确定") 14 | self.timer = QTimer(self) 15 | self.timer.timeout.connect(self.catch) 16 | self.timer.start(100) 17 | self.nowColor = None 18 | self.setCursor(Qt.CrossCursor) 19 | self.show() 20 | 21 | def catch(self): 22 | x = QCursor.pos().x() 23 | y = QCursor.pos().y() 24 | pixmap = QGuiApplication.primaryScreen().grabWindow(QApplication.desktop().winId(), x, y, 1, 1) 25 | if not pixmap.isNull(): 26 | image = pixmap.toImage() 27 | if not image.isNull(): 28 | if (image.valid(0, 0)): 29 | color = QColor(image.pixel(0, 0)) 30 | r, g, b, _ = color.getRgb() 31 | self.nowColor = color 32 | self.ui.lineEditMove.setText('(%d, %d, %d) %s' % (r, g, b, color.name().upper())) 33 | self.ui.lineEditMove.setStyleSheet('QLineEdit{border:2px solid %s;}' % (color.name())) 34 | 35 | def keyPressEvent(self, event): 36 | if event.key() == Qt.Key_Space: 37 | self.ui.lineEditMark.setText(self.ui.lineEditMove.text()) 38 | self.ui.lineEditMark.setStyleSheet('QLineEdit{border:2px solid %s;}' % (self.nowColor.name())) 39 | -------------------------------------------------------------------------------- /com/zeketian/imageutil/ui/CustomDialog.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'watermark-dialog.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.13.0 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | 10 | from PyQt5 import QtCore, QtGui, QtWidgets 11 | from PyQt5.QtGui import QIntValidator 12 | from PyQt5.QtWidgets import QDialog 13 | 14 | 15 | class WatermarkDialog(QDialog): 16 | """ 17 | 设置水印信息的对话框 18 | """ 19 | 20 | def __init__(self): 21 | QDialog.__init__(self) 22 | self.setupUi(self) 23 | 24 | def setupUi(self, Dialog): 25 | Dialog.setObjectName("Dialog") 26 | Dialog.resize(400, 100) 27 | self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) 28 | self.verticalLayout.setObjectName("verticalLayout") 29 | self.lineEdit = QtWidgets.QLineEdit(Dialog) 30 | self.lineEdit.setObjectName("lineEdit") 31 | self.verticalLayout.addWidget(self.lineEdit) 32 | self.horizontalLayout = QtWidgets.QHBoxLayout() 33 | self.horizontalLayout.setSpacing(5) 34 | self.horizontalLayout.setObjectName("horizontalLayout") 35 | self.comboBox = QtWidgets.QComboBox(Dialog) 36 | self.comboBox.setObjectName("comboBox") 37 | self.comboBox.addItem("") 38 | self.comboBox.addItem("") 39 | self.comboBox.addItem("") 40 | self.comboBox.addItem("") 41 | self.comboBox.addItem("") 42 | self.horizontalLayout.addWidget(self.comboBox) 43 | self.btn_confirm = QtWidgets.QDialogButtonBox(Dialog) 44 | self.btn_confirm.setOrientation(QtCore.Qt.Horizontal) 45 | self.btn_confirm.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel | QtWidgets.QDialogButtonBox.Ok) 46 | self.btn_confirm.setObjectName("btn_confirm") 47 | self.horizontalLayout.addWidget(self.btn_confirm) 48 | self.verticalLayout.addLayout(self.horizontalLayout) 49 | 50 | self.__current_position = "左上角" # 水印位置初始值为左上角 51 | 52 | self.retranslateUi(Dialog) 53 | self.comboBox.activated.connect(self.handle_activated) 54 | self.btn_confirm.accepted.connect(Dialog.accept) 55 | self.btn_confirm.rejected.connect(Dialog.reject) 56 | QtCore.QMetaObject.connectSlotsByName(Dialog) 57 | 58 | def retranslateUi(self, Dialog): 59 | _translate = QtCore.QCoreApplication.translate 60 | Dialog.setWindowTitle(_translate("Dialog", "Dialog")) 61 | self.comboBox.setItemText(0, _translate("Dialog", "左上角")) 62 | self.comboBox.setItemText(1, _translate("Dialog", "右上角")) 63 | self.comboBox.setItemText(2, _translate("Dialog", "中间")) 64 | self.comboBox.setItemText(3, _translate("Dialog", "左下角")) 65 | self.comboBox.setItemText(4, _translate("Dialog", "右下角")) 66 | 67 | def get_watermark_text(self): 68 | return self.lineEdit.text() 69 | 70 | def get_watermark_position(self): 71 | return self.__current_position 72 | 73 | def handle_activated(self, index): 74 | self.__current_position = self.comboBox.itemText(index) 75 | 76 | 77 | class OcrDialog(QDialog): 78 | """ 79 | 显示 OCR 结果的对话框 80 | """ 81 | 82 | def __init__(self): 83 | QDialog.__init__(self) 84 | self.setupUi(self) 85 | 86 | def setupUi(self, Dialog): 87 | Dialog.setObjectName("Dialog") 88 | Dialog.resize(594, 302) 89 | self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) 90 | self.verticalLayout.setObjectName("verticalLayout") 91 | self.plainTextEdit = QtWidgets.QPlainTextEdit(Dialog) 92 | self.plainTextEdit.setObjectName("plainTextEdit") 93 | self.verticalLayout.addWidget(self.plainTextEdit) 94 | self.horizontalLayout = QtWidgets.QHBoxLayout() 95 | self.horizontalLayout.setObjectName("horizontalLayout") 96 | spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 97 | self.horizontalLayout.addItem(spacerItem) 98 | self.btn_ok = QtWidgets.QPushButton(Dialog) 99 | self.btn_ok.setObjectName("btn_ok") 100 | self.horizontalLayout.addWidget(self.btn_ok) 101 | self.verticalLayout.addLayout(self.horizontalLayout) 102 | self.retranslateUi(Dialog) 103 | self.btn_ok.clicked.connect(Dialog.accept) 104 | QtCore.QMetaObject.connectSlotsByName(Dialog) 105 | 106 | def retranslateUi(self, Dialog): 107 | _translate = QtCore.QCoreApplication.translate 108 | Dialog.setWindowTitle(_translate("Dialog", "OCR结果")) 109 | self.btn_ok.setText(_translate("Dialog", "OK")) 110 | 111 | 112 | class CompressDialog(QDialog): 113 | """ 114 | 设置压缩信息的对话框 115 | """ 116 | 117 | def __init__(self): 118 | QDialog.__init__(self) 119 | self.setupUi(self) 120 | 121 | def setupUi(self, Dialog): 122 | Dialog.setObjectName("Dialog") 123 | Dialog.resize(300, 100) 124 | Dialog.setMinimumSize(QtCore.QSize(300, 100)) 125 | Dialog.setMaximumSize(QtCore.QSize(300, 100)) 126 | self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) 127 | self.verticalLayout.setObjectName("verticalLayout") 128 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout() 129 | self.horizontalLayout_2.setObjectName("horizontalLayout_2") 130 | self.label_width = QtWidgets.QLabel(Dialog) 131 | self.label_width.setObjectName("label_width") 132 | self.horizontalLayout_2.addWidget(self.label_width) 133 | self.input_width = QtWidgets.QLineEdit(Dialog) 134 | self.input_width.setObjectName("input_width") 135 | self.horizontalLayout_2.addWidget(self.input_width) 136 | self.label_height = QtWidgets.QLabel(Dialog) 137 | self.label_height.setObjectName("label_height") 138 | self.horizontalLayout_2.addWidget(self.label_height) 139 | self.input_height = QtWidgets.QLineEdit(Dialog) 140 | self.input_height.setObjectName("input_height") 141 | self.horizontalLayout_2.addWidget(self.input_height) 142 | self.verticalLayout.addLayout(self.horizontalLayout_2) 143 | self.horizontalLayout = QtWidgets.QHBoxLayout() 144 | self.horizontalLayout.setObjectName("horizontalLayout") 145 | spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 146 | self.horizontalLayout.addItem(spacerItem) 147 | self.btn_ok = QtWidgets.QPushButton(Dialog) 148 | self.btn_ok.setObjectName("btn_ok") 149 | self.horizontalLayout.addWidget(self.btn_ok) 150 | self.verticalLayout.addLayout(self.horizontalLayout) 151 | 152 | # 设置输入框内容的整型验证器,从而限制输入的数据类型 153 | self.input_width.setValidator(QIntValidator()) 154 | self.input_height.setValidator(QIntValidator()) 155 | 156 | self.retranslateUi(Dialog) 157 | self.btn_ok.clicked.connect(Dialog.accept) 158 | QtCore.QMetaObject.connectSlotsByName(Dialog) 159 | 160 | def retranslateUi(self, Dialog): 161 | _translate = QtCore.QCoreApplication.translate 162 | Dialog.setWindowTitle(_translate("Dialog", "请输入目标图片大小")) 163 | self.label_width.setText(_translate("Dialog", "Width:")) 164 | self.label_height.setText(_translate("Dialog", "Height:")) 165 | self.btn_ok.setText(_translate("Dialog", "OK")) 166 | 167 | 168 | class FilterDialog(QDialog): 169 | """ 170 | 选择滤镜效果的对话框 171 | """ 172 | 173 | def __init__(self): 174 | QDialog.__init__(self) 175 | self.setupUi(self) 176 | 177 | def setupUi(self, Dialog): 178 | Dialog.setObjectName("Dialog") 179 | Dialog.resize(200, 150) 180 | Dialog.setMinimumSize(QtCore.QSize(200, 150)) 181 | Dialog.setMaximumSize(QtCore.QSize(200, 150)) 182 | self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) 183 | self.verticalLayout.setObjectName("verticalLayout") 184 | self.horizontalLayout_3 = QtWidgets.QHBoxLayout() 185 | self.horizontalLayout_3.setObjectName("horizontalLayout_3") 186 | self.groupBox_2 = QtWidgets.QGroupBox(Dialog) 187 | self.groupBox_2.setTitle("") 188 | self.groupBox_2.setObjectName("groupBox_2") 189 | self.rb_black_white = QtWidgets.QRadioButton(self.groupBox_2) 190 | self.rb_black_white.setGeometry(QtCore.QRect(10, 10, 115, 19)) 191 | self.rb_black_white.setObjectName("rb_black_white") 192 | self.rb_sketch = QtWidgets.QRadioButton(self.groupBox_2) 193 | self.rb_sketch.setGeometry(QtCore.QRect(90, 10, 115, 19)) 194 | self.rb_sketch.setObjectName("rb_sketch") 195 | self.rb_embossment = QtWidgets.QRadioButton(self.groupBox_2) 196 | self.rb_embossment.setGeometry(QtCore.QRect(10, 40, 115, 19)) 197 | self.rb_embossment.setObjectName("rb_embossment") 198 | self.rb_reminiscence = QtWidgets.QRadioButton(self.groupBox_2) 199 | self.rb_reminiscence.setGeometry(QtCore.QRect(90, 40, 115, 19)) 200 | self.rb_reminiscence.setObjectName("rb_reminiscence") 201 | self.horizontalLayout_3.addWidget(self.groupBox_2) 202 | self.verticalLayout.addLayout(self.horizontalLayout_3) 203 | self.horizontalLayout = QtWidgets.QHBoxLayout() 204 | self.horizontalLayout.setSpacing(0) 205 | self.horizontalLayout.setObjectName("horizontalLayout") 206 | spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 207 | self.horizontalLayout.addItem(spacerItem) 208 | self.btn_ok = QtWidgets.QPushButton(Dialog) 209 | self.btn_ok.setObjectName("btn_ok") 210 | self.horizontalLayout.addWidget(self.btn_ok) 211 | self.verticalLayout.addLayout(self.horizontalLayout) 212 | 213 | self.retranslateUi(Dialog) 214 | 215 | self.filter_type = "黑白" # 默认选择为 “黑白” 效果 216 | self.rb_black_white.setChecked(True) 217 | 218 | self.rb_black_white.toggled.connect(self.__select_filter) 219 | self.rb_sketch.toggled.connect(self.__select_filter) 220 | self.rb_embossment.toggled.connect(self.__select_filter) 221 | self.rb_reminiscence.toggled.connect(self.__select_filter) 222 | self.btn_ok.clicked.connect(Dialog.accept) 223 | 224 | QtCore.QMetaObject.connectSlotsByName(Dialog) 225 | 226 | def retranslateUi(self, Dialog): 227 | _translate = QtCore.QCoreApplication.translate 228 | Dialog.setWindowTitle(_translate("Dialog", "滤镜")) 229 | self.rb_black_white.setText(_translate("Dialog", "黑白")) 230 | self.rb_sketch.setText(_translate("Dialog", "素描")) 231 | self.rb_embossment.setText(_translate("Dialog", "浮雕")) 232 | self.rb_reminiscence.setText(_translate("Dialog", "怀旧")) 233 | self.btn_ok.setText(_translate("Dialog", "OK")) 234 | 235 | def __select_filter(self): 236 | if self.rb_black_white.isChecked(): 237 | self.filter_type = "黑白" 238 | elif self.rb_sketch.isChecked(): 239 | self.filter_type = "素描" 240 | elif self.rb_embossment.isChecked(): 241 | self.filter_type = "浮雕" 242 | elif self.rb_reminiscence.isChecked(): 243 | self.filter_type = "怀旧" -------------------------------------------------------------------------------- /com/zeketian/imageutil/ui/CustomLabel.py: -------------------------------------------------------------------------------- 1 | from PyQt5.QtCore import QRect, Qt 2 | from PyQt5.QtGui import QPainter, QPen 3 | from PyQt5.QtWidgets import QLabel 4 | from PyQt5 import QtWidgets 5 | 6 | 7 | class ImageLabel(QLabel): 8 | """" 9 | 用于显示图片的 Label 10 | """ 11 | 12 | # x0 = 0 13 | # y0 = 0 14 | # x1 = 0 15 | # y1 = 0 16 | # flag = False 17 | def __init__(self, parent=None): 18 | # super(ImageLabel, self).__init__(parent) 19 | super().__init__(parent) 20 | 21 | self.x0 = 0 22 | self.y0 = 0 23 | self.x1 = 0 24 | self.y1 = 0 25 | self.flag = False # 标记是否能够绘制矩形 26 | self.__isClear = False # 标记是否是清除矩形 27 | self.setAlignment(Qt.AlignCenter) # 居中对齐 28 | self.setFrameShape(QtWidgets.QFrame.Box) # 设置边框 29 | self.setStyleSheet("border-width: 1px;border-style: solid;border-color: rgb(218, 218, 218)") 30 | self.setText("") 31 | 32 | self.__w, self.__h = 0, 0 33 | self.pixmap_width, self.pixmap_height = 0, 0 # pixmap 的宽度、高度 34 | self.pixmap_x_start, self.pixmap_y_start = 0, 0 # pixmap 在 label 中的起点位置 35 | self.pixmap_x_end, self.pixmap_y_end = 0, 0 # pixamp 在 label 中的终点位置 36 | 37 | self.img_x_start, self.img_y_start = 0, 0 # 图片中选择的矩形区域的起点位置 38 | self.img_x_end, self.img_y_end = 0, 0 # 图片中选择的矩形区域的终点位置 39 | self.autoFillBackground() 40 | 41 | # 鼠标点击事件 42 | def mousePressEvent(self, event): 43 | # self.flag = True 44 | # 鼠标点击,相当于开始绘制矩形,将 isClear 置为 False 45 | self.__isClear = False 46 | self.x0 = event.x() 47 | self.y0 = event.y() 48 | 49 | # 计算 Pixmap 在 Label 中的位置 50 | self.__w, self.__h = self.width(), self.height() 51 | self.pixmap_x_start = (self.__w - self.pixmap_width) / 2 52 | self.pixmap_y_start = (self.__h - self.pixmap_height) / 2 53 | self.pixmap_x_end = self.pixmap_x_start + self.pixmap_width 54 | self.pixmap_y_end = self.pixmap_y_start + self.pixmap_height 55 | 56 | # 鼠标释放事件 57 | def mouseReleaseEvent(self, event): 58 | # self.flag = False 59 | self.setCursor(Qt.ArrowCursor) # 鼠标释放,矩形已经绘制完毕,恢复鼠标样式 60 | 61 | # 鼠标移动事件 62 | def mouseMoveEvent(self, event): 63 | if self.flag: 64 | self.x1 = event.x() 65 | self.y1 = event.y() 66 | self.update() 67 | 68 | def setPixmap(self, pixmap): 69 | super().setPixmap(pixmap) 70 | self.pixmap_width, self.pixmap_height = pixmap.width(), pixmap.height() 71 | 72 | # 绘制事件 73 | def paintEvent(self, event): 74 | super().paintEvent(event) 75 | 76 | # 判断是否是清除 77 | if self.__isClear: 78 | return # 是清除,则不需要执行下面的绘制操作。即此次 paint 事件没有绘制操作,因此界面中没有绘制的图形(从而相当于清除整个界面中已有的图形) 79 | 80 | # 判断用户起始位置是否在图片区域,只有在图片区域才画选择的矩形图 81 | if (self.pixmap_x_start <= self.x0 <= self.pixmap_x_end) \ 82 | and (self.pixmap_y_start <= self.y0 <= self.pixmap_y_end): 83 | # 判断结束位置是否在图片区域内,如果超过,则直接设置成图片区域的终点 84 | if self.x1 > self.pixmap_x_end: 85 | self.x1 = self.pixmap_x_end 86 | elif self.x1 < self.pixmap_x_start: 87 | self.x1 = self.pixmap_x_start 88 | 89 | if self.y1 > self.pixmap_y_end: 90 | self.y1 = self.pixmap_y_end 91 | elif self.y1 < self.pixmap_y_start: 92 | self.y1 = self.pixmap_y_start 93 | rect = QRect(self.x0, self.y0, self.x1 - self.x0, self.y1 - self.y0) 94 | 95 | painter = QPainter(self) 96 | painter.setPen(QPen(Qt.red, 2, Qt.SolidLine)) 97 | painter.drawRect(rect) 98 | 99 | # 计算矩形区域在图片中的位置 100 | self.img_x_start = int(self.x0 - self.pixmap_x_start) 101 | self.img_x_end = int(self.x1 - self.pixmap_x_start) 102 | self.img_y_start = int(self.y0 - self.pixmap_y_start) 103 | self.img_y_end = int(self.y1 - self.pixmap_y_start) 104 | 105 | def clearRect(self): 106 | # 清除 107 | self.__isClear = True 108 | self.update() 109 | -------------------------------------------------------------------------------- /com/zeketian/imageutil/ui/UiColorCatcher.py: -------------------------------------------------------------------------------- 1 | from PyQt5 import QtCore, QtGui, QtWidgets 2 | 3 | 4 | class ColorCatcherDialog(object): 5 | def setupUi(self, ColorCatcher): 6 | ColorCatcher.setObjectName("ColorCatcher") 7 | ColorCatcher.resize(259, 88) 8 | self.verticalLayout = QtWidgets.QVBoxLayout(ColorCatcher) 9 | self.verticalLayout.setObjectName("verticalLayout") 10 | self.lineEditMove = QtWidgets.QLineEdit(ColorCatcher) 11 | self.lineEditMove.setMinimumSize(QtCore.QSize(0, 30)) 12 | self.lineEditMove.setAlignment(QtCore.Qt.AlignCenter) 13 | self.lineEditMove.setReadOnly(True) 14 | self.lineEditMove.setPlaceholderText("") 15 | self.lineEditMove.setObjectName("lineEditMove") 16 | self.verticalLayout.addWidget(self.lineEditMove) 17 | self.lineEditMark = QtWidgets.QLineEdit(ColorCatcher) 18 | self.lineEditMark.setMinimumSize(QtCore.QSize(0, 30)) 19 | self.lineEditMark.setAlignment(QtCore.Qt.AlignCenter) 20 | self.lineEditMark.setReadOnly(True) 21 | self.lineEditMark.setObjectName("lineEditMark") 22 | self.verticalLayout.addWidget(self.lineEditMark) 23 | 24 | self.retranslateUi(ColorCatcher) 25 | QtCore.QMetaObject.connectSlotsByName(ColorCatcher) 26 | 27 | def retranslateUi(self, ColorCatcher): 28 | _translate = QtCore.QCoreApplication.translate 29 | ColorCatcher.setWindowTitle(_translate("ColorCatcher", "ColorCatcher")) 30 | self.lineEditMark.setText(_translate("ColorCatcher", "Press Space to mark")) 31 | self.lineEditMark.setPlaceholderText(_translate("ColorCatcher", "Press Space to mark!")) 32 | -------------------------------------------------------------------------------- /com/zeketian/imageutil/ui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZekeTian/ImageUtils/af2adfe8b4457cae95e2bb6a0a4200ca5611344d/com/zeketian/imageutil/ui/__init__.py -------------------------------------------------------------------------------- /com/zeketian/imageutil/ui/edit_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZekeTian/ImageUtils/af2adfe8b4457cae95e2bb6a0a4200ca5611344d/com/zeketian/imageutil/ui/edit_image.png -------------------------------------------------------------------------------- /com/zeketian/imageutil/ui/font.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZekeTian/ImageUtils/af2adfe8b4457cae95e2bb6a0a4200ca5611344d/com/zeketian/imageutil/ui/font.ttf -------------------------------------------------------------------------------- /com/zeketian/imageutil/ui/rotate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZekeTian/ImageUtils/af2adfe8b4457cae95e2bb6a0a4200ca5611344d/com/zeketian/imageutil/ui/rotate.png -------------------------------------------------------------------------------- /compress-dialog.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'compress-dialog.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.13.0 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | 10 | from PyQt5 import QtCore, QtGui, QtWidgets 11 | 12 | 13 | class Ui_Dialog(object): 14 | def setupUi(self, Dialog): 15 | Dialog.setObjectName("Dialog") 16 | Dialog.resize(300, 100) 17 | Dialog.setMinimumSize(QtCore.QSize(300, 100)) 18 | Dialog.setMaximumSize(QtCore.QSize(300, 100)) 19 | self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) 20 | self.verticalLayout.setObjectName("verticalLayout") 21 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout() 22 | self.horizontalLayout_2.setObjectName("horizontalLayout_2") 23 | self.label_width = QtWidgets.QLabel(Dialog) 24 | self.label_width.setObjectName("label_width") 25 | self.horizontalLayout_2.addWidget(self.label_width) 26 | self.input_width = QtWidgets.QLineEdit(Dialog) 27 | self.input_width.setObjectName("input_width") 28 | self.horizontalLayout_2.addWidget(self.input_width) 29 | self.label_height = QtWidgets.QLabel(Dialog) 30 | self.label_height.setObjectName("label_height") 31 | self.horizontalLayout_2.addWidget(self.label_height) 32 | self.input_height = QtWidgets.QLineEdit(Dialog) 33 | self.input_height.setObjectName("input_height") 34 | self.horizontalLayout_2.addWidget(self.input_height) 35 | self.verticalLayout.addLayout(self.horizontalLayout_2) 36 | self.horizontalLayout = QtWidgets.QHBoxLayout() 37 | self.horizontalLayout.setObjectName("horizontalLayout") 38 | spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 39 | self.horizontalLayout.addItem(spacerItem) 40 | self.btn_ok = QtWidgets.QPushButton(Dialog) 41 | self.btn_ok.setObjectName("btn_ok") 42 | self.horizontalLayout.addWidget(self.btn_ok) 43 | self.verticalLayout.addLayout(self.horizontalLayout) 44 | 45 | self.retranslateUi(Dialog) 46 | self.btn_ok.clicked.connect(Dialog.accept) 47 | QtCore.QMetaObject.connectSlotsByName(Dialog) 48 | 49 | def retranslateUi(self, Dialog): 50 | _translate = QtCore.QCoreApplication.translate 51 | Dialog.setWindowTitle(_translate("Dialog", "Dialog")) 52 | self.label_width.setText(_translate("Dialog", "Width:")) 53 | self.label_height.setText(_translate("Dialog", "Height:")) 54 | self.btn_ok.setText(_translate("Dialog", "OK")) 55 | -------------------------------------------------------------------------------- /compress-dialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 300 10 | 100 11 | 12 | 13 | 14 | 15 | 300 16 | 100 17 | 18 | 19 | 20 | 21 | 300 22 | 100 23 | 24 | 25 | 26 | Dialog 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | Width: 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | Height: 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | Qt::Horizontal 59 | 60 | 61 | 62 | 40 63 | 20 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | OK 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | btn_ok 83 | clicked() 84 | Dialog 85 | accept() 86 | 87 | 88 | 266 89 | 193 90 | 91 | 92 | 199 93 | 149 94 | 95 | 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /edit_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZekeTian/ImageUtils/af2adfe8b4457cae95e2bb6a0a4200ca5611344d/edit_image.png -------------------------------------------------------------------------------- /filter-dialog.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'filter-dialog.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.13.0 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | 10 | from PyQt5 import QtCore, QtGui, QtWidgets 11 | 12 | 13 | class Ui_Dialog(object): 14 | def setupUi(self, Dialog): 15 | Dialog.setObjectName("Dialog") 16 | Dialog.resize(200, 150) 17 | Dialog.setMinimumSize(QtCore.QSize(200, 150)) 18 | Dialog.setMaximumSize(QtCore.QSize(200, 150)) 19 | self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) 20 | self.verticalLayout.setObjectName("verticalLayout") 21 | self.horizontalLayout_3 = QtWidgets.QHBoxLayout() 22 | self.horizontalLayout_3.setObjectName("horizontalLayout_3") 23 | self.groupBox_2 = QtWidgets.QGroupBox(Dialog) 24 | self.groupBox_2.setTitle("") 25 | self.groupBox_2.setObjectName("groupBox_2") 26 | self.rb_black_white = QtWidgets.QRadioButton(self.groupBox_2) 27 | self.rb_black_white.setGeometry(QtCore.QRect(10, 10, 115, 19)) 28 | self.rb_black_white.setObjectName("rb_black_white") 29 | self.tb_sketch = QtWidgets.QRadioButton(self.groupBox_2) 30 | self.tb_sketch.setGeometry(QtCore.QRect(90, 10, 115, 19)) 31 | self.tb_sketch.setObjectName("tb_sketch") 32 | self.rb_embossment = QtWidgets.QRadioButton(self.groupBox_2) 33 | self.rb_embossment.setGeometry(QtCore.QRect(10, 40, 115, 19)) 34 | self.rb_embossment.setObjectName("rb_embossment") 35 | self.rb_reminiscence = QtWidgets.QRadioButton(self.groupBox_2) 36 | self.rb_reminiscence.setGeometry(QtCore.QRect(90, 40, 115, 19)) 37 | self.rb_reminiscence.setObjectName("rb_reminiscence") 38 | self.horizontalLayout_3.addWidget(self.groupBox_2) 39 | self.verticalLayout.addLayout(self.horizontalLayout_3) 40 | self.horizontalLayout = QtWidgets.QHBoxLayout() 41 | self.horizontalLayout.setSpacing(0) 42 | self.horizontalLayout.setObjectName("horizontalLayout") 43 | spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 44 | self.horizontalLayout.addItem(spacerItem) 45 | self.btn_ok = QtWidgets.QPushButton(Dialog) 46 | self.btn_ok.setObjectName("btn_ok") 47 | self.horizontalLayout.addWidget(self.btn_ok) 48 | self.verticalLayout.addLayout(self.horizontalLayout) 49 | 50 | self.retranslateUi(Dialog) 51 | self.btn_ok.clicked.connect(Dialog.accept) 52 | self.rb_black_white.toggled['bool'].connect(Dialog.hide) 53 | QtCore.QMetaObject.connectSlotsByName(Dialog) 54 | 55 | def retranslateUi(self, Dialog): 56 | _translate = QtCore.QCoreApplication.translate 57 | Dialog.setWindowTitle(_translate("Dialog", "Dialog")) 58 | self.rb_black_white.setText(_translate("Dialog", "黑白")) 59 | self.tb_sketch.setText(_translate("Dialog", "素描")) 60 | self.rb_embossment.setText(_translate("Dialog", "浮雕")) 61 | self.rb_reminiscence.setText(_translate("Dialog", "怀旧")) 62 | self.btn_ok.setText(_translate("Dialog", "OK")) 63 | -------------------------------------------------------------------------------- /filter-dialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 200 10 | 150 11 | 12 | 13 | 14 | 15 | 200 16 | 150 17 | 18 | 19 | 20 | 21 | 200 22 | 150 23 | 24 | 25 | 26 | Dialog 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 10 40 | 10 41 | 115 42 | 19 43 | 44 | 45 | 46 | 黑白 47 | 48 | 49 | 50 | 51 | 52 | 90 53 | 10 54 | 115 55 | 19 56 | 57 | 58 | 59 | 素描 60 | 61 | 62 | 63 | 64 | 65 | 10 66 | 40 67 | 115 68 | 19 69 | 70 | 71 | 72 | 浮雕 73 | 74 | 75 | 76 | 77 | 78 | 90 79 | 40 80 | 115 81 | 19 82 | 83 | 84 | 85 | 怀旧 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 0 96 | 97 | 98 | 99 | 100 | Qt::Horizontal 101 | 102 | 103 | 104 | 40 105 | 20 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | OK 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | btn_ok 125 | clicked() 126 | Dialog 127 | accept() 128 | 129 | 130 | 266 131 | 193 132 | 133 | 134 | 199 135 | 149 136 | 137 | 138 | 139 | 140 | rb_black_white 141 | toggled(bool) 142 | Dialog 143 | hide() 144 | 145 | 146 | 79 147 | 31 148 | 149 | 150 | 99 151 | 74 152 | 153 | 154 | 155 | 156 | 157 | -------------------------------------------------------------------------------- /main-ui.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'main-ui.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.13.0 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | 10 | from PyQt5 import QtCore, QtGui, QtWidgets 11 | 12 | 13 | class Ui_MainWindow(object): 14 | def setupUi(self, MainWindow): 15 | MainWindow.setObjectName("MainWindow") 16 | MainWindow.resize(919, 806) 17 | font = QtGui.QFont() 18 | font.setPointSize(10) 19 | MainWindow.setFont(font) 20 | 21 | self.centralwidget = QtWidgets.QWidget(MainWindow) 22 | self.centralwidget.setStyleSheet("background: rgb(30, 30, 30)") 23 | self.centralwidget.setObjectName("centralwidget") 24 | self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.centralwidget) 25 | self.verticalLayout_3.setContentsMargins(2, 2, 2, 2) 26 | self.verticalLayout_3.setSpacing(0) 27 | self.verticalLayout_3.setObjectName("verticalLayout_3") 28 | self.title = QtWidgets.QFrame(self.centralwidget) 29 | self.title.setMinimumSize(QtCore.QSize(0, 55)) 30 | self.title.setMaximumSize(QtCore.QSize(188888, 55)) 31 | self.title.setStyleSheet("background: rgb(60, 60, 60)") 32 | self.title.setFrameShape(QtWidgets.QFrame.StyledPanel) 33 | self.title.setFrameShadow(QtWidgets.QFrame.Raised) 34 | self.title.setObjectName("title") 35 | self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.title) 36 | self.horizontalLayout_4.setObjectName("horizontalLayout_4") 37 | self.icon = QtWidgets.QToolButton(self.title) 38 | self.icon.setMinimumSize(QtCore.QSize(90, 45)) 39 | self.icon.setMaximumSize(QtCore.QSize(90, 45)) 40 | palette = QtGui.QPalette() 41 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 42 | brush.setStyle(QtCore.Qt.SolidPattern) 43 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 44 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 45 | brush.setStyle(QtCore.Qt.SolidPattern) 46 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 47 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 48 | brush.setStyle(QtCore.Qt.SolidPattern) 49 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 50 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 51 | brush.setStyle(QtCore.Qt.SolidPattern) 52 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 53 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 54 | brush.setStyle(QtCore.Qt.SolidPattern) 55 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 56 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 57 | brush.setStyle(QtCore.Qt.SolidPattern) 58 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 59 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 60 | brush.setStyle(QtCore.Qt.NoBrush) 61 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 62 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 63 | brush.setStyle(QtCore.Qt.SolidPattern) 64 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 65 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 66 | brush.setStyle(QtCore.Qt.SolidPattern) 67 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 68 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 69 | brush.setStyle(QtCore.Qt.SolidPattern) 70 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 71 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 72 | brush.setStyle(QtCore.Qt.SolidPattern) 73 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 74 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 75 | brush.setStyle(QtCore.Qt.SolidPattern) 76 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 77 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 78 | brush.setStyle(QtCore.Qt.SolidPattern) 79 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 80 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 81 | brush.setStyle(QtCore.Qt.NoBrush) 82 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 83 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 84 | brush.setStyle(QtCore.Qt.SolidPattern) 85 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 86 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 87 | brush.setStyle(QtCore.Qt.SolidPattern) 88 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 89 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 90 | brush.setStyle(QtCore.Qt.SolidPattern) 91 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 92 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 93 | brush.setStyle(QtCore.Qt.SolidPattern) 94 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 95 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 96 | brush.setStyle(QtCore.Qt.SolidPattern) 97 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 98 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 99 | brush.setStyle(QtCore.Qt.SolidPattern) 100 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 101 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 102 | brush.setStyle(QtCore.Qt.NoBrush) 103 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 104 | self.icon.setPalette(palette) 105 | font = QtGui.QFont() 106 | font.setPointSize(10) 107 | self.icon.setFont(font) 108 | self.icon.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 109 | "color: rgb(255, 255, 255)") 110 | self.icon.setText("") 111 | icon = QtGui.QIcon() 112 | icon.addPixmap(QtGui.QPixmap("edit_image.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 113 | self.icon.setIcon(icon) 114 | self.icon.setIconSize(QtCore.QSize(40, 40)) 115 | self.icon.setObjectName("icon") 116 | self.horizontalLayout_4.addWidget(self.icon) 117 | self.operation = QtWidgets.QFrame(self.title) 118 | self.operation.setMinimumSize(QtCore.QSize(250, 45)) 119 | self.operation.setMaximumSize(QtCore.QSize(250, 45)) 120 | self.operation.setFrameShape(QtWidgets.QFrame.StyledPanel) 121 | self.operation.setFrameShadow(QtWidgets.QFrame.Raised) 122 | self.operation.setObjectName("operation") 123 | self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.operation) 124 | self.horizontalLayout_3.setObjectName("horizontalLayout_3") 125 | self.btn_open = QtWidgets.QToolButton(self.operation) 126 | palette = QtGui.QPalette() 127 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 128 | brush.setStyle(QtCore.Qt.SolidPattern) 129 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 130 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 131 | brush.setStyle(QtCore.Qt.SolidPattern) 132 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 133 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 134 | brush.setStyle(QtCore.Qt.SolidPattern) 135 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 136 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 137 | brush.setStyle(QtCore.Qt.SolidPattern) 138 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 139 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 140 | brush.setStyle(QtCore.Qt.SolidPattern) 141 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 142 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 143 | brush.setStyle(QtCore.Qt.SolidPattern) 144 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 145 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 146 | brush.setStyle(QtCore.Qt.NoBrush) 147 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 148 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 149 | brush.setStyle(QtCore.Qt.SolidPattern) 150 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 151 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 152 | brush.setStyle(QtCore.Qt.SolidPattern) 153 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 154 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 155 | brush.setStyle(QtCore.Qt.SolidPattern) 156 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 157 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 158 | brush.setStyle(QtCore.Qt.SolidPattern) 159 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 160 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 161 | brush.setStyle(QtCore.Qt.SolidPattern) 162 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 163 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 164 | brush.setStyle(QtCore.Qt.SolidPattern) 165 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 166 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 167 | brush.setStyle(QtCore.Qt.NoBrush) 168 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 169 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 170 | brush.setStyle(QtCore.Qt.SolidPattern) 171 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 172 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 173 | brush.setStyle(QtCore.Qt.SolidPattern) 174 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 175 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 176 | brush.setStyle(QtCore.Qt.SolidPattern) 177 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 178 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 179 | brush.setStyle(QtCore.Qt.SolidPattern) 180 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 181 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 182 | brush.setStyle(QtCore.Qt.SolidPattern) 183 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 184 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 185 | brush.setStyle(QtCore.Qt.SolidPattern) 186 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 187 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 188 | brush.setStyle(QtCore.Qt.NoBrush) 189 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 190 | self.btn_open.setPalette(palette) 191 | font = QtGui.QFont() 192 | font.setPointSize(10) 193 | self.btn_open.setFont(font) 194 | self.btn_open.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 195 | "color: rgb(255, 255, 255)") 196 | self.btn_open.setObjectName("btn_open") 197 | self.horizontalLayout_3.addWidget(self.btn_open) 198 | self.btn_save = QtWidgets.QToolButton(self.operation) 199 | palette = QtGui.QPalette() 200 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 201 | brush.setStyle(QtCore.Qt.SolidPattern) 202 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 203 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 204 | brush.setStyle(QtCore.Qt.SolidPattern) 205 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 206 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 207 | brush.setStyle(QtCore.Qt.SolidPattern) 208 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 209 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 210 | brush.setStyle(QtCore.Qt.SolidPattern) 211 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 212 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 213 | brush.setStyle(QtCore.Qt.SolidPattern) 214 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 215 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 216 | brush.setStyle(QtCore.Qt.SolidPattern) 217 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 218 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 219 | brush.setStyle(QtCore.Qt.NoBrush) 220 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 221 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 222 | brush.setStyle(QtCore.Qt.SolidPattern) 223 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 224 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 225 | brush.setStyle(QtCore.Qt.SolidPattern) 226 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 227 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 228 | brush.setStyle(QtCore.Qt.SolidPattern) 229 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 230 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 231 | brush.setStyle(QtCore.Qt.SolidPattern) 232 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 233 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 234 | brush.setStyle(QtCore.Qt.SolidPattern) 235 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 236 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 237 | brush.setStyle(QtCore.Qt.SolidPattern) 238 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 239 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 240 | brush.setStyle(QtCore.Qt.NoBrush) 241 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 242 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 243 | brush.setStyle(QtCore.Qt.SolidPattern) 244 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 245 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 246 | brush.setStyle(QtCore.Qt.SolidPattern) 247 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 248 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 249 | brush.setStyle(QtCore.Qt.SolidPattern) 250 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 251 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 252 | brush.setStyle(QtCore.Qt.SolidPattern) 253 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 254 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 255 | brush.setStyle(QtCore.Qt.SolidPattern) 256 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 257 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 258 | brush.setStyle(QtCore.Qt.SolidPattern) 259 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 260 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 261 | brush.setStyle(QtCore.Qt.NoBrush) 262 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 263 | self.btn_save.setPalette(palette) 264 | font = QtGui.QFont() 265 | font.setPointSize(10) 266 | self.btn_save.setFont(font) 267 | self.btn_save.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 268 | "color: rgb(255, 255, 255)") 269 | self.btn_save.setObjectName("btn_save") 270 | self.horizontalLayout_3.addWidget(self.btn_save) 271 | self.btn_undo = QtWidgets.QToolButton(self.operation) 272 | palette = QtGui.QPalette() 273 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 274 | brush.setStyle(QtCore.Qt.SolidPattern) 275 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 276 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 277 | brush.setStyle(QtCore.Qt.SolidPattern) 278 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 279 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 280 | brush.setStyle(QtCore.Qt.SolidPattern) 281 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 282 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 283 | brush.setStyle(QtCore.Qt.SolidPattern) 284 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 285 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 286 | brush.setStyle(QtCore.Qt.SolidPattern) 287 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 288 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 289 | brush.setStyle(QtCore.Qt.SolidPattern) 290 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 291 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 292 | brush.setStyle(QtCore.Qt.NoBrush) 293 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 294 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 295 | brush.setStyle(QtCore.Qt.SolidPattern) 296 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 297 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 298 | brush.setStyle(QtCore.Qt.SolidPattern) 299 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 300 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 301 | brush.setStyle(QtCore.Qt.SolidPattern) 302 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 303 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 304 | brush.setStyle(QtCore.Qt.SolidPattern) 305 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 306 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 307 | brush.setStyle(QtCore.Qt.SolidPattern) 308 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 309 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 310 | brush.setStyle(QtCore.Qt.SolidPattern) 311 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 312 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 313 | brush.setStyle(QtCore.Qt.NoBrush) 314 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 315 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 316 | brush.setStyle(QtCore.Qt.SolidPattern) 317 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 318 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 319 | brush.setStyle(QtCore.Qt.SolidPattern) 320 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 321 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 322 | brush.setStyle(QtCore.Qt.SolidPattern) 323 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 324 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 325 | brush.setStyle(QtCore.Qt.SolidPattern) 326 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 327 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 328 | brush.setStyle(QtCore.Qt.SolidPattern) 329 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 330 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 331 | brush.setStyle(QtCore.Qt.SolidPattern) 332 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 333 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 334 | brush.setStyle(QtCore.Qt.NoBrush) 335 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 336 | self.btn_undo.setPalette(palette) 337 | font = QtGui.QFont() 338 | font.setPointSize(10) 339 | self.btn_undo.setFont(font) 340 | self.btn_undo.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 341 | "color: rgb(255, 255, 255)") 342 | self.btn_undo.setObjectName("btn_undo") 343 | self.horizontalLayout_3.addWidget(self.btn_undo) 344 | self.horizontalLayout_4.addWidget(self.operation) 345 | spacerItem = QtWidgets.QSpacerItem(100, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 346 | self.horizontalLayout_4.addItem(spacerItem) 347 | self.control = QtWidgets.QFrame(self.title) 348 | self.control.setMinimumSize(QtCore.QSize(0, 45)) 349 | self.control.setMaximumSize(QtCore.QSize(120, 45)) 350 | self.control.setFrameShape(QtWidgets.QFrame.StyledPanel) 351 | self.control.setFrameShadow(QtWidgets.QFrame.Raised) 352 | self.control.setObjectName("control") 353 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.control) 354 | self.horizontalLayout_2.setObjectName("horizontalLayout_2") 355 | self.btn_confirm = QtWidgets.QToolButton(self.control) 356 | palette = QtGui.QPalette() 357 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 358 | brush.setStyle(QtCore.Qt.SolidPattern) 359 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 360 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 361 | brush.setStyle(QtCore.Qt.SolidPattern) 362 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 363 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 364 | brush.setStyle(QtCore.Qt.SolidPattern) 365 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 366 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 367 | brush.setStyle(QtCore.Qt.SolidPattern) 368 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 369 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 370 | brush.setStyle(QtCore.Qt.SolidPattern) 371 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 372 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 373 | brush.setStyle(QtCore.Qt.SolidPattern) 374 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 375 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 376 | brush.setStyle(QtCore.Qt.NoBrush) 377 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 378 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 379 | brush.setStyle(QtCore.Qt.SolidPattern) 380 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 381 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 382 | brush.setStyle(QtCore.Qt.SolidPattern) 383 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 384 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 385 | brush.setStyle(QtCore.Qt.SolidPattern) 386 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 387 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 388 | brush.setStyle(QtCore.Qt.SolidPattern) 389 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 390 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 391 | brush.setStyle(QtCore.Qt.SolidPattern) 392 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 393 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 394 | brush.setStyle(QtCore.Qt.SolidPattern) 395 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 396 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 397 | brush.setStyle(QtCore.Qt.NoBrush) 398 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 399 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 400 | brush.setStyle(QtCore.Qt.SolidPattern) 401 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 402 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 403 | brush.setStyle(QtCore.Qt.SolidPattern) 404 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 405 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 406 | brush.setStyle(QtCore.Qt.SolidPattern) 407 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 408 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 409 | brush.setStyle(QtCore.Qt.SolidPattern) 410 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 411 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 412 | brush.setStyle(QtCore.Qt.SolidPattern) 413 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 414 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 415 | brush.setStyle(QtCore.Qt.SolidPattern) 416 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 417 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 418 | brush.setStyle(QtCore.Qt.NoBrush) 419 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 420 | self.btn_confirm.setPalette(palette) 421 | font = QtGui.QFont() 422 | font.setPointSize(10) 423 | self.btn_confirm.setFont(font) 424 | self.btn_confirm.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 425 | "color: rgb(255, 255, 255)") 426 | self.btn_confirm.setObjectName("btn_confirm") 427 | self.horizontalLayout_2.addWidget(self.btn_confirm) 428 | self.btn_cancel = QtWidgets.QToolButton(self.control) 429 | palette = QtGui.QPalette() 430 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 431 | brush.setStyle(QtCore.Qt.SolidPattern) 432 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 433 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 434 | brush.setStyle(QtCore.Qt.SolidPattern) 435 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 436 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 437 | brush.setStyle(QtCore.Qt.SolidPattern) 438 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 439 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 440 | brush.setStyle(QtCore.Qt.SolidPattern) 441 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 442 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 443 | brush.setStyle(QtCore.Qt.SolidPattern) 444 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 445 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 446 | brush.setStyle(QtCore.Qt.SolidPattern) 447 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 448 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 449 | brush.setStyle(QtCore.Qt.NoBrush) 450 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 451 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 452 | brush.setStyle(QtCore.Qt.SolidPattern) 453 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 454 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 455 | brush.setStyle(QtCore.Qt.SolidPattern) 456 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 457 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 458 | brush.setStyle(QtCore.Qt.SolidPattern) 459 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 460 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 461 | brush.setStyle(QtCore.Qt.SolidPattern) 462 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 463 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 464 | brush.setStyle(QtCore.Qt.SolidPattern) 465 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 466 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 467 | brush.setStyle(QtCore.Qt.SolidPattern) 468 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 469 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 470 | brush.setStyle(QtCore.Qt.NoBrush) 471 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 472 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 473 | brush.setStyle(QtCore.Qt.SolidPattern) 474 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 475 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 476 | brush.setStyle(QtCore.Qt.SolidPattern) 477 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 478 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 479 | brush.setStyle(QtCore.Qt.SolidPattern) 480 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 481 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 482 | brush.setStyle(QtCore.Qt.SolidPattern) 483 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 484 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 485 | brush.setStyle(QtCore.Qt.SolidPattern) 486 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 487 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 488 | brush.setStyle(QtCore.Qt.SolidPattern) 489 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 490 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 491 | brush.setStyle(QtCore.Qt.NoBrush) 492 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 493 | self.btn_cancel.setPalette(palette) 494 | font = QtGui.QFont() 495 | font.setPointSize(10) 496 | self.btn_cancel.setFont(font) 497 | self.btn_cancel.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 498 | "color: rgb(255, 255, 255)") 499 | self.btn_cancel.setObjectName("btn_cancel") 500 | self.horizontalLayout_2.addWidget(self.btn_cancel) 501 | self.horizontalLayout_4.addWidget(self.control) 502 | self.verticalLayout_3.addWidget(self.title) 503 | self.horizontalLayout = QtWidgets.QHBoxLayout() 504 | self.horizontalLayout.setSpacing(0) 505 | self.horizontalLayout.setObjectName("horizontalLayout") 506 | self.frame_4 = QtWidgets.QFrame(self.centralwidget) 507 | self.frame_4.setMinimumSize(QtCore.QSize(90, 0)) 508 | self.frame_4.setMaximumSize(QtCore.QSize(90, 16777215)) 509 | self.frame_4.setStyleSheet("background: rgb(51, 51, 51)") 510 | self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel) 511 | self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised) 512 | self.frame_4.setObjectName("frame_4") 513 | self.frame_5 = QtWidgets.QFrame(self.frame_4) 514 | self.frame_5.setGeometry(QtCore.QRect(10, 0, 56, 500)) 515 | self.frame_5.setMinimumSize(QtCore.QSize(0, 500)) 516 | self.frame_5.setMaximumSize(QtCore.QSize(16777215, 500)) 517 | self.frame_5.setFrameShape(QtWidgets.QFrame.StyledPanel) 518 | self.frame_5.setFrameShadow(QtWidgets.QFrame.Raised) 519 | self.frame_5.setObjectName("frame_5") 520 | self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.frame_5) 521 | self.verticalLayout_2.setObjectName("verticalLayout_2") 522 | self.btn_clip = QtWidgets.QPushButton(self.frame_5) 523 | self.btn_clip.setMinimumSize(QtCore.QSize(50, 0)) 524 | palette = QtGui.QPalette() 525 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 526 | brush.setStyle(QtCore.Qt.SolidPattern) 527 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 528 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 529 | brush.setStyle(QtCore.Qt.SolidPattern) 530 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 531 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 532 | brush.setStyle(QtCore.Qt.SolidPattern) 533 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 534 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 535 | brush.setStyle(QtCore.Qt.SolidPattern) 536 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 537 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 538 | brush.setStyle(QtCore.Qt.SolidPattern) 539 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 540 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 541 | brush.setStyle(QtCore.Qt.SolidPattern) 542 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 543 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 544 | brush.setStyle(QtCore.Qt.NoBrush) 545 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 546 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 547 | brush.setStyle(QtCore.Qt.SolidPattern) 548 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 549 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 550 | brush.setStyle(QtCore.Qt.SolidPattern) 551 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 552 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 553 | brush.setStyle(QtCore.Qt.SolidPattern) 554 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 555 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 556 | brush.setStyle(QtCore.Qt.SolidPattern) 557 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 558 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 559 | brush.setStyle(QtCore.Qt.SolidPattern) 560 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 561 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 562 | brush.setStyle(QtCore.Qt.SolidPattern) 563 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 564 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 565 | brush.setStyle(QtCore.Qt.NoBrush) 566 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 567 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 568 | brush.setStyle(QtCore.Qt.SolidPattern) 569 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 570 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 571 | brush.setStyle(QtCore.Qt.SolidPattern) 572 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 573 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 574 | brush.setStyle(QtCore.Qt.SolidPattern) 575 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 576 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 577 | brush.setStyle(QtCore.Qt.SolidPattern) 578 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 579 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 580 | brush.setStyle(QtCore.Qt.SolidPattern) 581 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 582 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 583 | brush.setStyle(QtCore.Qt.SolidPattern) 584 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 585 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 586 | brush.setStyle(QtCore.Qt.NoBrush) 587 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 588 | self.btn_clip.setPalette(palette) 589 | font = QtGui.QFont() 590 | font.setPointSize(10) 591 | self.btn_clip.setFont(font) 592 | self.btn_clip.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 593 | "color: rgb(255, 255, 255)") 594 | self.btn_clip.setObjectName("btn_clip") 595 | self.verticalLayout_2.addWidget(self.btn_clip) 596 | self.btn_lightness = QtWidgets.QToolButton(self.frame_5) 597 | self.btn_lightness.setMinimumSize(QtCore.QSize(50, 0)) 598 | palette = QtGui.QPalette() 599 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 600 | brush.setStyle(QtCore.Qt.SolidPattern) 601 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 602 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 603 | brush.setStyle(QtCore.Qt.SolidPattern) 604 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 605 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 606 | brush.setStyle(QtCore.Qt.SolidPattern) 607 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 608 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 609 | brush.setStyle(QtCore.Qt.SolidPattern) 610 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 611 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 612 | brush.setStyle(QtCore.Qt.SolidPattern) 613 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 614 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 615 | brush.setStyle(QtCore.Qt.SolidPattern) 616 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 617 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 618 | brush.setStyle(QtCore.Qt.NoBrush) 619 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 620 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 621 | brush.setStyle(QtCore.Qt.SolidPattern) 622 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 623 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 624 | brush.setStyle(QtCore.Qt.SolidPattern) 625 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 626 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 627 | brush.setStyle(QtCore.Qt.SolidPattern) 628 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 629 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 630 | brush.setStyle(QtCore.Qt.SolidPattern) 631 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 632 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 633 | brush.setStyle(QtCore.Qt.SolidPattern) 634 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 635 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 636 | brush.setStyle(QtCore.Qt.SolidPattern) 637 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 638 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 639 | brush.setStyle(QtCore.Qt.NoBrush) 640 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 641 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 642 | brush.setStyle(QtCore.Qt.SolidPattern) 643 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 644 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 645 | brush.setStyle(QtCore.Qt.SolidPattern) 646 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 647 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 648 | brush.setStyle(QtCore.Qt.SolidPattern) 649 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 650 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 651 | brush.setStyle(QtCore.Qt.SolidPattern) 652 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 653 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 654 | brush.setStyle(QtCore.Qt.SolidPattern) 655 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 656 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 657 | brush.setStyle(QtCore.Qt.SolidPattern) 658 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 659 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 660 | brush.setStyle(QtCore.Qt.NoBrush) 661 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 662 | self.btn_lightness.setPalette(palette) 663 | font = QtGui.QFont() 664 | font.setPointSize(10) 665 | self.btn_lightness.setFont(font) 666 | self.btn_lightness.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 667 | "color: rgb(255, 255, 255)") 668 | self.btn_lightness.setObjectName("btn_lightness") 669 | self.verticalLayout_2.addWidget(self.btn_lightness) 670 | self.btn_watermark = QtWidgets.QToolButton(self.frame_5) 671 | self.btn_watermark.setMinimumSize(QtCore.QSize(50, 0)) 672 | palette = QtGui.QPalette() 673 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 674 | brush.setStyle(QtCore.Qt.SolidPattern) 675 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 676 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 677 | brush.setStyle(QtCore.Qt.SolidPattern) 678 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 679 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 680 | brush.setStyle(QtCore.Qt.SolidPattern) 681 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 682 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 683 | brush.setStyle(QtCore.Qt.SolidPattern) 684 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 685 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 686 | brush.setStyle(QtCore.Qt.SolidPattern) 687 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 688 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 689 | brush.setStyle(QtCore.Qt.SolidPattern) 690 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 691 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 692 | brush.setStyle(QtCore.Qt.NoBrush) 693 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 694 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 695 | brush.setStyle(QtCore.Qt.SolidPattern) 696 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 697 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 698 | brush.setStyle(QtCore.Qt.SolidPattern) 699 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 700 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 701 | brush.setStyle(QtCore.Qt.SolidPattern) 702 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 703 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 704 | brush.setStyle(QtCore.Qt.SolidPattern) 705 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 706 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 707 | brush.setStyle(QtCore.Qt.SolidPattern) 708 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 709 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 710 | brush.setStyle(QtCore.Qt.SolidPattern) 711 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 712 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 713 | brush.setStyle(QtCore.Qt.NoBrush) 714 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 715 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 716 | brush.setStyle(QtCore.Qt.SolidPattern) 717 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 718 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 719 | brush.setStyle(QtCore.Qt.SolidPattern) 720 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 721 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 722 | brush.setStyle(QtCore.Qt.SolidPattern) 723 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 724 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 725 | brush.setStyle(QtCore.Qt.SolidPattern) 726 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 727 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 728 | brush.setStyle(QtCore.Qt.SolidPattern) 729 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 730 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 731 | brush.setStyle(QtCore.Qt.SolidPattern) 732 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 733 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 734 | brush.setStyle(QtCore.Qt.NoBrush) 735 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 736 | self.btn_watermark.setPalette(palette) 737 | font = QtGui.QFont() 738 | font.setPointSize(10) 739 | self.btn_watermark.setFont(font) 740 | self.btn_watermark.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 741 | "color: rgb(255, 255, 255)") 742 | self.btn_watermark.setObjectName("btn_watermark") 743 | self.verticalLayout_2.addWidget(self.btn_watermark, 0, QtCore.Qt.AlignLeft) 744 | self.btn_blur = QtWidgets.QToolButton(self.frame_5) 745 | self.btn_blur.setMinimumSize(QtCore.QSize(50, 0)) 746 | palette = QtGui.QPalette() 747 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 748 | brush.setStyle(QtCore.Qt.SolidPattern) 749 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 750 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 751 | brush.setStyle(QtCore.Qt.SolidPattern) 752 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 753 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 754 | brush.setStyle(QtCore.Qt.SolidPattern) 755 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 756 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 757 | brush.setStyle(QtCore.Qt.SolidPattern) 758 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 759 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 760 | brush.setStyle(QtCore.Qt.SolidPattern) 761 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 762 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 763 | brush.setStyle(QtCore.Qt.SolidPattern) 764 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 765 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 766 | brush.setStyle(QtCore.Qt.NoBrush) 767 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 768 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 769 | brush.setStyle(QtCore.Qt.SolidPattern) 770 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 771 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 772 | brush.setStyle(QtCore.Qt.SolidPattern) 773 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 774 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 775 | brush.setStyle(QtCore.Qt.SolidPattern) 776 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 777 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 778 | brush.setStyle(QtCore.Qt.SolidPattern) 779 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 780 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 781 | brush.setStyle(QtCore.Qt.SolidPattern) 782 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 783 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 784 | brush.setStyle(QtCore.Qt.SolidPattern) 785 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 786 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 787 | brush.setStyle(QtCore.Qt.NoBrush) 788 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 789 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 790 | brush.setStyle(QtCore.Qt.SolidPattern) 791 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 792 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 793 | brush.setStyle(QtCore.Qt.SolidPattern) 794 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 795 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 796 | brush.setStyle(QtCore.Qt.SolidPattern) 797 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 798 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 799 | brush.setStyle(QtCore.Qt.SolidPattern) 800 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 801 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 802 | brush.setStyle(QtCore.Qt.SolidPattern) 803 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 804 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 805 | brush.setStyle(QtCore.Qt.SolidPattern) 806 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 807 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 808 | brush.setStyle(QtCore.Qt.NoBrush) 809 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 810 | self.btn_blur.setPalette(palette) 811 | font = QtGui.QFont() 812 | font.setPointSize(10) 813 | self.btn_blur.setFont(font) 814 | self.btn_blur.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 815 | "color: rgb(255, 255, 255)") 816 | self.btn_blur.setObjectName("btn_blur") 817 | self.verticalLayout_2.addWidget(self.btn_blur) 818 | self.btn_compress = QtWidgets.QToolButton(self.frame_5) 819 | self.btn_compress.setMinimumSize(QtCore.QSize(50, 0)) 820 | palette = QtGui.QPalette() 821 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 822 | brush.setStyle(QtCore.Qt.SolidPattern) 823 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 824 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 825 | brush.setStyle(QtCore.Qt.SolidPattern) 826 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 827 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 828 | brush.setStyle(QtCore.Qt.SolidPattern) 829 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 830 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 831 | brush.setStyle(QtCore.Qt.SolidPattern) 832 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 833 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 834 | brush.setStyle(QtCore.Qt.SolidPattern) 835 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 836 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 837 | brush.setStyle(QtCore.Qt.SolidPattern) 838 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 839 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 840 | brush.setStyle(QtCore.Qt.NoBrush) 841 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 842 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 843 | brush.setStyle(QtCore.Qt.SolidPattern) 844 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 845 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 846 | brush.setStyle(QtCore.Qt.SolidPattern) 847 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 848 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 849 | brush.setStyle(QtCore.Qt.SolidPattern) 850 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 851 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 852 | brush.setStyle(QtCore.Qt.SolidPattern) 853 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 854 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 855 | brush.setStyle(QtCore.Qt.SolidPattern) 856 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 857 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 858 | brush.setStyle(QtCore.Qt.SolidPattern) 859 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 860 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 861 | brush.setStyle(QtCore.Qt.NoBrush) 862 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 863 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 864 | brush.setStyle(QtCore.Qt.SolidPattern) 865 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 866 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 867 | brush.setStyle(QtCore.Qt.SolidPattern) 868 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 869 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 870 | brush.setStyle(QtCore.Qt.SolidPattern) 871 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 872 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 873 | brush.setStyle(QtCore.Qt.SolidPattern) 874 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 875 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 876 | brush.setStyle(QtCore.Qt.SolidPattern) 877 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 878 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 879 | brush.setStyle(QtCore.Qt.SolidPattern) 880 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 881 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 882 | brush.setStyle(QtCore.Qt.NoBrush) 883 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 884 | self.btn_compress.setPalette(palette) 885 | font = QtGui.QFont() 886 | font.setPointSize(10) 887 | self.btn_compress.setFont(font) 888 | self.btn_compress.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 889 | "color: rgb(255, 255, 255)") 890 | self.btn_compress.setObjectName("btn_compress") 891 | self.verticalLayout_2.addWidget(self.btn_compress) 892 | self.btn_change_bg = QtWidgets.QToolButton(self.frame_5) 893 | self.btn_change_bg.setMinimumSize(QtCore.QSize(50, 0)) 894 | palette = QtGui.QPalette() 895 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 896 | brush.setStyle(QtCore.Qt.SolidPattern) 897 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 898 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 899 | brush.setStyle(QtCore.Qt.SolidPattern) 900 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 901 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 902 | brush.setStyle(QtCore.Qt.SolidPattern) 903 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 904 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 905 | brush.setStyle(QtCore.Qt.SolidPattern) 906 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 907 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 908 | brush.setStyle(QtCore.Qt.SolidPattern) 909 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 910 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 911 | brush.setStyle(QtCore.Qt.SolidPattern) 912 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 913 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 914 | brush.setStyle(QtCore.Qt.NoBrush) 915 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 916 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 917 | brush.setStyle(QtCore.Qt.SolidPattern) 918 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 919 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 920 | brush.setStyle(QtCore.Qt.SolidPattern) 921 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 922 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 923 | brush.setStyle(QtCore.Qt.SolidPattern) 924 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 925 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 926 | brush.setStyle(QtCore.Qt.SolidPattern) 927 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 928 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 929 | brush.setStyle(QtCore.Qt.SolidPattern) 930 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 931 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 932 | brush.setStyle(QtCore.Qt.SolidPattern) 933 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 934 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 935 | brush.setStyle(QtCore.Qt.NoBrush) 936 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 937 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 938 | brush.setStyle(QtCore.Qt.SolidPattern) 939 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 940 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 941 | brush.setStyle(QtCore.Qt.SolidPattern) 942 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 943 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 944 | brush.setStyle(QtCore.Qt.SolidPattern) 945 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 946 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 947 | brush.setStyle(QtCore.Qt.SolidPattern) 948 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 949 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 950 | brush.setStyle(QtCore.Qt.SolidPattern) 951 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 952 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 953 | brush.setStyle(QtCore.Qt.SolidPattern) 954 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 955 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 956 | brush.setStyle(QtCore.Qt.NoBrush) 957 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 958 | self.btn_change_bg.setPalette(palette) 959 | font = QtGui.QFont() 960 | font.setPointSize(10) 961 | self.btn_change_bg.setFont(font) 962 | self.btn_change_bg.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 963 | "color: rgb(255, 255, 255)") 964 | self.btn_change_bg.setObjectName("btn_change_bg") 965 | self.verticalLayout_2.addWidget(self.btn_change_bg) 966 | self.btn_encode = QtWidgets.QToolButton(self.frame_5) 967 | self.btn_encode.setMinimumSize(QtCore.QSize(50, 0)) 968 | palette = QtGui.QPalette() 969 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 970 | brush.setStyle(QtCore.Qt.SolidPattern) 971 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 972 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 973 | brush.setStyle(QtCore.Qt.SolidPattern) 974 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 975 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 976 | brush.setStyle(QtCore.Qt.SolidPattern) 977 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 978 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 979 | brush.setStyle(QtCore.Qt.SolidPattern) 980 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 981 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 982 | brush.setStyle(QtCore.Qt.SolidPattern) 983 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 984 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 985 | brush.setStyle(QtCore.Qt.SolidPattern) 986 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 987 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 988 | brush.setStyle(QtCore.Qt.NoBrush) 989 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 990 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 991 | brush.setStyle(QtCore.Qt.SolidPattern) 992 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 993 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 994 | brush.setStyle(QtCore.Qt.SolidPattern) 995 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 996 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 997 | brush.setStyle(QtCore.Qt.SolidPattern) 998 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 999 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1000 | brush.setStyle(QtCore.Qt.SolidPattern) 1001 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 1002 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1003 | brush.setStyle(QtCore.Qt.SolidPattern) 1004 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 1005 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1006 | brush.setStyle(QtCore.Qt.SolidPattern) 1007 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 1008 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 1009 | brush.setStyle(QtCore.Qt.NoBrush) 1010 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 1011 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1012 | brush.setStyle(QtCore.Qt.SolidPattern) 1013 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 1014 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1015 | brush.setStyle(QtCore.Qt.SolidPattern) 1016 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 1017 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1018 | brush.setStyle(QtCore.Qt.SolidPattern) 1019 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 1020 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1021 | brush.setStyle(QtCore.Qt.SolidPattern) 1022 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 1023 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1024 | brush.setStyle(QtCore.Qt.SolidPattern) 1025 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 1026 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1027 | brush.setStyle(QtCore.Qt.SolidPattern) 1028 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 1029 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 1030 | brush.setStyle(QtCore.Qt.NoBrush) 1031 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 1032 | self.btn_encode.setPalette(palette) 1033 | font = QtGui.QFont() 1034 | font.setPointSize(10) 1035 | self.btn_encode.setFont(font) 1036 | self.btn_encode.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 1037 | "color: rgb(255, 255, 255)") 1038 | self.btn_encode.setObjectName("btn_encode") 1039 | self.verticalLayout_2.addWidget(self.btn_encode) 1040 | self.btn_decode = QtWidgets.QToolButton(self.frame_5) 1041 | self.btn_decode.setMinimumSize(QtCore.QSize(50, 0)) 1042 | palette = QtGui.QPalette() 1043 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1044 | brush.setStyle(QtCore.Qt.SolidPattern) 1045 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 1046 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1047 | brush.setStyle(QtCore.Qt.SolidPattern) 1048 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 1049 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1050 | brush.setStyle(QtCore.Qt.SolidPattern) 1051 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 1052 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1053 | brush.setStyle(QtCore.Qt.SolidPattern) 1054 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 1055 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1056 | brush.setStyle(QtCore.Qt.SolidPattern) 1057 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 1058 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1059 | brush.setStyle(QtCore.Qt.SolidPattern) 1060 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 1061 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 1062 | brush.setStyle(QtCore.Qt.NoBrush) 1063 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 1064 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1065 | brush.setStyle(QtCore.Qt.SolidPattern) 1066 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 1067 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1068 | brush.setStyle(QtCore.Qt.SolidPattern) 1069 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 1070 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1071 | brush.setStyle(QtCore.Qt.SolidPattern) 1072 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 1073 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1074 | brush.setStyle(QtCore.Qt.SolidPattern) 1075 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 1076 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1077 | brush.setStyle(QtCore.Qt.SolidPattern) 1078 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 1079 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1080 | brush.setStyle(QtCore.Qt.SolidPattern) 1081 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 1082 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 1083 | brush.setStyle(QtCore.Qt.NoBrush) 1084 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 1085 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1086 | brush.setStyle(QtCore.Qt.SolidPattern) 1087 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 1088 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1089 | brush.setStyle(QtCore.Qt.SolidPattern) 1090 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 1091 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1092 | brush.setStyle(QtCore.Qt.SolidPattern) 1093 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 1094 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1095 | brush.setStyle(QtCore.Qt.SolidPattern) 1096 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 1097 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1098 | brush.setStyle(QtCore.Qt.SolidPattern) 1099 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 1100 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1101 | brush.setStyle(QtCore.Qt.SolidPattern) 1102 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 1103 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 1104 | brush.setStyle(QtCore.Qt.NoBrush) 1105 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 1106 | self.btn_decode.setPalette(palette) 1107 | font = QtGui.QFont() 1108 | font.setPointSize(10) 1109 | self.btn_decode.setFont(font) 1110 | self.btn_decode.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 1111 | "color: rgb(255, 255, 255)") 1112 | self.btn_decode.setObjectName("btn_decode") 1113 | self.verticalLayout_2.addWidget(self.btn_decode) 1114 | self.btn_ocr = QtWidgets.QToolButton(self.frame_5) 1115 | self.btn_ocr.setMinimumSize(QtCore.QSize(50, 0)) 1116 | palette = QtGui.QPalette() 1117 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1118 | brush.setStyle(QtCore.Qt.SolidPattern) 1119 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 1120 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1121 | brush.setStyle(QtCore.Qt.SolidPattern) 1122 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 1123 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1124 | brush.setStyle(QtCore.Qt.SolidPattern) 1125 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 1126 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1127 | brush.setStyle(QtCore.Qt.SolidPattern) 1128 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 1129 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1130 | brush.setStyle(QtCore.Qt.SolidPattern) 1131 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 1132 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1133 | brush.setStyle(QtCore.Qt.SolidPattern) 1134 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 1135 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 1136 | brush.setStyle(QtCore.Qt.NoBrush) 1137 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 1138 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1139 | brush.setStyle(QtCore.Qt.SolidPattern) 1140 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 1141 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1142 | brush.setStyle(QtCore.Qt.SolidPattern) 1143 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 1144 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1145 | brush.setStyle(QtCore.Qt.SolidPattern) 1146 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 1147 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1148 | brush.setStyle(QtCore.Qt.SolidPattern) 1149 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 1150 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1151 | brush.setStyle(QtCore.Qt.SolidPattern) 1152 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 1153 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1154 | brush.setStyle(QtCore.Qt.SolidPattern) 1155 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 1156 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 1157 | brush.setStyle(QtCore.Qt.NoBrush) 1158 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 1159 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1160 | brush.setStyle(QtCore.Qt.SolidPattern) 1161 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 1162 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1163 | brush.setStyle(QtCore.Qt.SolidPattern) 1164 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 1165 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1166 | brush.setStyle(QtCore.Qt.SolidPattern) 1167 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 1168 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1169 | brush.setStyle(QtCore.Qt.SolidPattern) 1170 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 1171 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1172 | brush.setStyle(QtCore.Qt.SolidPattern) 1173 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 1174 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1175 | brush.setStyle(QtCore.Qt.SolidPattern) 1176 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 1177 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 1178 | brush.setStyle(QtCore.Qt.NoBrush) 1179 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 1180 | self.btn_ocr.setPalette(palette) 1181 | font = QtGui.QFont() 1182 | font.setPointSize(10) 1183 | self.btn_ocr.setFont(font) 1184 | self.btn_ocr.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 1185 | "color: rgb(255, 255, 255)") 1186 | self.btn_ocr.setObjectName("btn_ocr") 1187 | self.verticalLayout_2.addWidget(self.btn_ocr) 1188 | self.btn_screenshot = QtWidgets.QToolButton(self.frame_5) 1189 | self.btn_screenshot.setMinimumSize(QtCore.QSize(50, 0)) 1190 | palette = QtGui.QPalette() 1191 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1192 | brush.setStyle(QtCore.Qt.SolidPattern) 1193 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 1194 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1195 | brush.setStyle(QtCore.Qt.SolidPattern) 1196 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 1197 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1198 | brush.setStyle(QtCore.Qt.SolidPattern) 1199 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 1200 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1201 | brush.setStyle(QtCore.Qt.SolidPattern) 1202 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 1203 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1204 | brush.setStyle(QtCore.Qt.SolidPattern) 1205 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 1206 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1207 | brush.setStyle(QtCore.Qt.SolidPattern) 1208 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 1209 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 1210 | brush.setStyle(QtCore.Qt.NoBrush) 1211 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 1212 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1213 | brush.setStyle(QtCore.Qt.SolidPattern) 1214 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 1215 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1216 | brush.setStyle(QtCore.Qt.SolidPattern) 1217 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 1218 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1219 | brush.setStyle(QtCore.Qt.SolidPattern) 1220 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 1221 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1222 | brush.setStyle(QtCore.Qt.SolidPattern) 1223 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 1224 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1225 | brush.setStyle(QtCore.Qt.SolidPattern) 1226 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 1227 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1228 | brush.setStyle(QtCore.Qt.SolidPattern) 1229 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 1230 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 1231 | brush.setStyle(QtCore.Qt.NoBrush) 1232 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 1233 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1234 | brush.setStyle(QtCore.Qt.SolidPattern) 1235 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 1236 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1237 | brush.setStyle(QtCore.Qt.SolidPattern) 1238 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 1239 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1240 | brush.setStyle(QtCore.Qt.SolidPattern) 1241 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 1242 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1243 | brush.setStyle(QtCore.Qt.SolidPattern) 1244 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 1245 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1246 | brush.setStyle(QtCore.Qt.SolidPattern) 1247 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 1248 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1249 | brush.setStyle(QtCore.Qt.SolidPattern) 1250 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 1251 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 1252 | brush.setStyle(QtCore.Qt.NoBrush) 1253 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 1254 | self.btn_screenshot.setPalette(palette) 1255 | font = QtGui.QFont() 1256 | font.setPointSize(10) 1257 | self.btn_screenshot.setFont(font) 1258 | self.btn_screenshot.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 1259 | "color: rgb(255, 255, 255)") 1260 | self.btn_screenshot.setObjectName("btn_screenshot") 1261 | self.verticalLayout_2.addWidget(self.btn_screenshot) 1262 | self.btn_pick_color = QtWidgets.QToolButton(self.frame_5) 1263 | self.btn_pick_color.setMinimumSize(QtCore.QSize(50, 0)) 1264 | palette = QtGui.QPalette() 1265 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1266 | brush.setStyle(QtCore.Qt.SolidPattern) 1267 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) 1268 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1269 | brush.setStyle(QtCore.Qt.SolidPattern) 1270 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 1271 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1272 | brush.setStyle(QtCore.Qt.SolidPattern) 1273 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) 1274 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1275 | brush.setStyle(QtCore.Qt.SolidPattern) 1276 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) 1277 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1278 | brush.setStyle(QtCore.Qt.SolidPattern) 1279 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 1280 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1281 | brush.setStyle(QtCore.Qt.SolidPattern) 1282 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 1283 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 1284 | brush.setStyle(QtCore.Qt.NoBrush) 1285 | palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) 1286 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1287 | brush.setStyle(QtCore.Qt.SolidPattern) 1288 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) 1289 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1290 | brush.setStyle(QtCore.Qt.SolidPattern) 1291 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 1292 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1293 | brush.setStyle(QtCore.Qt.SolidPattern) 1294 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) 1295 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1296 | brush.setStyle(QtCore.Qt.SolidPattern) 1297 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) 1298 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1299 | brush.setStyle(QtCore.Qt.SolidPattern) 1300 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 1301 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1302 | brush.setStyle(QtCore.Qt.SolidPattern) 1303 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 1304 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 1305 | brush.setStyle(QtCore.Qt.NoBrush) 1306 | palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) 1307 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1308 | brush.setStyle(QtCore.Qt.SolidPattern) 1309 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) 1310 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1311 | brush.setStyle(QtCore.Qt.SolidPattern) 1312 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 1313 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1314 | brush.setStyle(QtCore.Qt.SolidPattern) 1315 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) 1316 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) 1317 | brush.setStyle(QtCore.Qt.SolidPattern) 1318 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) 1319 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1320 | brush.setStyle(QtCore.Qt.SolidPattern) 1321 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 1322 | brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 0)) 1323 | brush.setStyle(QtCore.Qt.SolidPattern) 1324 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 1325 | brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) 1326 | brush.setStyle(QtCore.Qt.NoBrush) 1327 | palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) 1328 | self.btn_pick_color.setPalette(palette) 1329 | font = QtGui.QFont() 1330 | font.setPointSize(10) 1331 | self.btn_pick_color.setFont(font) 1332 | self.btn_pick_color.setStyleSheet("background: rgba(0, 0, 0, 0);\n" 1333 | "color: rgb(255, 255, 255)") 1334 | self.btn_pick_color.setObjectName("btn_pick_color") 1335 | self.verticalLayout_2.addWidget(self.btn_pick_color) 1336 | self.slider_blur = QtWidgets.QSlider(self.frame_4) 1337 | self.slider_blur.setEnabled(True) 1338 | self.slider_blur.setGeometry(QtCore.QRect(10, 130, 71, 22)) 1339 | self.slider_blur.setOrientation(QtCore.Qt.Horizontal) 1340 | self.slider_blur.setObjectName("slider_blur") 1341 | self.slider_compress = QtWidgets.QSlider(self.frame_4) 1342 | self.slider_compress.setEnabled(True) 1343 | self.slider_compress.setGeometry(QtCore.QRect(10, 170, 71, 22)) 1344 | self.slider_compress.setOrientation(QtCore.Qt.Horizontal) 1345 | self.slider_compress.setObjectName("slider_compress") 1346 | self.slider_lightness = QtWidgets.QSlider(self.frame_4) 1347 | self.slider_lightness.setEnabled(True) 1348 | self.slider_lightness.setGeometry(QtCore.QRect(11, 50, 71, 22)) 1349 | self.slider_lightness.setOrientation(QtCore.Qt.Horizontal) 1350 | self.slider_lightness.setObjectName("slider_lightness") 1351 | self.horizontalLayout.addWidget(self.frame_4) 1352 | self.frame_3 = QtWidgets.QFrame(self.centralwidget) 1353 | self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel) 1354 | self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised) 1355 | self.frame_3.setObjectName("frame_3") 1356 | self.gridLayout = QtWidgets.QGridLayout(self.frame_3) 1357 | self.gridLayout.setObjectName("gridLayout") 1358 | self.img_panel = QtWidgets.QLabel(self.frame_3) 1359 | self.img_panel.setStyleSheet("border-width: 1px;border-style: solid;border-color: rgb(218, 218, 218)") 1360 | self.img_panel.setText("") 1361 | self.img_panel.setObjectName("img_panel") 1362 | self.gridLayout.addWidget(self.img_panel, 0, 0, 1, 1) 1363 | self.horizontalLayout.addWidget(self.frame_3) 1364 | self.verticalLayout_3.addLayout(self.horizontalLayout) 1365 | MainWindow.setCentralWidget(self.centralwidget) 1366 | self.action = QtWidgets.QAction(MainWindow) 1367 | self.action.setObjectName("action") 1368 | 1369 | self.retranslateUi(MainWindow) 1370 | self.btn_lightness.clicked.connect(self.slider_lightness.show) 1371 | self.slider_lightness.sliderReleased.connect(self.slider_lightness.hide) 1372 | self.slider_blur.sliderReleased.connect(self.slider_blur.hide) 1373 | self.slider_compress.sliderReleased.connect(self.slider_compress.hide) 1374 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 1375 | 1376 | def retranslateUi(self, MainWindow): 1377 | _translate = QtCore.QCoreApplication.translate 1378 | MainWindow.setWindowTitle(_translate("MainWindow", "ImageUtil")) 1379 | self.btn_open.setText(_translate("MainWindow", "打开")) 1380 | self.btn_save.setText(_translate("MainWindow", "保存")) 1381 | self.btn_undo.setText(_translate("MainWindow", "撤销")) 1382 | self.btn_confirm.setText(_translate("MainWindow", "确定")) 1383 | self.btn_cancel.setText(_translate("MainWindow", "取消")) 1384 | self.btn_clip.setText(_translate("MainWindow", "裁剪")) 1385 | self.btn_lightness.setText(_translate("MainWindow", "亮度")) 1386 | self.btn_watermark.setText(_translate("MainWindow", "水印")) 1387 | self.btn_blur.setText(_translate("MainWindow", "模糊")) 1388 | self.btn_compress.setText(_translate("MainWindow", "压缩")) 1389 | self.btn_change_bg.setText(_translate("MainWindow", "滤镜")) 1390 | self.btn_encode.setText(_translate("MainWindow", "加密")) 1391 | self.btn_decode.setText(_translate("MainWindow", "解密")) 1392 | self.btn_ocr.setText(_translate("MainWindow", "OCR")) 1393 | self.btn_screenshot.setText(_translate("MainWindow", "截图")) 1394 | self.btn_pick_color.setText(_translate("MainWindow", "取色")) 1395 | self.action.setText(_translate("MainWindow", "调整")) 1396 | -------------------------------------------------------------------------------- /orc-dialog.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'orc-dialog.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.13.0 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | 10 | from PyQt5 import QtCore, QtGui, QtWidgets 11 | 12 | 13 | class Ui_Dialog(object): 14 | def setupUi(self, Dialog): 15 | Dialog.setObjectName("Dialog") 16 | Dialog.resize(594, 302) 17 | self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) 18 | self.verticalLayout.setObjectName("verticalLayout") 19 | self.plainTextEdit = QtWidgets.QPlainTextEdit(Dialog) 20 | self.plainTextEdit.setObjectName("plainTextEdit") 21 | self.verticalLayout.addWidget(self.plainTextEdit) 22 | self.horizontalLayout = QtWidgets.QHBoxLayout() 23 | self.horizontalLayout.setObjectName("horizontalLayout") 24 | spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 25 | self.horizontalLayout.addItem(spacerItem) 26 | self.btn_ok = QtWidgets.QPushButton(Dialog) 27 | self.btn_ok.setObjectName("btn_ok") 28 | self.horizontalLayout.addWidget(self.btn_ok) 29 | self.verticalLayout.addLayout(self.horizontalLayout) 30 | 31 | self.retranslateUi(Dialog) 32 | self.btn_ok.clicked.connect(Dialog.accept) 33 | QtCore.QMetaObject.connectSlotsByName(Dialog) 34 | 35 | def retranslateUi(self, Dialog): 36 | _translate = QtCore.QCoreApplication.translate 37 | Dialog.setWindowTitle(_translate("Dialog", "Dialog")) 38 | self.btn_ok.setText(_translate("Dialog", "OK")) 39 | -------------------------------------------------------------------------------- /orc-dialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 594 10 | 302 11 | 12 | 13 | 14 | Dialog 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | Qt::Horizontal 26 | 27 | 28 | 29 | 40 30 | 20 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | OK 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | btn_ok 50 | clicked() 51 | Dialog 52 | accept() 53 | 54 | 55 | 266 56 | 193 57 | 58 | 59 | 199 60 | 149 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /resource/lenna.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZekeTian/ImageUtils/af2adfe8b4457cae95e2bb6a0a4200ca5611344d/resource/lenna.png -------------------------------------------------------------------------------- /resource/界面运行图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZekeTian/ImageUtils/af2adfe8b4457cae95e2bb6a0a4200ca5611344d/resource/界面运行图.png -------------------------------------------------------------------------------- /watermark-dialog.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'watermark-dialog.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.13.0 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | 10 | from PyQt5 import QtCore, QtGui, QtWidgets 11 | 12 | 13 | class Ui_Dialog(object): 14 | def setupUi(self, Dialog): 15 | Dialog.setObjectName("Dialog") 16 | Dialog.resize(400, 100) 17 | self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) 18 | self.verticalLayout.setObjectName("verticalLayout") 19 | self.lineEdit = QtWidgets.QLineEdit(Dialog) 20 | self.lineEdit.setObjectName("lineEdit") 21 | self.verticalLayout.addWidget(self.lineEdit) 22 | self.horizontalLayout = QtWidgets.QHBoxLayout() 23 | self.horizontalLayout.setSpacing(5) 24 | self.horizontalLayout.setObjectName("horizontalLayout") 25 | self.comboBox = QtWidgets.QComboBox(Dialog) 26 | self.comboBox.setObjectName("comboBox") 27 | self.comboBox.addItem("") 28 | self.comboBox.addItem("") 29 | self.comboBox.addItem("") 30 | self.comboBox.addItem("") 31 | self.comboBox.addItem("") 32 | self.horizontalLayout.addWidget(self.comboBox) 33 | self.btn_confirm = QtWidgets.QDialogButtonBox(Dialog) 34 | self.btn_confirm.setOrientation(QtCore.Qt.Horizontal) 35 | self.btn_confirm.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) 36 | self.btn_confirm.setObjectName("btn_confirm") 37 | self.horizontalLayout.addWidget(self.btn_confirm) 38 | self.verticalLayout.addLayout(self.horizontalLayout) 39 | 40 | self.retranslateUi(Dialog) 41 | self.btn_confirm.accepted.connect(Dialog.accept) 42 | self.btn_confirm.rejected.connect(Dialog.reject) 43 | QtCore.QMetaObject.connectSlotsByName(Dialog) 44 | 45 | def retranslateUi(self, Dialog): 46 | _translate = QtCore.QCoreApplication.translate 47 | Dialog.setWindowTitle(_translate("Dialog", "Dialog")) 48 | self.comboBox.setItemText(0, _translate("Dialog", "左上角")) 49 | self.comboBox.setItemText(1, _translate("Dialog", "右上角")) 50 | self.comboBox.setItemText(2, _translate("Dialog", "中间")) 51 | self.comboBox.setItemText(3, _translate("Dialog", "左下角")) 52 | self.comboBox.setItemText(4, _translate("Dialog", "右下角")) 53 | -------------------------------------------------------------------------------- /watermark-dialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 100 11 | 12 | 13 | 14 | Dialog 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 5 24 | 25 | 26 | 27 | 28 | 29 | 左上角 30 | 31 | 32 | 33 | 34 | 右上角 35 | 36 | 37 | 38 | 39 | 中间 40 | 41 | 42 | 43 | 44 | 左下角 45 | 46 | 47 | 48 | 49 | 右下角 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | Qt::Horizontal 58 | 59 | 60 | QDialogButtonBox::Cancel|QDialogButtonBox::Ok 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | btn_confirm 72 | accepted() 73 | Dialog 74 | accept() 75 | 76 | 77 | 248 78 | 254 79 | 80 | 81 | 157 82 | 274 83 | 84 | 85 | 86 | 87 | btn_confirm 88 | rejected() 89 | Dialog 90 | reject() 91 | 92 | 93 | 316 94 | 260 95 | 96 | 97 | 286 98 | 274 99 | 100 | 101 | 102 | 103 | 104 | --------------------------------------------------------------------------------