☰
原创图片被抄袭?用哈希指纹和感知哈希技术高效取证维权
2026/10/29 7:41:00 网站建设 项目流程

如果只是被口头道歉,图片却还在各平台继续传播,问题就远没有结束。对画图的人、做设计的开发者、做独立产品的团队来说,原创表情、插画、界面素材被临摹或直接抄走,其实不是一个小概率事件。更麻烦的是,道歉只能处理“人和人之间的关系”,处理不了“图片已经扩散”这个事实。

这篇文章不讨论情绪,也不指责任何人,只讨论一个更实际的问题:创作者在作品被抄袭、被临摹之后,如何用技术手段取证、追踪、证明原创身份,并在对方道歉但图片仍在传播的情况下,做一套可执行的下架与止损流程。

我会把这件事拆成几个工程问题来看:

  • 怎么证明“这张图是我的”;
  • 怎么判断“对方那张图和我的图有多像”;
  • 怎么追踪图片的去向和传播节点;
  • 怎么通过平台机制和合规手段要求停止传播;
  • 以后怎么用工程化手段减少被抄袭的概率。

如果你也是用 AI 绘画、手绘、矢量图或表情包参与内容创作的技术人,这篇文章可以当成一份“数字原创资产保护参考手册”收藏备用。

1. 这篇文章真正要解决的问题

先说一个容易被忽视的事实:很多创作者在被抄袭后的第一反应是“找对方理论”,却忽略了更重要的事情——保存证据、固定传播范围、准备下架依据。

从技术角度看,抄袭事件发生之后,创作者其实面临三个问题:

  1. 取证难。原创作品如果没有保留过程稿、源文件或时间戳,很难向平台证明“原图是我先发布的”。
  2. 扩散快。一张表情包被临摹后,会通过聊天软件、社交平台、图片素材站继续传播,原创者可能根本不知道被转到了哪里。
  3. 下架慢。平台处理投诉需要审核,如果提交的证明材料不足,图片会在投诉期间继续被浏览、下载、二次传播。

所以,这篇文章真正想解决的不是“怎么让对方认错”,而是“怎么让对方停止侵权传播”。道歉解决的是态度问题,图片继续传播解决的是授权问题。即便对方道了歉,只要没有获得你的授权,继续传播未经许可的衍生作品仍然不是一个可以被默认接受的状态。

对开发者和设计师来说,这个问题的本质又不太一样:你需要把“维权”从感性诉求变成一条可执行的技术路径。先用哈希指纹固定证据,再用感知哈希锁定相似图片,再用反向搜索追踪传播节点,最后按平台规则提交下架请求。整个流程可以做成标准操作流程,以后遇到同类问题直接按步骤执行。

2. 基础概念:版权边界、二次创作与数字传播规律

要正确处理这类问题,先要分清几个容易混淆的概念。

2.1 原创与临摹的关系

原创作品从完成那一刻起,创作者天然享有著作权相关权利。临摹如果只是学习、练习、自己欣赏,通常属于合理使用范畴;但把它发布到公开平台、传播、商用或者宣称是原创,性质就变了,涉及对复制权、信息网络传播权、署名权等权益的侵犯。

“临摹”和“抄袭”之间不是看画得像不像,而是看是否实质性表达了原作的独创性内容。对技术人来说,可以用相似度来类比:一段代码如果只改变量名,结构、逻辑、注释都一致,那它是否属于复制,不需要专家也能判断。

2.2 道歉不代表获得授权

这是很多创作者容易混淆的地方。

对方道歉,说明对方承认行为不当,但不等于双方签署了许可协议。没有明确的授权,原作者的图片不应该继续被传播、修改、商用或二次发布。

在实际操作中,比较稳妥的做法是:如果对方已经道歉,但并未删除相关图片,你可以根据传播平台选择投诉方式,要求下架侵权内容,而不是默认对方道歉后自动获得了继续传播的权利。

2.3 数字图片的传播规律

数字图片有几个特征,导致它一旦发出去就很难完全收回:

  • 复制成本为零;
  • 二次修改成本低;
  • 传播链不可受控;
  • 平台之间存在时间差;
  • 截图和下载不受原作者控制。

这决定了我们不可能“删除互联网上的所有副本”,只能选择止损思路:找到主要传播节点,按平台规则申诉下架,降低公开曝光,减少后续传播。

2.4 两个核心概念:哈希与感知哈希

下面会用到两个关键概念:

  • 哈希(Hash):把一段数据映射成固定长度的字符串,同一张图片算出来的哈希值是固定的。只要图片内容完全一致,MD5、SHA-256 等哈希值就完全相同。
  • 感知哈希(Perceptual Hash):用于比较图片“看起来像不像”。它会忽略图片尺寸、清晰度、压缩比例等变化,提取图片的视觉特征,如果两张图的感知哈希值接近,说明它们视觉上相似。

