# blind-watermark **Repository Path**: ytfrdfiw/blind-watermark ## Basic Information - **Project Name**: blind-watermark - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-26 - **Last Updated**: 2024-07-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # blind-watermark 盲水印demo BlindWaterMark project for Spring Boot ## build ``` mvn clean package -Dmaven.test.skip=true ``` ## run ``` java -jar target\blind-watermark-0.0.1-SNAPSHOT.jar ``` ## test ```bash # 对图片添加文字水印 curl -X POST \ http://localhost:8080/water-mark/encode \ -H 'Cache-Control: no-cache' \ -H 'Postman-Token: 3cedf70b-4285-41dd-8893-c3ff2725251e' \ -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \ -F 'image=@D:\app\opencv\srcImg.png' \ -F isText=true \ -F 'text=pretty girl' ``` ```bash # 获取已加水印文件的文字水印 curl -X POST \ http://localhost:8080/water-mark/decode/text \ -H 'Cache-Control: no-cache' \ -H 'Postman-Token: 95d4667c-fc0e-4a9c-a6ae-46a223dd9bd8' \ -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \ -F 'wmImg=@D:\outPutImg\text_1543460862880_srcImg.png' ``` ## 踩坑记 ### 直接在官方下载opencv并练习使用 [下载opencv](https://opencv.org/releases.html) 下载后拷贝其中的java文件夹 ```bash # 将jar包安装到本地仓库 然后在pom.xml中引入 mvn install:install-file -Dfile=opencv-344.jar -DgroupId=cn.com.demo -DartifactId=opencv -Dversion=3.4.4 -Dpackaging=jar ``` 执行代码时需要添加jvm参数 `-Djava.library.path=D:/app/opencv/java/x64` 将opencv的dll文件引入到jvm 这种方式只直接使用javacv的官方java类库来实现,但苦于没有`盲水印` 相关的演示代码,而我对opencv技术是一脸懵逼,最后进行了很多尝试也没有成功。 ### 参考ww23同学的代码实现: maven的坑 ww23同学的代码见 [ww23/BlindWatermark](https://github.com/ww23/BlindWatermark),但他的代码是采用Gradle构建的,我也一度以为用Maven构建也一样,完全没问题,可现实就直接打脸了。 按照其代码,引入maven依赖 ```xml org.bytedeco.javacpp-presets opencv 3.4.3-1.4.3 ``` 编译通过,但是一运行就报错,说是找到jni模块。我也联系了ww23同学,他给我提供了一些帮助,最终虽然解决了问题,能成功运行,但是我依然不知道,是什么原因导致的报错。他给的方法是修改依赖为 ```xml org.bytedeco javacv-platform 1.4.2 ``` 后来我通过一个日本朋友的[博客](https://spring-boot-camp.readthedocs.io/ja/latest/02-OpenCV.html)发现了问题所在: 原因出在maven上。 `org.bytedeco.javacpp-presets:opencv`并不是通过一个独立的jar包来实现各个平台的opencv,而是各个平台分别有不同的实现。 maven中在“三围”的基础上增加第四维`classifier` 来指定这个属性。正确的引入`org.bytedeco.javacpp-presets:opencv`的方法如下 ```xml org.bytedeco.javacpp-presets opencv 3.4.3-1.4.3 org.bytedeco.javacpp-presets opencv 3.4.3-1.4.3 windows-x86_64 ``` 通过这件事,我发现我对maven的认知还存在很大的不足,我之前写过一篇文章分析过maven的`scope`和`option`的用法:[Maven中Scope和Optional的用法](http://www.javawa.top/posts/a8f3da/) ,看来我有必要补充下`classifier`的用法。 ## todo 1. 目前我在调试代码时,发现添加中文水印,解出来后都是??? * 可以判断含中文时就将文字使用java2D技术生成图片,然后按照图片水印添加,但是解密时需要原图 * 可以转化成拼音添加 2. ~~我在运行添加图片水印时可以正常运行,但是解水印时报错,还没看出来什么原因。~~ 问题已解决[commit 68996e](https://github.com/aaronwong1989/blind-watermark/commit/68996e) 3. 我发现不是所有格式的图片添加了水印后,解码后都可以看得出来,不知道是对图片有要求还是对图片格式有要求,有待印证。