Skip to content

Commit 01bd3f9

Browse files
committed
fix: 修复Raw无法获取宽高的问题
1 parent c27c95e commit 01bd3f9

File tree

7 files changed

+355
-10
lines changed

7 files changed

+355
-10
lines changed

main.py

Lines changed: 66 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from unittest import result
12
import cv2
23
import os
34
import numpy as np
@@ -10,6 +11,7 @@
1011
from PyQt6.QtGui import QGuiApplication
1112
from tools.tiff_processer import TIFF
1213
from ui.Ui_MainWindow import Ui_MainWindow
14+
from ui.inputDialog import Ui_Dialog
1315

1416
from tools.raw_processer import Raw
1517
from tools.png_processer import PNG
@@ -34,6 +36,39 @@ def ouputDir(self):
3436
self, "选择输出路径", os.getcwd())
3537
self.lineEdit_output.setText(dirPath)
3638

39+
def showInputDialog(self):
40+
if self.inputDialog.exec() == 1:
41+
return True
42+
else:
43+
return False
44+
45+
def checkRawInput(self):
46+
# width = int(self.inputDialogUI.lineEdit_width.text())
47+
# height = int(self.inputDialogUI.lineEdit_height.text())
48+
# channels = int(self.inputDialogUI.lineEdit_channels.text())
49+
try:
50+
width = int(self.inputDialogUI.lineEdit_width.text())
51+
except ValueError as e:
52+
QtWidgets.QMessageBox.warning(
53+
self, "提示", "Raw宽度不是一个整数!")
54+
return False
55+
56+
try:
57+
width = int(self.inputDialogUI.lineEdit_width.text())
58+
except ValueError as e:
59+
QtWidgets.QMessageBox.warning(
60+
self, "提示", "Raw宽度不是一个整数!")
61+
return False
62+
63+
try:
64+
width = int(self.inputDialogUI.lineEdit_width.text())
65+
except ValueError as e:
66+
QtWidgets.QMessageBox.warning(
67+
self, "提示", "Raw通道不是一个整数!")
68+
return False
69+
70+
return True
71+
3772
def center(self):
3873
screen = QGuiApplication.screenAt(QtCore.QPoint(
3974
self.frameGeometry().x(), self.frameGeometry().y()))
@@ -47,6 +82,11 @@ def initUI(self, MainWindow):
4782
self.pushButton_start = self.pushButton_3
4883
self.center()
4984

85+
self.inputDialog = QtWidgets.QDialog(self)
86+
self.inputDialogUI = Ui_Dialog()
87+
self.inputDialogUI.setupUi(self.inputDialog)
88+
89+
5090
# 打开文件
5191
self.pushButton_input.clicked.connect(self.openFile)
5292
# self.pushButton_input.clicked.connect(self.test)
@@ -68,7 +108,21 @@ def setIsEnabled(self, isEnabled):
68108
def start(self):
69109
if(self.checkInput() == False):
70110
return
111+
112+
inputPath = self.lineEdit_input.text()
113+
_, extension_name = os.path.splitext(inputPath)
114+
extension_name = extension_name.lower()
71115

116+
if extension_name == '.raw':
117+
result = self.showInputDialog()
118+
if not result:
119+
return
120+
if self.checkRawInput() == False:
121+
return
122+
123+
self.handle()
124+
125+
def handle(self):
72126
# 禁用所有控件
73127
self.setIsEnabled(False)
74128
# 隐藏开始按钮
@@ -148,7 +202,10 @@ def handle(self):
148202
if extension_name not in FILE_TYPES:
149203
raise Exception("文件打开失败")
150204
if extension_name == '.raw':
151-
processer = Raw(inputPath, outputPath, row, col)
205+
width = int(self.inputDialogUI.lineEdit_width.text())
206+
height = int(self.inputDialogUI.lineEdit_height.text())
207+
channels = int(self.inputDialogUI.lineEdit_channels.text())
208+
processer = Raw(inputPath, outputPath, row, col,(height, width, channels))
152209
if extension_name == '.png':
153210
processer = PNG(inputPath, outputPath, row, col)
154211
if extension_name == '.jpg' or extension_name == '.jpge':
@@ -164,12 +221,16 @@ def handle(self):
164221

165222
time.sleep(0.5)
166223

167-
processer.slice()
224+
result = processer.slice()
168225

169-
time.sleep(0.5)
226+
if isinstance(result, str):
227+
QtWidgets.QMessageBox.information(
228+
self, "提示", result)
229+
else:
230+
time.sleep(0.5)
170231

171-
QtWidgets.QMessageBox.information(
172-
self, "处理完成提示", "恭喜,处理完成!")
232+
QtWidgets.QMessageBox.information(
233+
self, "处理完成提示", "恭喜,处理完成!")
173234

174235
self.complete()
175236

test.raw

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

tools/raw_processer.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,20 @@
77

88

99
class Raw(Processer):
10+
def __init__(self, input, output, rows, cols, shape) -> None:
11+
super().__init__(input, output, rows, cols)
12+
self.shape = shape
13+
1014
def load(self) -> None:
1115
self.img = np.fromfile(self.input, dtype=np.uint8)
12-
self.img = self.img.reshape((65536, 65536, 3))
1316
self.inputPath = Path(self.input)
1417

1518
def slice(self) -> None:
1619
self.load()
20+
try:
21+
self.img = self.img.reshape(self.shape)
22+
except ValueError as e:
23+
return "宽高或通道数与Raw文件大小不匹配!"
1724
total = self.rows * self.cols
1825
shape = self.img.shape
1926
singleWidth = math.ceil(shape[0] / self.cols)
@@ -37,7 +44,8 @@ def slice(self) -> None:
3744
self.save(new_img, i*self.rows+j)
3845
print("正在处理%d/%d张……" % (i*self.rows+j, total))
3946

