SoundScape
我是第四个做出来的!耶!
👇以下为WriteUp👇
给了三个音频,说音频就是图片,看看音频们
全都是这样的格式,肯定是高低对应10没错了,而且数量如此之多,猜测是文件的二进制值
但为什么有三个这样的文件呢?
文件的名字经过搜索并没有什么特别的,但是大写的首字母是RGB,思路变得清晰起来了!
接下来就是拿到数据和脚本运算了
经过比较Audacity内的信息,发现wav文件并没有被压缩破坏,还是很有灵性的~导出16进制,把7F改成1,把00改成0就可以得到二进制了,其他两个文件同理。
把得到的0101……信息存储到txt文件里,命名为Raine1.txt
等等
因为得到的01二进制数据有1769472位,每8位转换成一个2位的16进制数,所以得到的数据对应的有221184个,分离因数可以猜出图片大小
接下来就是写脚本环节!
import numpy as np
import matplotlib.pyplot as plt
def convert_binary_to_hex(binary_string):
decimal_value = int(binary_string, 2)
hex_string = format(decimal_value, '02X')
return hex_string
def main():
with open('Raine1.txt', 'r') as file1, open('Gideon1.txt', 'r') as file2, open('Beryl1.txt', 'r') as file3:
binary1 = file1.read()
binary2 = file2.read()
binary3 = file3.read()
hex_colors = []
for i in range(0, len(binary1), 8):
r = convert_binary_to_hex(binary1[i:i+8])
g = convert_binary_to_hex(binary2[i:i+8])
b = convert_binary_to_hex(binary3[i:i+8])
hex_colors.append((r+g+b))
#print(hex_colors)
#这里可以打印出来一些RGB像素数据来判断进制转换是否正确
# 将16进制颜色转换为RGB格式
rgb_colors = [tuple(int(hex[i:i + 2], 16) for i in (0, 2, 4)) for hex in hex_colors]
# 创建一个数组以存储像素值
image_array = np.array([rgb_colors], dtype=np.uint8)
# 调整数组形状以匹配图像尺寸
#这里我发现的图片尺寸是384*576
image_array = image_array.reshape(384, 576, 3)
# 绘制图像
plt.imshow(image_array)
plt.axis('off')
# 保存图像为文件
plt.savefig('output_image.png')
if __name__ == "__main__":
main()
运行一下,就可以得到图片力