V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
GeekHub
rosu
V2EX  ›  分享创造

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

  •  
  •   rosu · 25 天前 · 2662 次点击

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

    仅供 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 也是一个支持!谢谢 🙇‍ ~

    28 条回复    2020-09-09 02:23:50 +08:00
    darmau
        1
    darmau   25 天前
    我觉得更需要一种打隐形水印的产品
    rosu
        2
    rosu   25 天前
    @darmau 隐形水印无法防止被泄露后被重新利用的问题。因为是隐形的,不影响实名或者其他用途。
    alan0liang
        3
    alan0liang   25 天前 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   25 天前
    能把核心方法抽出出一个 Java 版的吗?
    rosu
        5
    rosu   25 天前
    @ffLoveJava 抽出来应该没问题,但是可能会用 Kotlin 来写。Java...没有 Kotlin 香😝
    ffLoveJava
        6
    ffLoveJava   25 天前
    @rosu 那也好, 建议把处理水印、图片的核心方法单独抽出来, 与 UI 分离
    Whalko
        7
    Whalko   25 天前 via Android   ❤️ 1
    感谢 lz,先送个 star
    grazie
        8
    grazie   24 天前 via Android   ❤️ 2
    F-droid 出镜率在 V2 真的是少之又少
    给 star 了
    pzimao2018
        9
    pzimao2018   24 天前 via Android
    保存的图像很大,原图 6mb,处理后 40+mb
    rosu
        10
    rosu   24 天前
    @pzimao2018 应该是你的图片尺寸比较大。是不是 5k+ 的尺寸?🤔

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

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

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

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

    感谢反馈~
    pokon548
        26
    pokon548   21 天前 via Android
    实不相瞒,在遇到这个应用前我一直不知道可以加水印避免盗用。

    感谢楼主。
    pokon548
        27
    pokon548   21 天前 via Android   ❤️ 2
    加个建议。可以考虑把加了水印的图片保存到 Picture/EasyWatermark 这样的子目录中,而不是直接覆盖原文件。

    我自己有在用存储重定向隔离文件,非标准目录的话我需要手动进文件管理器移动一下文件,有点麻烦。
    xiaoyazi
        28
    xiaoyazi   18 天前 via iPhone
    期待 iOS
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3830 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:54 · PVG 17:54 · LAX 02:54 · JFK 05:54
    ♥ Do have faith in what you're doing.