You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python按指定公式处理图像得到隐藏flag的目标图像d

问题分析
  • 核心逻辑错误:题目给出的d = y - 21a - 3b + 41c是像素通道值的算术运算,你当前代码中使用的^异或、~按位取反、&按位与都属于位运算,和要求的加减计算逻辑完全不符,这是最主要的问题。
  • 像素值边界问题:RGB图像每个通道的取值范围是0~255的无符号8位整数,直接做算术运算会出现负数或者超出255的情况,需要对最终计算结果取模256,才能得到合法的像素值。
修正后的代码
from PIL import Image

# 加载所有输入图像
imagey = Image.open('y.png')
imagea = Image.open('a.png')
imageb = Image.open('b.png')
imagec = Image.open('c.png')
width, height = imagey.size

# 创建输出图像
new_img = Image.new('RGB', (width, height))
imgy = imagey.load()
imga = imagea.load()
imgb = imageb.load()
imgc = imagec.load()
data = new_img.load()

# 逐像素按公式计算
for x in range(width):
    for y in range(height):
        # 分别取三个通道的值计算
        r = imgy[x,y][0] - 21 * imga[x,y][0] - 3 * imgb[x,y][0] + 41 * imgc[x,y][0]
        g = imgy[x,y][1] - 21 * imga[x,y][1] - 3 * imgb[x,y][1] + 41 * imgc[x,y][1]
        b = imgy[x,y][2] - 21 * imga[x,y][2] - 3 * imgb[x,y][2] + 41 * imgc[x,y][2]
        # 处理值的范围,取模256得到合法的0-255像素值
        r = int(r % 256)
        g = int(g % 256)
        b = int(b % 256)
        data[x,y] = (r, g, b)

new_img.save('final.png')
new_img.show()
补充说明

如果运行后图像显示仍然异常,可以尝试将模运算替换为max(0, min(255, int(val)))做截断处理,或者检查所有输入图像的尺寸、通道数是否一致,以上代码已经完全匹配题目给出的计算公式要求,正常运行即可得到包含flag的目标图像d。

内容的提问来源于stack exchange,提问作者newcoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:15:03