移除IconFinder网站图标水印

2021-09-03 84浏览

  • 1. 移除IconFinder网站图标水印 子天 在线工具 你的工具箱 https://tool.lu/
  • 2. 目录 • • • 介绍 原理 实现
  • 3. 图标 Iconfinder是一个为数百万创意专业人士提供高质量图标的网站。 是一个小型国际团队,总部设在哥本哈根。 网址:https://www.iconfinder.com/
  • 4. RGBA Red 红 Alpha 不透明度 Green 绿 Blue 蓝
  • 5. 目录 • • • 介绍 原理 实现
  • 6. 不透明度 α 𝟷 𝙸 α 𝟸 𝙸 × (𝟷 − α 𝟷 ) 𝙸 × (𝟷 − α 𝟷 ) × (𝟷 − α 𝟸 )
  • 7. 不透明度 α 𝚝 = 𝟷 − (𝟷 − α 𝚘 )(𝟷 − α 𝚠 ) α 𝚝 = α 𝚘 + α 𝚠 − α 𝚘 α 𝚠 α 𝚝 − α 𝚠 α 𝚘 = 𝟷 − α 𝚠
  • 8. RGB颜色 𝚁 𝚘 × α 𝚘 × (𝟷 − α 𝚠 ) + 𝚁𝚠 × α 𝚠 𝙶 𝚘 × α 𝚘 × (𝟷 − α 𝚠 ) + 𝙶𝚠 × α 𝚠 𝙱 𝚘 × α 𝚘 × (𝟷 − α 𝚠 ) + 𝙱𝚠 × α 𝚠 RGB(212, 31, 59) RGBA(68, 68, 64, 0.06) RGB(203, 33, 59)
  • 9. RGB颜色
  • 10. RGB颜色 𝚁 𝚝 α 𝚝 = 𝚁 𝚘 α 𝚘 (𝟷 − α 𝚠 ) + 𝚁 𝚠 α 𝚠 𝚁 𝚝 α 𝚝 − 𝚁 𝚠 α 𝚠 𝚁 𝚘 = α 𝚘 (𝟷 − α 𝚠 )
  • 11. 水印图制作
  • 12. 还原图标
  • 13. 目录 • • • 介绍 原理 实现
  • 14. Python实现 pip install pillow
  • 15. Python实现 def calc_pixel(input_rgba, watermark_rgba): watermark_red, watermark_green, watermark_blue, watermark_alpha = watermark_rgba if watermark_alpha == 255: return watermark_rgba input_red, input_green, input_blue, input_alpha = input_rgba output_alpha = 255 * (input_alpha - watermark_alpha) / (255 - watermark_alpha) if output_alpha == 0: return 0, 0, 0, 0 output_red = 255 * (input_red * input_alpha - watermark_red * watermark_alpha) / \ ((255 - watermark_alpha) * output_alpha) output_green = 255 * (input_green * input_alpha - watermark_green * watermark_alpha) / \ ((255 - watermark_alpha) * output_alpha) output_blue = 255 * (input_blue * input_alpha - watermark_blue * watermark_alpha) / \ ((255 - watermark_alpha) * output_alpha) return round(output_red), round(output_green), round(output_blue), round(output_alpha)
  • 16. Python实现 def remove_watermark(input_name, watermark_name, output_name): if not os.path.exists(input_name): print("图片不存在") return input_image = Image.open(input_name) watermark_image = Image.open(watermark_name) output_image = Image.new(input_image.mode, input_image.size) w, h = input_image.size for x in range(w): for y in range(h): watermark_rgba = watermark_image.getpixel((x, y)) input_rgba = input_image.getpixel((x, y)) output_rgba = calc_pixel(input_rgba, watermark_rgba) output_image.putpixel((x, y), output_rgba) output_image.save(output_name)
  • 17. Python实现 def output_path_or_default(input_path, output_path): if output_path: return output_path root, ext = os.path.splitext(input_path) return root + ".unmark" + ext if __name__ == "__main__": parser = argparse.ArgumentParser(description = "watermark remover for iconfiner") parser.add_argument("--output", dest = "output", help = "output image") parser.add_argument("input", help = "input image") args = parser.parse_args() output = output_path_or_default(args.input, args.output) remove_watermark(args.input, "watermark.png", output)
  • 18. 演示 DEMO
  • 19. 还原结果 53K 59K
  • 20. 优化结果 pngquant example_output.png 59K PNG图片压缩对比分析 22K
  • 21. Q&A