有了这两个工具,取证和比对就有了一条清晰的技术路线:

原始图片 → 计算精确哈希 + 感知哈希 被抄袭图片 → 计算相似度 → 判断是否构成近似复制

3. 图片溯源与取证:从源文件到哈希指纹

取证的第一原则是:永远不要只保留一张“被压缩过的最终图片”。

如果你只给出了 JPG 或 PNG,别人可以说这张图是从某个群聊里转出来的,也可以说自己是撞灵感了。但如果你能提供完整的过程稿、图层文件、源文件、时间戳、发布记录,证据链就会完整得多。

3.1 保留源文件与过程稿

建议每个原创图片项目都保留以下内容:

  • 原始设计文件(PSD、AI、Procreate 文件、矢量源文件);
  • 导出前的图层截图;
  • 草图、线稿、配色过程;
  • Git 或网盘的提交记录;
  • 首次发布的时间、平台、链接。

这些内容不需要全部展示给平台,但能在关键时候证明创作过程。

3.2 查看并写入 EXIF 信息

如果你用 Photoshop、Illustrator、Procreate 或相机制作图片,导出后的图片通常会包含 EXIF 信息,里面记录拍摄设备、软件、时间、地点等元数据。不过很多社交平台会压缩并清除 EXIF,所以它只能作为辅助证据,不能作为唯一证据。

查看 EXIF 可以用 exiftool 命令。

# 查看单张图片的 EXIF 信息 exiftool original.png # 查看图片是否包含 GPS 信息 exiftool -GPS* original.png # 去除或覆盖 EXIF 信息后再导出一份用于网络传播 exiftool -all= -o clean.png original.png

需要说明的是:-all=会删除元数据,-o表示输出到新文件,这样不会破坏原始文件。

3.3 计算精确哈希与感知哈希

哈希值的作用是给图片发一张“数字身份证”。

MD5 原始图片 → md5值 SHA-256 原始图片 → sha256值

推荐优先使用 SHA-256,它的碰撞概率和安全性要好于 MD5。命令行如下:

# 计算图片的 SHA-256 sha256sum original.png # 计算图片的 MD5 md5sum original.png

注意,精确哈希只适合判断“是不是同一个文件”。如果对方把图片稍微裁剪、调色、加字、改格式,MD5 和 SHA-256 就失效了,这时候需要用感知哈希。

# 如果系统支持 Python,可以直接跳转到下一节 # 先确认 Python 和 pip 是否可用 python3 --version pip3 --version

有了以上基础,你就完成了一个最重要的动作:把“我觉得他抄我”变成“两张图的哈希指纹具备可验证关系”。

4. 用 Python 实现图片相似度比对与重复检测

感知哈希在 Python 里实现成本很低,常用的库是imagehash和Pillow。下面提供一个最小可用的完整方案。

4.1 环境准备

建议使用 Python 3.9 及以上版本,安装两个依赖库。

pip3 install pillow imagehash

如果网络环境比较特殊,可以用国内镜像源安装。

pip3 install pillow imagehash -i https://pypi.tuna.tsinghua.edu.cn/simple

4.2 单张图片相似度比对脚本

下面的代码会计算两张图片的感知哈希,并输出汉明距离。汉明距离越小,图片越相似。一般经验是:

  • 距离为 0:图片视觉上几乎一致;
  • 距离小于 5:大概率是同一张图的不同压缩版本或轻微二次创作;
  • 距离小于 10:构图上强相似,需要人工判断;
  • 距离大于 10:视觉差异较大,但仍可能是部分区域的重构图。
# 文件路径:similarity.py from PIL import Image import imagehash def compare_images(img1_path, img2_path, hash_size=8): """比较两张图片的感知哈希相似度""" img1 = Image.open(img1_path) img2 = Image.open(img2_path) hash1 = imagehash.phash(img1, hash_size) hash2 = imagehash.phash(img2, hash_size) distance = hash1 - hash2 print(f"图片1: {img1_path}") print(f"图片2: {img2_path}") print(f"感知哈希1: {hash1}") print(f"感知哈希2: {hash2}") print(f"汉明距离: {distance}") if distance == 0: print("结论: 视觉上几乎无差异") elif distance <= 5: print("结论: 强相似,可能是同源图片的压缩或轻微修改版本") elif distance <= 10: print("结论: 构图高度相似,建议人工比对") else: print("结论: 差异较大,但需结合构图和局部区域判断") if __name__ == "__main__": compare_images("original.png", "suspect.png")

