旋转功能完成

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

82
main.py
View File

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