移除IconFinder网站图标水印
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