47+
return False
4048
def save(self, img, index) -> None:
41-
cv2.imencode(self.inputPath.suffix, img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])[
49+
cv2.imencode('.jpg', img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])[
4250
1].tofile("%s/%s_%03d%s" %
4351
(self.output, self.inputPath.stem, index, '.jpg'))

tools/tiff_processer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,6 @@ def slice(self) -> None:
3737
print("正在处理%d/%d张……" % (i*self.rows+j, total))
3838

3939
def save(self, img, index) -> None:
40-
cv2.imencode(self.inputPath.suffix, img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])[
40+
cv2.imencode('.jpg', img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])[
4141
1].tofile("%s/%s_%03d%s" %
4242
(self.output, self.inputPath.stem, index, '.jpg'))

ui/Ui_MainWindow.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ def retranslateUi(self, MainWindow):
163163
self.label.setText(_translate("MainWindow", "输出目录:"))
164164
self.pushButton_output.setText(_translate("MainWindow", "浏览"))
165165
self.pushButton_3.setText(_translate("MainWindow", "开始处理"))
166-
self.groupBox_2.setTitle(_translate("MainWindow", "参数配置"))
166+
self.groupBox_2.setTitle(_translate("MainWindow", "切割参数配置"))
167167
self.label_3.setText(_translate("MainWindow", "行数:"))
168168
self.label_5.setText(_translate("MainWindow", "列数:"))
169169
self.label_6.setText(_translate("MainWindow", "×"))

ui/inputDialog.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# Form implementation generated from reading ui file 'inputDialog.ui'
2+
#
3+
# Created by: PyQt6 UI code generator 6.3.0
4+
#
5+
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
6+
# run again. Do not edit this file unless you know what you are doing.
7+
8+
9+
from PyQt6 import QtCore, QtGui, QtWidgets
10+
11+
12+
class Ui_Dialog(object):
13+
def setupUi(self, Dialog):
14+
Dialog.setObjectName("Dialog")
15+
Dialog.resize(419, 208)
16+
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
17+
self.buttonBox.setGeometry(QtCore.QRect(50, 160, 341, 32))
18+
self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
19+
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
20+
self.buttonBox.setObjectName("buttonBox")
21+
self.label = QtWidgets.QLabel(Dialog)
22+
self.label.setGeometry(QtCore.QRect(20, 30, 55, 16))
23+
font = QtGui.QFont()
24+
font.setPointSize(12)
25+
self.label.setFont(font)
26+
self.label.setObjectName("label")
27+
self.lineEdit_width = QtWidgets.QLineEdit(Dialog)
28+
self.lineEdit_width.setGeometry(QtCore.QRect(20, 60, 113, 30))
29+
font = QtGui.QFont()
30+
font.setPointSize(12)
31+
self.lineEdit_width.setFont(font)
32+
self.lineEdit_width.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
33+
self.lineEdit_width.setObjectName("lineEdit_width")
34+
self.label_2 = QtWidgets.QLabel(Dialog)
35+
self.label_2.setGeometry(QtCore.QRect(150, 30, 55, 16))
36+
font = QtGui.QFont()
37+
font.setPointSize(12)
38+
self.label_2.setFont(font)
39+
self.label_2.setObjectName("label_2")
40+
self.lineEdit_height = QtWidgets.QLineEdit(Dialog)
41+
self.lineEdit_height.setGeometry(QtCore.QRect(150, 60, 113, 30))
42+
font = QtGui.QFont()
43+
font.setPointSize(12)
44+
self.lineEdit_height.setFont(font)
45+
self.lineEdit_height.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
46+
self.lineEdit_height.setObjectName("lineEdit_height")
47+
self.lineEdit_channels = QtWidgets.QLineEdit(Dialog)
48+
self.lineEdit_channels.setGeometry(QtCore.QRect(280, 60, 113, 30))
49+
font = QtGui.QFont()
50+
font.setPointSize(12)
51+
self.lineEdit_channels.setFont(font)
52+
self.lineEdit_channels.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
53+
self.lineEdit_channels.setObjectName("lineEdit_channels")
54+
self.label_3 = QtWidgets.QLabel(Dialog)
55+
self.label_3.setGeometry(QtCore.QRect(280, 30, 55, 16))
56+
font = QtGui.QFont()
57+
font.setPointSize(12)
58+
self.label_3.setFont(font)
59+
self.label_3.setObjectName("label_3")
60+
self.label_4 = QtWidgets.QLabel(Dialog)
61+
self.label_4.setGeometry(QtCore.QRect(20, 110, 311, 16))
62+
self.label_4.setStyleSheet("*{\n"
63+
"color:rgb(255, 0, 0)\n"
64+
"}")
65+
self.label_4.setObjectName("label_4")
66+
67+
self.retranslateUi(Dialog)
68+
self.buttonBox.accepted.connect(Dialog.accept) # type: ignore
69+
self.buttonBox.rejected.connect(Dialog.reject) # type: ignore
70+
QtCore.QMetaObject.connectSlotsByName(Dialog)
71+
72+
def retranslateUi(self, Dialog):
73+
_translate = QtCore.QCoreApplication.translate
74+
Dialog.setWindowTitle(_translate("Dialog", "输入RAW图片信息"))
75+
self.label.setText(_translate("Dialog", "宽度:"))
76+
self.label_2.setText(_translate("Dialog", "高度:"))
77+
self.lineEdit_channels.setText(_translate("Dialog", "3"))
78+
self.label_3.setText(_translate("Dialog", "通道数:"))
79+
self.label_4.setText(_translate("Dialog", "*Photoshop Raw格式不包含宽高信息,需要手动输入。"))

0 commit comments

Comments
 (0)