运行方式:

python3 similarity.py

这段代码只用了两个核心函数:imagehash.phash()计算感知哈希,hash1 - hash2计算汉明距离。不需要训练模型,不需要 GPU,也不用联网。

4.3 批量扫描目录,找出所有相似图片

如果被抄袭的图片不止一张,或者你需要在自己电脑上建立一个“作品图库”来监测相似文件,可以用下面的脚本扫描整个目录。

# 文件路径:scan_similar.py import os import sys from PIL import Image import imagehash def scan_images(folder, target_hash, threshold=10): """遍历文件夹,找出与目标感知哈希距离小于 threshold 的图片""" results = [] extensions = (".png", ".jpg", ".jpeg", ".webp", ".bmp", ".gif") for root, dirs, files in os.walk(folder): for name in files: if not name.lower().endswith(extensions): continue path = os.path.join(root, name) try: img = Image.open(path) ph = imagehash.phash(img) distance = ph - target_hash if distance <= threshold: results.append((path, distance)) except Exception as e: print(f"跳过文件: {path}, 错误: {e}") return results if __name__ == "__main__": if len(sys.argv) < 2: print("用法: python3 scan_similar.py <目标图片路径> [扫描目录]") sys.exit(1) target_path = sys.argv[1] folder = sys.argv[2] if len(sys.argv) > 2 else "." target_hash = imagehash.phash(Image.open(target_path)) print(f"目标图片: {target_path}") print(f"目标感知哈希: {target_hash}") print(f"扫描目录: {folder}") print("---") results = scan_images(folder, target_hash) if not results: print("没有发现相似图片。") else: results.sort(key=lambda x: x[1]) for path, distance in results: print(f"疑似相似: {path} 距离: {distance}")

使用方式:

python3 scan_similar.py original.png /path/to/image/folder

这个脚本会在指定目录里递归扫描所有常见图片格式,并与目标图片做感知哈希比对。如果对方给你的是一整个素材包,或者你想检查自己电脑里是否有多个版本,都可以直接使用。

4.4 把比对结果整理成报告

在正式投诉时,你通常需要一份清晰的比对方便平台审核。可以用一个简单脚本把结果输出成 HTML 或 Markdown 报告。

# 文件路径:generate_report.py from datetime import datetime def render_markdown_report(original_path, suspect_path, distance, desc=""): report = f"""# 图片相似度比对报告 - 生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} - 原始图片: {original_path} - 疑似图片: {suspect_path} - 感知哈希距离: {distance} - 结论: {desc} ## 说明 本报告由图像感知哈希算法生成,用于辅助人工判断。 """ with open("相似度比对报告.md", "w", encoding="utf-8") as f: f.write(report) print("报告已生成: 相似度比对报告.md") if __name__ == "__main__": # 以距离 3 为例,作为同一图片不同版本的判断依据 render_markdown_report("original.png", "suspect.png", 3, "强相似,疑似同源图片")

这个报告虽然简单,但它把“机器比对结果”固定下来了。如果后续需要提交给平台或者律师,它能够作为一份辅助材料被参考。

4.5 运行效果与验证方式

运行similarity.py后,预期输出大致如下:

图片1: original.png 图片2: suspect.png 感知哈希1: 1f1e1f0e0e1e1f1e 感知哈希2: 1f1e1f0e0e1e1f1e 汉明距离: 0 结论: 视觉上几乎无差异

如果距离为 0,说明两张图视觉上基本相同。如果距离为 2 到 5,说明对方可能对图片做了裁剪、调色、加滤镜或重新压缩,但核心内容仍然很接近。

如果脚本报错ModuleNotFoundError: No module named 'imagehash',说明依赖没安装成功,先执行安装命令再试。

5. 传播链追踪与下架处理流程

完成取证后,下一步是把图片从公开传播渠道撤下来。这个过程可以分成四步走。

5.1 用反向图片搜索定位主要传播节点

反向图片搜索适合查找“谁在公开平台传了我的图”。可以使用搜索引擎的图片搜索入口,也可以使用识图类工具。

操作方法:

  • 拿原始图片上传到图片搜索入口;
  • 查看搜索结果中与本图相似或完全一致的站点;
  • 记录出现图片的网址、发布时间、发布者账号;
  • 优先处理高流量平台的传播节点。

这一轮的目标不是“把所有链接都找全”,而是“找到影响最大的几个节点”。

5.2 按平台规则提交侵权投诉

