gpt4 book ai didi

python - 在 python 中处理时创建图像文件的副本

转载 作者:行者123 更新时间:2023-12-01 04:23:46 25 4
gpt4 key购买 nike

我正在处理 BMP 文件,目前正在将其转换为灰度。然而,我使用 rb+ 写入同一个文件并保存处理后的原始文件。如何处理实际上复制原始文件并对其进行处理而不是销毁原始文件的图像文件?

这是代码

from io import SEEK_CUR

def main():
filename = input("Please enter the file name: ")

# Open as a binary file for reading and writing
imgFile = open(filename, "rb+")

# Extract the image information.
fileSize = readInt(imgFile, 2)
start = readInt(imgFile, 10)
width = readInt(imgFile, 18)
height = readInt(imgFile, 22)

# Scan lines must occupy multiples of four bytes.
scanlineSize = width * 3
if scanlineSize % 4 == 0:
padding = 0
else :
padding = 4 - scanlineSize % 4

# Make sure this is a valid image.
if fileSize != (start + (scanlineSize + padding) * height):
exit("Not a 24-bit true color image file.")

# Move to the first pixel in the image.
imgFile.seek(start)# Process the individual pixels.
for row in range(height): #For each scan line
for col in range(width): #For each pixel in the line
processPixel(imgFile)

# Skip the padding at the end.
imgFile.seek(padding, SEEK_CUR)

imgFile.close()## Processes an individual pixel.#@param imgFile the binary file containing the BMP image#

def processPixel(imgFile) :
# Read the pixel as individual bytes.
theBytes = imgFile.read(3)
blue = theBytes[0]
green = theBytes[1]
red = theBytes[2] #Read the pixel as individual bytes.
# Process the pixel
newBlue = 255 - blue
newGreen = 255 - green
newRed = 255 - red
# Process the pixel.



# Write the pixel.
imgFile.seek(-3, SEEK_CUR)# Go back 3 bytes to the start of the pixel.

imgFile.write(bytes([newBlue, newGreen, newRed]))## Gets an integer from a binary file.#@param imgFile the file#@ param offset the offset at which to read the integer#@
## Gets an integer from a binary file.
# @param imgFile the file
# @param offset the offset at which to read the integer
# @return the integer starting at the given offset
#

def readInt(imgFile, offset): #Move the file pointer to the given byte within the file.
imgFile.seek(offset)

# Read the 4 individual bytes and build an integer.
theBytes = imgFile.read(4)
result = 0
base = 1
for i in range(4):
result = result + theBytes[i] * base
base = base * 256

return result# Start the program.
main()

最佳答案

我建议先制作文件的副本,然后写入该副本。

您可以使用copyfile Shutil 模块中的函数用于复制文件。以下是如何复制文件的演示:

import shutil  
shutil.copyfile('/path/to/src/file', '/path/to/dest/file')

关于python - 在 python 中处理时创建图像文件的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33380769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com