为了对图像进行过滤,软件会改变图像中像素的值
当我尝试这个代码时
file = open("hey.jpg" , "rb") #opening file
x = file.read() #reading from file
for i in range(len(x)):
print(x[i]) #cordinate of each pixel
file.close() #closing file
我知道它是通过输出输出每个像素的信息,因为没有值高于255或低于0
“我的图像”的输出示例:
240 -> R
255 -> G
0 -> B
我想更改每个图像的值,并将其保存在新图像中
我尝试了下面的代码,但不起作用
file = open("hey.jpg" , "rb") #opening file
x = file.read() #reading from file
file.close() #closing file
file = open("new.jpg" , "wb") #the new image
for i in range(len(x)): #writing the new data with filter
if x[i] !=255: #pixels RGB cant be 256
file.write(bytes(x[i] + 1)) #bytes because when doig write(x[i]+1) it gives mes an error that a bytee object is required not int
else: #if it is 255 then do nothing
file.write(bytes(x[i]))
file.close()#closing the new image
无需阅读此内容:
附言: Windows10,python3.8。 我试图把一切都简化
我的意思是没有错误,但操作系统无法解码并输出图像 我不想使用任何像PIL这样的第三方库
这段代码复制了一幅图像的二进制数据,并成功地创建了一幅新的图像
file = open("hey.jpg" , "rb") #opening file
x = file.read() #reading from file
file.close() #closing file
file = open("new.jpg" , "wb")
file.write(x)
file.close()
JPEG、PNG和大多数图像文件格式都不是这样工作的。它们以元数据开头,如照片拍摄日期、相机型号、GPS坐标、图像高度、宽度和版权信息。之后,它们通常以高度优化的压缩格式存储像素,因此在不首先解压缩数据的情况下无法更改像素。然后,您可以编辑它们并将它们写回,使用新的标题并重新压缩。所以你最好使用图书馆
如果你真的,真的不想使用Python库,你可以在终端中使用ImageMagick(一个命令行工具)将你的图像转换成纯RGB像素。所以,如果您的映像被称为
input.jpg
,您可以在终端中运行此操作:然后,如果您的图像是640x480像素,那么名为
pixels.dat
的文件的长度正好是640x480x3字节,没有标题、元数据或压缩。然后,您可以完全按照最初的设想来处理此问题。之后,您可以使用以下内容将其恢复为JPEG或PNG格式:请注意,在从RGB字节到JPEG的返回过程中,您必须告诉ImageMagick图像的高度和宽度,因为文件开头没有显示其高度和宽度的标题
我知道它是通过输出输出每个像素的信息,因为没有任何值高于255或低于0
这种行为的原因不同于“每个像素的信息”-您只是访问了文件的各个字节,1字节值始终从
0x00
(包括)到0xFF
(包括)。如果您对其他类型的文件(例如text one)执行此操作,结果将类似此代码复制图像的二进制数据并成功创建新图像
您的代码只是将文件的内容复制到另一个文件中。请注意,无论文件类型如何,它都可以工作
我不想使用任何第三方库,如PIL
按照您的意愿去做,但请记住,如果没有“任何第三方库”,您必须从头开始自己实现对每种图像格式的处理
相关问题 更多 >
编程相关推荐