大部分内容平台都提供侵权投诉入口。虽然每个平台的表单字段略有不同,但通用的信息是:

  • 投诉人身份证明;
  • 原始图片首次发布的证据;
  • 原始文件或过程稿;
  • 被投诉内容的网址;
  • 被投诉内容与原始图片的对比说明;
  • 投诉诉求,例如要求下架或删除。

提交投诉前,建议把前面生成的比对报告、截图、哈希值、源文件列表整理成一个压缩包。材料越多,平台审核通过的概率越高。

需要特别注意的是:不要批量恶意投诉与本次事件无关的内容。投诉权利应当限定在确实侵犯了你的作品权利范围内,否则可能对他人造成不必要的困扰,也影响自己后续投诉的可信度。

5.3 向疑似抄图方发送正式停止传播通知

如果对方已经道歉但并没有删除图片,比较正式的做法是发送一份“停止传播通知”。内容可以参考下面这个模板:

主题:关于停止传播与我原创作品相似图片的通知 你好: 我是图片《XXX》的原创作者,该作品于【日期】首发于【平台/链接】。 经比对,你在【平台/账号】中发布的图片与我的原创作品在构图、元素和 核心表现上高度相似,感知哈希距离为【数值】。 我已经对原始文件、过程稿和发布记录做了证据固定。 请你于收到本通知后【3】个工作日内: 1. 删除或下架相关图片; 2. 停止在任何平台继续传播; 3. 如需要继续使用,请与我联系获得书面授权。 否则我将按平台规则和合规途径继续处理。 【姓名/昵称】 【日期】

这个通知不是用来吵架的,它的作用是给双方一个明确的权利边界:道歉是态度,删除和下架是行动。如果对方不执行,你后续提交平台投诉时也有沟通记录作为佐证。

5.4 必要时的法律途径

如果图片已经被商用,或者传播范围很广,并且对方拒绝下架,可以考虑咨询专业律师或机构,通过正式法律程序维护权利。这一部分不建议自己凭感觉操作,因为版权纠纷涉及管辖法院、证据规则、赔偿计算等实际问题。

一个比较稳健的判断是:优先用材料充分、流程清晰、成本低的平台投诉机制,只有在对方持续侵权、传播范围大或者涉及商业利益时,才进入法律程序。

6. 创作者常见问题与排查方法

很多创作者在实操过程中会遇到各种奇怪的现象,下面按常见问题整理了一个排查表。

问题现象可能原因排查方式解决方案
两张图肉眼很像,但哈希距离很大对方旋转了角度、镜像翻转或做了局部重绘换用颜色哈希、DCT 哈希,或人工比对局部元素保存截图并记录人工比对结论,不依赖单一算法
图片经过社交平台压缩后与原图哈希不一致平台会重新压缩图片把原图也压一版,再做感知哈希比对不要把精确哈希作为唯一判断,以感知哈希为准
在平台找不到投诉入口不同平台入口位置不同搜索“平台名 + 侵权投诉”优先使用平台帮助中心的举报入口
对方道歉后不删除图片对方认为道歉已经了事发送停止传播通知,固定沟通记录按平台流程投诉,必要时走法律途径
图片被转发到无主平台传播链不可控使用反向图片搜索找到发布账号先处理高流量平台,再处理长尾平台
投诉被驳回证明材料不足或未选对投诉类型查看驳回原因,补齐首次发布证据增加源文件截图、过程稿、发布时间记录后再申诉

不要因为一次投诉被驳回就放弃。平台审核人员不一定能一眼看出两张图的相似逻辑,你提交的证据越具体,越容易通过。

7. 数字创作资产的最佳实践与工程化管理

与其每次都等出事后再取证,不如一开始就把“创作资产管理”当做一个工程问题来处理。下面这些建议可以直接落地。

7.1 用 Git 或云盘管理源文件的版本历史

如果你平时也写代码,用 Git 管理图片源文件再自然不过。可以建立这样的目录结构:

project/ ├─ designs/ │ ├─ sketches/ # 草图与过程稿 │ ├─ layers/ # 带图层的源文件 │ └─ exports/ # 对外导出的正式图片 ├─ evidence/ # 第一次发布记录、截图、哈希值 ├─ README.md # 项目说明与版权声明 └─ LICENSE # 授权协议

Git 提交记录自带时间戳,能够有效证明“我早就有这个文件”。

git init git add designs/ git commit -m "feat: add original sticker design and layer files" git log --oneline

即使不使用 Git,也应该把源文件、导出文件、首次发布截图分别存好,形成独立的时间线。

7.2 给对外发布的图片加可视化水印与非可视化标记

