86 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
from scripts.task import Task
 | 
						||
import os
 | 
						||
import hashlib
 | 
						||
from PIL import Image
 | 
						||
import random
 | 
						||
 | 
						||
from utils.logger_utils import app_logger
 | 
						||
 | 
						||
 | 
						||
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):
 | 
						||
        if not self.context.update_code:
 | 
						||
            app_logger().info("不需要更新res md5")
 | 
						||
            return
 | 
						||
        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
 |