基础知识:
PIL
PIL是Python Imaging Library,它为python解释器提供了图像编辑功能。
PIL.Image.new()方法通过给定的模式和大小创建一个新图像。尺寸以(width,height)-tuple,以像素为单位。对于单波段图像,颜色作为单个值给出,对于多波段图像,颜色作为一个元组给出(各波段一个值)。
我们还可以使用颜色名称。如果省略了color参数,则图像将填充为零(通常对应于黑色)。如果颜色为无,则不初始图像。如果您要在图像里粘贴或绘制信息,这将很有用。
用法:
PIL.Image.new(mode, size)
PIL.Image.new(mode, size, color)
参数:
mode:用于新图像的模式。 (可能是RGB,RGBA)
size:包含(宽度,高度)以像素为单位的2元组。
color:图像使用什么颜色。默认为黑色。如果给出的话,对于单频带模式,它应该是单个
整数或浮点值;对于多频带模式,它应该是一个元组。
返回值:Image对象。
putpixel()
PIL是Python Imaging Library,它为python解释器提供了图像编辑功能。 PixelAccess类提供对PIL.Image数据的读写访问权限(像素级)。访问单个像素相当慢。如果要遍历图像里的所有像素,则可能会通过Pillow API的其他部分的方法更快。
putpixel()修改x,y处的像素。对于单波段图像,颜色作为单个数值给出;对于multi-band图像,颜色作为元组给出
用法: putpixel(self, xy, color)
参数:
xy:像素坐标,表示为(x,y)
value:-像素值。
返回值:具有像素的图像。
解题过程
下载文件得到一个txt文件,打开查看全是0和1
1和0可联想到黑和白两颜色,尝试转成二维码
python转二维码:
from PIL import Image
MAX = 25
#二维码大小
pic = Image.new("RGB",(MAX, MAX))
#str = """1111111001110010001111111100000100001111010100000110111010011100010010111011011101010111100001011101101110101010101000101110110000010011000101010000011111111010101010101111111000000000100000110000000011000111011101101000110000001000010110010010010100010011110100001110111001100111101001010110010010011000001001100001001101000111100011111101110010100010110111110011011111101111000110110010010101101100100011110011111111111011100000000101100011000101001111111010010100101010001100000101010101010001100110111010001001111111100101011101000011001011110111101110100100110010010000110000010110000110110110011111111011010000101110101
#"""#修改后的二维码
str="""0000000001110010000000000000000000001111010000000000000000011100010000000000000000010111100000000000000000001010101000000000000000000011000101000000000000000010101010100000000000000000100000110000000011000111011101101000110000001000010110010010010100010011110100001110111001100111101001010110010010011000001001100001001101000111100011111101110010100010110111110011011111101111000110110010010101101100100011110011111111111011100000000101100011000101000000000010010100101010001000000001010101010001100100000000001001111111100100000000000011001011110111000000000100110010010000100000000110000110110110010000000011010000101110101
"""#原二维码
# str为获取的01片段
i=0
for y in range (0,MAX):for x in range (0,MAX):if(str[i] == '1'):pic.putpixel([x,y],(0, 0, 0))else:pic.putpixel([x,y],(255,255,255))i = i+1
pic.show()
pic.save("5.png")
#由于直接预览分辨率太低,所以保存下来观看"""
PIL.Image.new(模式, 大小, 颜色)
"""
运行代码发现上述二维码少了定位标志
通过ps可以手动补全
直接生成二维码
扫描得到flag
flag{QR_c0de_1s_1nterest1n9}