开源一个打水印的 APP,以防照片被小人泄露、利用 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
rosu
V2EX    分享创造

开源一个打水印的 APP,以防照片被小人泄露、利用

  •  1
     
  •   rosu
    rosuH 2020-09-02 16:06:19 +08:00 8534 次点击
    这是一个创建于 1944 天前的主题,其中的信息可能已经有所发展或是发生改变。

    多年来,我一直保持着对敏感证件复印件签注的习惯。最常用的文案就是:

    仅供 xx 作 xx 之用,他用无效

    尽管现在部分业务办理时,更多地要求生物识别而非静态的复印件或照片,但是许多基础的实名途径,依然只会要求身份证照片 /复印件(有利有弊)。这难免导致自己身份证照片 /复印件被他人冒用的情况发生,进而产生不必要的麻烦。

    资料加签注,有什么好处?

    个人能想到的两点:

    1. 收窄使用途径,降低文件价值

      • 设想下,如果盗用者使用你标注有如下水印的照片:

      本照片仅供阿里云实名认证只用,他用无效

      去提交腾讯云的实名认证,那必定是无法通过人工审核的。

    2. 滥用免责

      • 如果你的照片被他人盗用实名,上面标注有其他用途的水印,那么你是可以免责的。

    数字照片加水印,麻烦吗?

    实不相瞒,有点麻烦。在 Windows 上,我是用的是远古但易用的画图程序。

    画图毕竟是用来画画的,打水印还是显得力不从心:

    • 使用比较麻烦:调节文字大小、颜色、透明度等需要不断点点点
    • 如果要把水印打在多个地方,就需要重复性操作,相当麻烦

    至今我也没有在 Windows 上找到好用的水印软件。

    那么手机上有吗?我所知道的,iOS 上的效率控里面就有水印功能,后来我还发现有些「捷径」利用前端代码实现了打水印的功能,也非常方便。

    可是我用的是 Android 啊! 而 Android 端目前还没有找到相关的 APP 。

    不过微信小程序上倒是非常多这类的水印小程序。

    打水印|小程序

    只是,我对这些应用有一些担忧。最主要的还是隐私的二次泄露问题。我自己不放心把身份证、手持身份证这类照片上传或者提交给这些应用编辑。虽说有些小人之心,但是凡是涉及隐私的我们都该慎重。

    我一直在寻找一款不强求开源,但至少是能离线使用的水印程序。

    如何简单地打水印

    故事的结尾是我并没有找到,所以一怒之下自己写了一款 APP 。就叫简单水印

    我按照自己的要求完成了她,所以她至少是符合:

    • 代码完全开源
      • 如果你愿意的话,完全可以自己编译打包出自己的版本
      • 开源协议基于 MIT,我们也非常欢迎所有人随意使用开源的代码(不包括 UI 等资源文件)
    • 纯离线应用,不请求任何权限。
      • 如果你系统版本低于 Android 10,那么需要请求存储权限以访问相册和写入图片
      • 没有网络权限,就算收集了你的信息,也无法发送出去。何况并没有收集 ;)

    所以安全性上你无须担心。那么功能性上如何呢?

    我当时就念了一首诗

    • 横竖间距均可调节,颜色明暗随心转换
    • 大小角度自由旋转,文字图片皆可打上
    • 水印重复全图铺满,坏蛋除水印有点难

    废话少说,先看东西

    preview.png

    布局

    当前简单水印支持对横竖间隙进行调整:

    布局.gif

    样式

    样式可以调节字体颜色和旋转角度:

    样式.gif

    内容

    内容支持图片水印,你可以加上自己的 logo,或者表情包:

    内容.gif

    那么输出的效果如何呢?

    文字水印输出效果

    简单水印_文字水印_输出.jpg

    图片水印输出效果

    简单水印_图片水印_输出.png

    对图像的编辑都是基于原图进行编辑,不会进行压缩。但是在我的测试中也发现了,在内存不足的手机上无法完全载入原图(测试证实,连微信无法进行原图图像编辑)。针对此种情况,我们也引入了压缩机制,使用 zetbaitsu/Compressor 对原图进行压缩,在肉眼无差别的情况下,缩小照片的体积,以便编辑。

    那么,哪里才可以买到呢?

    那么这么好()的应用,究竟要多少钱呢???

    代码都是开源的,当然不收钱你也可以使用啦!

    目前由开发者主导的渠道有:

    • Github Release:永远保持最新
    • 酷安
    • Google Play
      • 注意:此版本收费,但是代码完全一致,所以如果您愿意请作者喝一杯茶(或者您比较任性),那么请去此下载,否则请选择其他渠道:)
    • F-Droid (已经通过提交审核,正在构建中)

    Android 限定,iOS 目前还没有。嘻嘻

    后记

    在完成了这个 APP 的编写工作后,我突然意识到这个 APP 其实受众可能并不多。因为很多人根本不在意”这点隐私“。

    对别人来说,可能最终都是一个自娱自乐的玩具。但对我而言,这是我对个人隐私保护的一点努力,以及对泄露和滥用者的小小抵抗。

    希望此能抛砖引玉,让更多开发者关注隐私和安全相关的需求,开发出更多降低保护隐私门槛的工具。

    注:如果你喜欢这个项目的话,欢迎提交反馈或贡献代码,或者去点个 star 也是一个支持!谢谢 ~

  • 水印
  • 开源
  • 隐私
  • 照片
    34 条回复    2021-03-01 11:36:38 +08:00
    darmau
        1
    darmau  
       2020-09-02 16:07:40 +08:00
    我觉得更需要一种打隐形水印的产品
    rosu
        2
    rosu  
    OP
       2020-09-02 16:10:01 +08:00
    @darmau 隐形水印无法防止被泄露后被重新利用的问题。因为是隐形的,不影响实名或者其他用途。
    alan0liang
        3
    alan0liang  
       2020-09-02 16:23:28 +08:00 via Android   1
    出了个 bug,导出图片会崩溃,Crash in main: java.lang.NullPointerException: uriString
    at f.a.z1.a$a.run(:48)
    机器:Redmi 7A,MIUI 11.0.6,stack trace 已发邮件
    ffLoveJava
        4
    ffLoveJava  
       2020-09-02 16:48:23 +08:00
    能把核心方法抽出出一个 Java 版的吗?
    rosu
        5
    rosu  
    OP
       2020-09-02 17:16:54 +08:00
    @ffLoveJava 抽出来应该没问题,但是可能会用 Kotlin 来写。Java...没有 Kotlin 香
    ffLoveJava
        6
    ffLoveJava  
       2020-09-02 17:29:32 +08:00
    @rosu 那也好, 建议把处理水印、图片的核心方法单独抽出来, 与 UI 分离
    Whalko
        7
    Whalko  
       2020-09-02 17:31:31 +08:00 viaAndroid   1
    感谢 lz,先送个 star
    grazie
        8
    grazie  
       2020-09-02 21:31:10 +08:00 via Android   2
    F-droid 出镜率在 V2 真的是少之又少
    给 star 了
    pzimao2018
        9
    pzimao2018  
       2020-09-02 22:09:27 +08:00 via Android
    保存的图像很大,原图 6mb,处理后 40+mb
    rosu
        10
    rosu  
    OP
       2020-09-02 22:33:36 +08:00
    @pzimao2018 应该是你的图片尺寸比较大。是不是 5k+ 的尺寸?

    因为打水印的时候需要全图都打上,加上输出的时候没有特别压缩质量。没想到体积增加如此恐怖...不过你可以后期自己再压缩 。

    这块我会再看看能不能调整一下。
    pzimao2018
        11
    pzimao2018  
       2020-09-02 22:47:27 +08:00 via Android   1
    @rosu 我刚才看错了。准确的是 5792*4344 的原图,大小是 15.9mb ,处理后 43mb 。
    q9OxQg
        12
    q9OxQg  
       2020-09-03 05:08:51 +08:00
    看见 Google Play 和 F-Droid,作者算是认真了。
    1daydayde
        13
    1daydayde  
       2020-09-03 08:01:49 +08:00 via iPhone   1
    不错,已 star
    laoyur
        14
    laoyur  
       2020-09-03 08:55:24 +08:00
    已 star,建议加个透明度调节吧,算是标配了
    rosu
        15
    rosu  
    OP
       2020-09-03 09:51:03 +08:00   1
    @laoyur 透明度是有的,图片区域左边,上下滑可以控制透明度哈。
    haoxuexiaoyao
        16
    haoxuexiaoyao  
       2020-09-03 10:11:53 +08:00
    建议增加一个透明度调节,非常使用,数字水印可以加上么,不一定是身份证等敏感信息需要水印,比如自己拍摄的部分图片就适合数字隐藏水印 @rosu 另外透明度调整确实按照说的操作不行
    haoxuexiaoyao
        17
    haoxuexiaoyao  
       2020-09-03 10:12:40 +08:00
    类似这样的数字盲水印可以加入到你的 APP 里面建议 https://github.com/guofei9987/blind_watermark
    laoyur
        18
    laoyur  
       2020-09-03 10:29:49 +08:00   1
    @rosu 嗯,亲测有效,就是隐蔽了
    还有个问题,操作面板就别做响应左右拖动了,因为会跟滑块的拖动混起来,有时拖动滑块的时候稍微没按准,就变成拖动面板了,滑块的响应区域可以放大一些
    zjie
        19
    zjie  
       2020-09-03 17:50:57 +08:00
    真的非常棒,一直有这个需求,但是没时间搞。
    rosu
        20
    rosu  
    OP
       2020-09-04 01:28:37 +08:00   1
    @haoxuexiaoyao @laoyur 新版已经更新,透明度调节加上了!欢迎使用~
    Felephant
        21
    Felephant  
       2020-09-04 16:06:44 +08:00   1
    感谢楼主,已 star
    mitx
        22
    mitx  
       2020-09-04 16:27:27 +08:00
    不错的,期望 IOS
    laoyur
        23
    laoyur  
       2020-09-05 08:42:19 +08:00 via Android
    @rosu 新版已经不错了,赞
    再提一个建议哈,仅仅是建议
    现在的文字分布有个问题,我把水印文字调节到需要的大小后,发现密度不够,于是调节分布,密度满意了,发现文字大小又变小了。所以密度和大小无法两全,比较不舒服。
    laoyur
        24
    laoyur  
       2020-09-05 08:48:15 +08:00 via Android
    接上条
    更正一下,上条说的分布,不是软件里的分布面板,是指的水印在图像上分布的密度

    另外还有一个问题,似乎载入图片后会自动根据长宽比旋转?这个有点不太适应。
    rosu
        25
    rosu  
    OP
       2020-09-05 12:55:20 +08:00
    @laoyur 是的,因为预览和实际图片是有缩放的,而水印预览没有缩放。所以预览和输出效果会有差别。这部分在考虑优化。

    旋转问题是说和相册里的旋转方向不一致是吗?这一块是预览的时候没有读取相片的 EXIF 信息。也在考虑优化中。

    感谢反馈~
    pokon548
        26
    pokon548  
       2020-09-06 09:40:40 +08:00 via Android
    实不相瞒,在遇到这个应用前我一直不知道可以加水印避免盗用。

    感谢楼主。
    pokon548
        27
    pokon548  
       2020-09-06 09:51:37 +08:00 via Android   2
    加个建议。可以考虑把加了水印的图片保存到 Picture/EasyWatermark 这样的子目录中,而不是直接覆盖原文件。

    我自己有在用存储重定向隔离文件,非标准目录的话我需要手动进文件管理器移动一下文件,有点麻烦。
    xiaoyazi
      &bsp; 28
    xiaoyazi  
       2020-09-09 02:23:50 +08:00 via iPhone
    期待 iOS
    brMu
        29
    brMu  
       2020-11-12 14:09:25 +08:00   1
    非常感谢,已经下载了,我是注重隐私的那部分人,我也相信会有越来越多的人关注隐私。
    另外,已经在 github 上 star 了!
    su0818
        30
    su0818  
       2021-01-30 17:47:12 +08:00 via iPhone
    老板考虑增加 iOS 的吗
    rosu
        31
    rosu  
    OP
       2021-01-30 21:38:17 +08:00
    @su0818 #30 你好,暂无此计划(主要是没有 Mac 设备 hhh )
    kelestudio
        32
    kelestudio  
       2021-01-31 08:30:10 +08:00   1
    已 STAR 。好东西。
    olbb
        33
    olbb  
       2021-02-20 10:21:11 +08:00   1
    感谢 已 STAR
    xw
        34
    xw  
       2021-03-01 11:36:38 +08:00   1
    感谢 已 STAR
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5372 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 95ms UTC 06:40 PVG 14:40 LAX 22:40 JFK 01:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86