赵灵越 2024-04-23 15:18 采纳率: 99.3%
浏览 3

我只要文字查找不同,原文跟修改的文章,不同之处红色显示,并且打印和保存图片

文字自动放大,或者缩小
分别
距离左边2%距离
距离左边52%距离

用电脑的壁纸的尺寸
1920*
我是说把不同的部分显示红色,一模一样的,不要红色

input输入多行文本
按# ꧂ ꧁结束
重复第1次

原文
修改文

将两个文本按照标点符号库分割替换回车,分别换行显示
原文在左   修改文在右
在修改文的优点显示对比原文,哪个地方修改了,原来的地方不一样,就把那个字显示为红色

逻辑树给我


from PIL import Image, ImageDraw, ImageFont

# 分割文本并获取原文和修改文
original_text = """\
├── 原文
"""

modified_text = """\
└── 修改文
    └── 用 # ꧂ 分隔
"""

def split_text(original_text, modified_text):
    # 分割文本
    original_lines = original_text.split('\n')
    modified_lines = modified_text.split('\n')
    
    return original_lines, modified_lines

def compare_lines(original_lines, modified_lines):
    # 逐行比较
    diff_lines = []
    for original_line, modified_line in zip(original_lines, modified_lines):
        if original_line != modified_line:
            diff_lines.append((original_line, modified_line))
    
    return diff_lines

def highlight_diff(original_lines, modified_lines, diff_lines):
    # 设置字体样式和大小
    font_path = "/storage/emulated/0/字体/华文新魏.TTF"  # 你的字体文件路径
    font_size = 20
    font = ImageFont.truetype(font_path, font_size)
    
    # 计算图片宽度和高度
    max_width = max(font.getsize(line)[0] for line in original_lines + modified_lines) + 20
    line_height = font.getsize("A")[1]
    image_height = max(len(original_lines), len(modified_lines)) * line_height
    
    # 创建空白图片
    image = Image.new('RGB', (1920, image_height), color='white')  # 设置为1920宽度
    draw = ImageDraw.Draw(image)
    
    # 绘制文本
    y = 0
    for original_line, modified_line in zip(original_lines, modified_lines):
        if (original_line, modified_line) in diff_lines:
            draw.text((0, y), original_line, font=font, fill='black')
            draw.text((max_width, y), modified_line, font=font, fill='red')
        else:
            draw.text((0, y), original_line, font=font, fill='black')
            draw.text((max_width, y), modified_line, font=font, fill='black')
        y += line_height
    
    # 保存图片
    output_image_path = "/storage/emulated/0/代码设计/壁纸/Vs小樱_diff.png"  # 保存路径
    image.save(output_image_path)
    print("对比结果已保存到:", output_image_path)

# 分割文本
original_lines, modified_lines = split_text(original_text, modified_text)

# 比较文本并找出差异行
diff_lines = compare_lines(original_lines, modified_lines)

# 高亮差异并保存图片
highlight_diff(original_lines, modified_lines, diff_lines)
  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-23 15:18
    关注

    引自免费微信小程序:皆我百晓生

    为了实现你的需求,我为你提供了一个Python脚本,它会根据提供的原文和修改后的文本创建一张图片,其中不同之处会被标记为红色。你需要确保已经安装了PIL(Pillow)库,如果没有安装,可以使用pip install pillow进行安装。

    首先,我们需要导入所需的库,然后定义三个函数:split_textcompare_lineshighlight_diff。接下来是主程序部分,用于调用这些函数并处理文本。

    以下是完整的代码:

    from PIL import Image, ImageDraw, ImageFont
    
    # 原始文本和修改后的文本
    original_text = """
    ├── 原文
    """
    modified_text = """
    └── 修改文
        └── 用 # ꧂ 分隔
    """
    
    def split_text(original_text, modified_text):
        # 将文本按换行符分割成列表
        original_lines = original_text.split('\n')
        modified_lines = modified_text.split('\n')
        
        return original_lines, modified_lines
    
    def compare_lines(original_lines, modified_lines):
        # 比较两组文本,找出不同的行
        diff_lines = [(o, m) for o, m in zip(original_lines, modified_lines) if o != m]
        
        return diff_lines
    
    def highlight_diff(original_lines, modified_lines, diff_lines):
        # 设置字体样式和大小
        font_path = "/path/to/font.ttf"  # 替换为你的字体文件路径
        font_size = 20
        font = ImageFont.truetype(font_path, font_size)
        
        # 计算图片的宽度和高度
        max_width = max(font.getsize(line)[0] for line in original_lines + modified_lines) + 20
        line_height = font.getsize("A")[1]
        image_height = max(len(original_lines), len(modified_lines)) * line_height
        
        # 创建空白图片
        image = Image.new('RGB', (1920, image_height), color='white')  # 设置为1920宽度
        draw = ImageDraw.Draw(image)
        
        # 在图片上绘制文本
        y = 0
        for original_line, modified_line in zip(original_lines, modified_lines):
            if (original_line, modified_line) in diff_lines:
                draw.text((0, y), original_line, font=font, fill='black')
                draw.text((max_width, y), modified_line, font=font, fill='red')
            else:
                draw.text((0, y), original_line, font=font, fill='black')
                draw.text((max_width, y), modified_line, font=font, fill='black')
            y += line_height
        
        # 保存图片
        output_image_path = "/path/to/output/directory/comparison.png"  # 替换为输出路径
        image.save(output_image_path)
        print("对比结果已保存到:", output_image_path)
    
    # 调用函数并处理文本
    original_lines, modified_lines = split_text(original_text, modified_text)
    diff_lines = compare_lines(original_lines, modified_lines)
    highlight_diff(original_lines, modified_lines, diff_lines)
    

    这段代码会将原始文本和修改后的文本进行比较,不同之处在生成的图片中以红色显示。你需要替换font_pathoutput_image_path变量中的路径,使其指向正确的字体文件和输出图片的保存位置。

    运行此脚本后,会在指定的输出目录下生成一个名为comparison.png的图片,显示原文与修改文的对比情况,不同之处以红色突出显示。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月23日

悬赏问题

  • ¥20 ic卡dump文件校检码解密
  • ¥15 关于:接收到的数据不是有效的JSON格式
  • ¥15 apdl语言如何增加受力分析
  • ¥15 算法对比:学校优化算法与蚁群算法对比
  • ¥15 机电一体化系统设计说明书
  • ¥20 sgy数据提取地震波速,有人能回答吗小馋
  • ¥20 c#实现打开word的功能,并且需要安装成windows服务,word打不开怎么办
  • ¥15 python用ARIMA时间预测模型预测数据出错,急!
  • ¥30 为什么后端传给前端vue的河流json数据不在地图中显示出来
  • ¥50 关于弹性波动方程求解的问题: