旋转功能完成

This commit is contained in:
Luthics 2023-01-09 21:42:41 +08:00
parent a2bd7237fa
commit b3e1d150fd
1 changed files with 76 additions and 30 deletions

78
main.py
View File

@ -58,10 +58,10 @@ new = sys.argv[3]
# 模式 0 双线性插值 # 模式 0 双线性插值
# 模式 1 最邻近插值 # 模式 1 最邻近插值
# 模式 2 旋转图片
mode = 0 mode = 0
flur = 0 flur = 0
angle = 0
if ('*' in new): if ('*' in new):
new_width, new_height = map(int, sys.argv[3].split('*')) new_width, new_height = map(int, sys.argv[3].split('*'))
@ -84,8 +84,6 @@ else:
if (angle not in [90, 180, 270]): if (angle not in [90, 180, 270]):
error(4) error(4)
mode = 2
################## 数据输入 End ################## ################## 数据输入 End ##################
################## 文件读入 Start ################## ################## 文件读入 Start ##################
@ -218,6 +216,10 @@ for currentRow in tqdm(range(height), "读入像素点中"):
################## 缩放图片 Start ################## ################## 缩放图片 Start ##################
# 变量预处理 # 变量预处理
if (angle != 0):
new_width = width
new_height = height
scale_w = new_width / width scale_w = new_width / width
scale_h = new_height / height scale_h = new_height / height
newpixels = [] newpixels = []
@ -291,13 +293,21 @@ for currentRow in tqdm(range(new_height), "计算新像素点中"):
# 处理新文件 # 处理新文件
newimgArray = [66, 77] newimgArray = [66, 77]
rowLength = new_width if (angle in [0, 180]):
rowLength *= bpp // 8 rowLength = floor(width * bpp / 8)
while (rowLength % 4 != 0): while (rowLength % 4 != 0 or rowLength == 0):
rowLength += 1 rowLength += 1
new_fileSize = 54 + rowLength * new_height #文件头中的文件大小
new_imageSize = rowLength * new_height
else:
rowLength = floor(height * bpp / 8)
while (rowLength % 4 != 0 or rowLength == 0):
rowLength += 1
new_fileSize = 54 + rowLength * new_height #文件头中的文件大小
new_imageSize = rowLength * new_width
# 新文件头 # 新文件头
new_fileSize = 54 + rowLength * new_height #文件头中的文件大小
newimgArray.extend(sizeByte(new_fileSize, 4)) newimgArray.extend(sizeByte(new_fileSize, 4))
newimgArray.extend(sizeByte(0, 4)) newimgArray.extend(sizeByte(0, 4))
@ -310,10 +320,14 @@ new_headerSize = headerSize
newimgArray.extend(sizeByte(headerSize, 4)) newimgArray.extend(sizeByte(headerSize, 4))
new_width_b = sizeByte(new_width, 4) new_width_b = sizeByte(new_width, 4)
newimgArray.extend(new_width_b)
new_height_b = sizeByte(new_height, 4) new_height_b = sizeByte(new_height, 4)
if (angle in [0, 180]):
newimgArray.extend(new_width_b)
newimgArray.extend(new_height_b) newimgArray.extend(new_height_b)
else:
newimgArray.extend(new_height_b)
newimgArray.extend(new_width_b)
new_nbplan = nbplan new_nbplan = nbplan
newimgArray.extend(sizeByte(new_nbplan, 2)) newimgArray.extend(sizeByte(new_nbplan, 2))
@ -324,7 +338,6 @@ newimgArray.extend(sizeByte(bpp, 2))
new_compression = compression new_compression = compression
newimgArray.extend(sizeByte(new_compression, 4)) newimgArray.extend(sizeByte(new_compression, 4))
new_imageSize = rowLength * new_height
newimgArray.extend(sizeByte(new_imageSize, 4)) newimgArray.extend(sizeByte(new_imageSize, 4))
new_wppm = wppm new_wppm = wppm
@ -396,26 +409,59 @@ def flur(row, col):
return [r, g, b, a] return [r, g, b, a]
if (angle in [0, 180]):
for i in tqdm(range(len(newpixels)), "将像素点格式化中"): for i in tqdm(range(len(newpixels)), "将像素点格式化中"):
row = newpixels[i] row = newpixels[i]
for col in range(len(row)): for col in range(len(row)):
if (1 == flur): if (1 == flur):
print("?")
newimgArray.extend(flur(i, col)) newimgArray.extend(flur(i, col))
else: else:
if (new_bpp // 8 == 3): if (angle == 0):
pixel = [ pixel = [
newpixels[i][col]['r'], newpixels[i][col]['g'], newpixels[i][col]['r'], newpixels[i][col]['g'],
newpixels[i][col]['b'] newpixels[i][col]['b']
] ]
else: if (new_bpp == 32):
pixel.append(newpixels[i][col]['a'])
elif (angle == 180):
pixel = [ pixel = [
newpixels[i][col]['r'], newpixels[i][col]['g'], newpixels[len(newpixels) - i - 1][len(row) - col -
newpixels[i][col]['b'], newpixels[i][col]['a'] 1]['r'],
newpixels[len(newpixels) - i - 1][len(row) - col -
1]['g'],
newpixels[len(newpixels) - i - 1][len(row) - col -
1]['b']
] ]
if (new_bpp == 32):
pixel.append(newpixels[len(newpixels) - i -
1][len(row) - col - 1]['a'])
newimgArray.extend(pixel) newimgArray.extend(pixel)
newimgArray.extend(sizeByte(0, rowLength - len(row) * (new_bpp // 8))) newimgArray.extend(sizeByte(0, rowLength - len(row) * (new_bpp // 8)))
else:
for i in tqdm(range(len(newpixels[0])), "将像素点格式化中"):
for j in range(len(newpixels) - 1, -1, -1):
if (angle == 270):
pixel = [
newpixels[j][i]['r'], newpixels[j][i]['g'],
newpixels[j][i]['b']
]
if (new_bpp == 32):
pixel.append(newpixels[j][i]['a'])
elif (angle == 90):
pixel = [
newpixels[len(newpixels) - j - 1][len(newpixels[0]) - i -
1]['r'],
newpixels[len(newpixels) - j - 1][len(newpixels[0]) - i -
1]['g'],
newpixels[len(newpixels) - j - 1][len(newpixels[0]) - i -
1]['b']
]
if (new_bpp == 32):
pixel.append(newpixels[len(newpixels) - j -
1][len(newpixels[0]) - i - 1]['a'])
newimgArray.extend(pixel)
newimgArray.extend(
sizeByte(0, rowLength - len(newpixels) * (new_bpp // 8)))
################## 字节计算 END ################## ################## 字节计算 END ##################
################## 写出文件 Start ################## ################## 写出文件 Start ##################