对外发布时,水印能大幅降低被直接搬运的概率。不过水印也会影响观感,更好的做法是同时加强非可视化标记:

  • 在图片角落放置半透明签名或账号 ID;
  • 在 EXIF 中写入版权信息;
  • 保留图层文件中的隐藏标识;
  • 用 PNG 格式保留更多细节,便于后续哈希比对。

用 Pillow 可以快速添加半透明水印。

# 文件路径:add_watermark.py from PIL import Image, ImageDraw, ImageFont def add_watermark(input_path, output_path, text="by author"): image = Image.open(input_path).convert("RGBA") width, height = image.size overlay = Image.new("RGBA", image.size, (0, 0, 0, 0)) draw = ImageDraw.Draw(overlay) try: font = ImageFont.truetype("/System/Library/Fonts/Supplemental/Arial.ttf", 24) except Exception: font = ImageFont.load_default() # 在右下角添加半透明水印 text_width, text_height = draw.textsize(text, font=font) x = width - text_width - 20 y = height - text_height - 20 draw.text((x, y), text, font=font, fill=(255, 255, 255, 128)) watermarked = Image.alpha_composite(image, overlay) watermarked.convert("RGB").save(output_path, quality=95) print(f"水印图已生成: {output_path}") if __name__ == "__main__": add_watermark("original.png", "published_with_watermark.png", "ID: yourname")

注意,draw.textsize在较新版本的 Pillow 中可能被移除,如果遇到问题,可以用draw.textbbox替代。这段代码的核心思路是在原图上叠加一层半透明文字,不影响主体内容,但能增加搬运者的使用成本。

7.3 保留“首次发布”的独立证据

发布平台的时间线是最有力的证据之一。建议在图片对外发布时,把以下内容固定下来:

  • 发布成功后,立即截图保存页面 URL 和时间;
  • 如果支持,把发布记录导出成 PDF 或长截图;
  • 发布后马上计算一次图片哈希值,并和执行命令的时间一起保存。
sha256sum published_with_watermark.png > sha256.txt date >> sha256.txt

这个记录和 Git 提交记录可以互相印证,形成比较完整的证据链。

7.4 为作品提前准备授权模板

如果不想一张一张谈判,可以提前写好授权模板,注明使用范围、期限、署名要求和商用条件。这样遇到“道歉但继续用图”的情况,你可以直接把授权条款发给对方,让对方明确选择“删除”或“取得授权”,而不是停留在口头上。

一个简单的授权模板可以包含:

  • 授权作品名称和内容;
  • 授权使用平台和范围;
  • 授权期限;
  • 是否允许修改;
  • 是否允许商用;
  • 是否需要署名;
  • 解除授权的情形。

7.5 自动化监测自己的作品

如果是长期做内容创作,建议定期执行一次全量扫描脚本。你可以把第 4 节的脚本做成定时任务,每周对新增素材和本地图片库做一次相似度扫描,发现异常时自动输出报告。

如果是公开发布到网络上的图片,也可以用网络图片搜索定期检查。不过要注意,反向图片搜索并不保证能查到所有平台,它只能覆盖到搜索引擎收录过的图片。对未收录的图片,暂时没有低成本的全网监测方案。

8. 总结与后续行动

回到最初的问题:对方已经道歉,但图片是否还能继续传播?

答案很明确:道歉不是授权,继续传播不等于被默认接受。真正能让创作者安心的是建立一套完整的数字资产管理方法:从源文件保存、哈希取证、感知哈希比对,到传播链追踪、平台投诉和授权管理。每一步都可以用工具和流程固定下来。

这起事件里,最有价值的部分不是情绪对立,而是给所有创作者提了个醒:你的原创作品是一个数字资产,而不是一张“发出去就完了”的图片。下次发布任何原创表情、插画、界面素材之前,先做这三件事:

  1. 用 Git 或其他工具保存好源文件和过程稿;
  2. 发布时保留页面截图和时间记录;
  3. 对外发布版本加上可识别的水印或隐藏标记。

如果已经遇到抄袭,也不要慌。按下面这条路径走一遍:

  • 用 SHA-256 和感知哈希固定证据;
  • 用 Python 批量比对相似图片;
  • 用反向图片搜索找到传播节点;
  • 给平台提交包含原始文件、首次发布记录、比对报告的材料;
  • 必要时发送停止传播通知,把沟通记录固定下来;
  • 若涉及商用或大面积传播,再考虑咨询专业法律人士。

数字世界的图片一旦传播出去,谁也无法保证所有副本都被销毁。但你可以通过技术手段让“原创身份”更清晰,让“侵权传播”更难被合理化,让后续沟通和投诉有据可依。比起纠结于一时的情绪,把这套流程沉淀下来,以后每次发布作品都会更踏实。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询