我们从碎纸机里抢救回来了某个关键图片资料,你能帮我们修复它吗?
1.这是一个很经典的图片拼接题,我们写个脚本放文件夹里面跑一下就可以了
?
2.下面有一个脚本需要装这两个库,不然会报错
(.venv) PS D:\Study\Code\python3\LuistinTools> pip install pandaspip install pandas
(.venv) PS D:\Study\Code\python3\LuistinTools> pip install Pillow
3.python代码
import glob
import PIL.Image as Image
import os
import pandas as pd
def list_file():
? ? fileList = []
? ? #for fileName in glob.glob("*.png",key=os.path.getmtime):
? ? ? ? ? # fileList.append(fileName)
? ? fileList=sorted(glob.glob("*.png"),key=os.path.getmtime)
? ? return (fileList)
def image_compose():
? ? to_image = Image.new('RGB', (IMAGE_COLUMN * IMAGE_SIZE, IMAGE_ROW * IMAGE_SIZE)) ?# 创建一个新图
? ? # 循环遍历,把每张图片按顺序粘贴到对应位置上
? ? for y in range(1, IMAGE_ROW + 1):
? ? ? ? for x in range(1, IMAGE_COLUMN + 1):
? ? ? ? ? ? from_image = Image.open(IMAGES_PATH + image_names[IMAGE_COLUMN * (y - 1) + x - 1]).resize(
? ? ? ? ? ? ? ? (IMAGE_SIZE, IMAGE_SIZE), Image.ANTIALIAS)
? ? ? ? ? ? to_image.paste(from_image, ((x - 1) * IMAGE_SIZE, (y - 1) * IMAGE_SIZE))
? ? return to_image.save(IMAGE_SAVE_PATH) ?# 保存新图
def combin(imgs):
? ? img0=Image.open(imgs[0])
? ? width = img0.width ? ? ? #图片的宽
? ? height = img0.height
? ? size=(width*len(imgs),height)#图片的高
? ? saveimg= Image.new("RGB",size)
? ? #saveimg.save('test.png')
? ? savepix=saveimg.load()
? ? for i in range(len(imgs)):
? ? ? ? img=Image.open(imgs[i])
? ? ? ? imgSize = img.size
? ? ? ? width = img.width ? ? ? #图片的宽
? ? ? ? height = img.height ? ? ?#图片的高
? ? ? ? #print(w, h, f)
? ? ? ? img=img.convert("RGB")
? ? ? ? for x in range(width):
? ? ? ? ? ? for y in range(height):
? ? ? ? ? ? ? ? data=(img.getpixel((x,y)))
? ? ? ? ? ? ? ? #print(data)
? ? ? ? ? ? ? ? saveimg.putpixel(((x+i*width),y),data)
? ? saveimg.show()
? ? saveimg.save('test.png')
def savepix():
? ? with open ('2.txt')as f :
? ? ? ? im=f.read()
? ? imgs=im.split()
? ? img0=Image.open(imgs[0])
? ? imgSize = img0.size
? ? data0={}
? ? width = img0.width ? ? ? #图片的宽
? ? height = img0.height
? ? print(width ,height)
? ? for i in range(len(imgs)):
? ? ? ? img=Image.open(imgs[i])
? ? ? ? #img=img.convert("RGB")
? ? ? ? print(imgs[i])
? ? ? ? data0[imgs[i]]=[]
? ? ? ? for x in range(1):
? ? ? ? ? ? for y in range(height):
? ? ? ? ? ? ? ? data=img.getpixel((x,y))
? ? ? ? ? ? ? ? try:
? ? ? ? ? ? ? ? ? ? data=data-data0[imgs[0]][y]
? ? ? ? ? ? ? ? except:
? ? ? ? ? ? ? ? ? ? pass
? ? ? ? ? ? ? ? data0[imgs[i]].append(data)
? ? ? ? data0[imgs[i]+"2"]=[]
? ? ? ? for x in range(img.width-1,img.width):
? ? ? ? ? ? for y in range(height):
? ? ? ? ? ? ? ? data=img.getpixel((x,y))
? ? ? ? ? ? ? ? data0[imgs[i]+"2"].append(data)
? ? s=pd.DataFrame(data0)
? ? s.to_csv(f"save2.csv",encoding="utf_8_sig")
if __name__=="__main__":
? ? imgs=list_file()
? ? combin(imgs)
4.在文件夹打开cmd,运行这个python
4.得到图片
5.发现QR直接扫不出来
6.可能是因为太暗了,二维码一般都是很清楚的,太暗导致扫描不出来,所以我们设置一下这张图片的亮度和对比度,亮度最亮,对比度最低
7.一定要用区域解码,其他的不太可能会出flag
flag{You Can Repair A Picture From Splices Baesd On Entropy}: