from scripts.task import Task import os import hashlib from PIL import Image import random def get_md5(file_path): """计算文件的MD5值""" hash_md5 = hashlib.md5() with open(file_path, "rb") as f: for chunk in iter(lambda: f.read(4096), b""): hash_md5.update(chunk) return hash_md5.hexdigest() def modify_one_pixel(input_path, output_path): """随机修改图片中一个不显眼的像素,每次执行结果不同""" try: with Image.open(input_path) as img: width, height = img.size # 随机选择一个像素位置(避开边缘以防某些特殊图片格式问题) x = random.randint(1, width - 2) y = random.randint(1, height - 2) # 获取该位置的像素值 pixel = img.getpixel((x, y)) # 随机决定是增加还是减少像素值 change = random.choice([-1, 1]) # 根据图像模式处理像素值 if img.mode in ['RGB', 'RGBA']: new_pixel = list(pixel) # 随机选择一个颜色通道进行修改 channel = random.randint(0, len(new_pixel) - 1) new_pixel[channel] = (new_pixel[channel] + change) % 256 new_pixel = tuple(new_pixel) elif img.mode == 'L': # 灰度图 new_pixel = (pixel + change) % 256 else: # 其他模式处理 if isinstance(pixel, int): new_pixel = (pixel + change) % 256 else: # 对多通道非RGB模式,随机选择一个通道修改 new_pixel = list(pixel) channel = random.randint(0, len(new_pixel) - 1) new_pixel[channel] = (new_pixel[channel] + change) % 256 new_pixel = tuple(new_pixel) # 设置新的像素值 img.putpixel((x, y), new_pixel) # 保存修改后的图片 img.save(output_path) return True except Exception as e: print(f"处理图片时出错: {e}") return False class ProjectResMd5(Task): def execute(self): path = f"launcher-game/res/" root_path = os.path.join(self.context.temp_project_path, path) for i in os.listdir(root_path): if i.startswith("drawable"): path = os.path.join(root_path, i) for file in os.listdir(path): if file.endswith(".png") or file.endswith(".jpg"): file_path = os.path.join(path, file) md51 = get_md5(file_path) modify_one_pixel(file_path, file_path) md52 = get_md5(file_path) print(file_path, md51, md52) pass