From b3e1d150fd79dffc9cdc5333bbe6d5ea344fdba2 Mon Sep 17 00:00:00 2001 From: Luthics Date: Mon, 9 Jan 2023 21:42:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=8B=E8=BD=AC=E5=8A=9F=E8=83=BD=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 106 ++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 76 insertions(+), 30 deletions(-) diff --git a/main.py b/main.py index b054073..4266727 100644 --- a/main.py +++ b/main.py @@ -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): - rowLength += 1 +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)), "将像素点格式化中"): - row = newpixels[i] - for col in range(len(row)): - if (1 == flur): - print("?") - newimgArray.extend(flur(i, col)) - else: - if (new_bpp // 8 == 3): - pixel = [ - newpixels[i][col]['r'], newpixels[i][col]['g'], - newpixels[i][col]['b'] - ] +if (angle in [0, 180]): + for i in tqdm(range(len(newpixels)), "将像素点格式化中"): + row = newpixels[i] + for col in range(len(row)): + if (1 == flur): + newimgArray.extend(flur(i, col)) else: - pixel = [ - newpixels[i][col]['r'], newpixels[i][col]['g'], - newpixels[i][col]['b'], newpixels[i][col]['a'] - ] + if (angle == 0): + pixel = [ + newpixels[i][col]['r'], newpixels[i][col]['g'], + newpixels[i][col]['b'] + ] + if (new_bpp == 32): + pixel.append(newpixels[i][col]['a']) + elif (angle == 180): + pixel = [ + 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))) - + 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 ##################