From fa466d2dfc0debe9a0c216d036a8771a4147a994 Mon Sep 17 00:00:00 2001 From: xamidev Date: Wed, 14 Jan 2026 21:18:15 +0100 Subject: [PATCH] first commit --- .gitignore | 40 +++++++++++++++ README.md | 5 ++ pom.xml | 24 +++++++++ src/main/java/org/example/Main.java | 73 ++++++++++++++++++++++++++++ test.png | Bin 0 -> 3518 bytes 5 files changed, 142 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 pom.xml create mode 100644 src/main/java/org/example/Main.java create mode 100644 test.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..857e263 --- /dev/null +++ b/.gitignore @@ -0,0 +1,40 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ +.kotlin + +### IntelliJ IDEA ### +.idea +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store diff --git a/README.md b/README.md new file mode 100644 index 0000000..69ac3d3 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# librewatmark (work in progress) + +Tool to put a watermark on sensitive documents. Useful to mitigate identity theft etc. +Some services for this already exist on the Web, but then you have to trust them. Here the program runs on your machine, offline. +Using the ImageJ library. diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..55d8067 --- /dev/null +++ b/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + org.example + librewatermark + 1.0-SNAPSHOT + + + 17 + 17 + UTF-8 + + + + net.imagej + ij + 1.51h + + + + \ No newline at end of file diff --git a/src/main/java/org/example/Main.java b/src/main/java/org/example/Main.java new file mode 100644 index 0000000..8c4f635 --- /dev/null +++ b/src/main/java/org/example/Main.java @@ -0,0 +1,73 @@ +package org.example; + +import ij.IJ; +import ij.ImagePlus; +import ij.process.ImageProcessor; + +import java.awt.*; +import java.io.File; + +/* +TODO: +- Parse properly the CLI arguments +- Add error handling +- Write many lines with an angle +- Write for any image (format & responsiveness) +- optional: Export to PDF? + */ + +public class Main { + public static void main(String[] args) { + + if (args.length == 0) + { + System.out.println("Usage: java -jar watermark.jar -s [-o ]"); + System.exit(0); + } + + File f = null; + + for (int i=0; ijiWd<%mqiM1CRCL5l}!gxtI|3& zt!>FVypzyYRL;lEhs~NClMaaQnUUSSzH9&c{`#)#nd_SO{@thde(v9Wzo#7SZ5Yxj z(f|O4?Y1qu06=j7kRBQeC8b4nMerff-^$9-*2;<#dML!#KhOt&m1!|)<#tt$3e^ry zH#D7-BA8*195Z!Jo~G&EleW%f9!zji-{C$**{Sj`mXeL|UQbW0SF^BskE@icC36Oh zFJ`W=R$4V)k@H-$hMxMquk5JoXtxyY%(}+>LU#6`vwr%?g@8CnHhjPx1t2`c+v z1FbyN)2pU&0A9?Z&~1AT1E8xV{vlB}%p;&sD%^IbwUh{vRX{;%!Hq#EQVzG~g(( zxdvnx1n41v#uXn9AwD=D!2?hk@tFtyH;j8#RSy}C`B+vso)r_-5gl|~$K`V7Vb-d{ zYktLnRsP88wH#twh|YEy8n+?uAr7hx2Gcz)@HBUADw+N2b)h^7O&NL2gsG3D7$})%%*xBkb$iAg%?49HIf@RiTS{ zF=3E>L;cBBfQem+2;+kE5~-m;y8|Oqd`ikxZyO-DDYI;79Kxiy*90NA?NNkj#)J{j zX#eRdDiZ@1_%K_|6bBoRqZ}ev@2sW;o@tCQu_mRYFF1t#1$Y6Xpc`-tS zN)w#Z0%(3k&o&Z5g#lI~wW>63eWHm7AQ4N*7I?FgS}b(<3E>bT`dKUJa1y3RbXvk3 zN8vwsCR&s6DtXD@jU+&3mu)1I*-%a=C9RZnKqt$@5rOUzY6>h?<_ocdueVy@2s~P_ za4Xh9tFhnYBrX86XVLwWNhBy2yPwyBL+I2IS-Qk6lx8n+y=I9c(Bb?^>^0*4*;O2Z zaO|Q|#jg|PQvA%d_?bHuw+JpH>o>h`_9*K*;tX^!8L!o$s%&xwa{}HzIYTXhYJtnS z+P_+DK;vF}o!1D^lwrEKh8N9DgUVse{fs0%oFXT~A)a=A#SoWUlHToFXFqrkn-DTv zQA(1na?pJhA=JK7WgJgMmbcFs#zXKf8Q#N%Wo~g)o-{ij1qj4Jz+Gs8w;_4f)Icv=s z{wLH;cPKb~I#VJWG8<1BDl=-8wO0uQ$nr4$8Xt$9bskL2fIUeew=L3j=NC9jt>6$T z0=}X;6KfbvF=BkTBT1V>^al&R%Y)wgu8a<0Hd-8_K3c`?caJQQFl3T~v|tQf)>o6x z&{d-1&q7gN1-Gc#cVKS#M#VArflvLHyYu&DY?a`1M;%`D)Hv9w`}Zegoti?u#~Q!& zeeoe_`LKCQ#Rcn4rBf(NAQvbV8MXLY1;I5vVc2?cZAev{3 zEjeZrUoN|$B)~IugSID~n~Deg_tGLdO)zm&u>Lgc7_rrg=j*qQjT3*Zzo!Z z-3c@}^1;qe-^UMQA=R)=TPKW%rd6vc^?mX`9UgxzrzWWItn3m;r)rg3EYGW}Kax|{ zWX$JxQ8$^yO;-r6(-r!caPJ&Zu!}_KZM3W5WR3gNokI!D`z&z7s6tRVJ>+~w$t4(p z<(!CI0C>0qZA|%2K?{oJ3sJY_gq^!*H-*gOHy3;HkwfEWOjO1TR3VqHDjUVY3BYji z0MNlCg^3+BHnC4^R?0SeN#F2LVdO)~+p5NQVfWtMgZ-=>{K*n(YgZVY9$oGh3ETD; z7Pf221N1Z1AOROR_$M1qrS*_(k=S6L7qXvtnYokmG-gpK(p{Dkv33`YTyU^ly%kRV;8} zCv8F9ms!|_O7}KEM%xe`=48f_om;8~VYRzE9VCbR^^)hv_$M?n{WD}2=qFP=I zvMV5ZvB{G!d6CHo`v7vwZf}1`wa+ZNzx9u$I{Y_>rbT(9@>i=+9Zb6N)W<*Wfk$_$ z&9I5$?9{jU|xPbA|15fm6Tqmg#_uO|`Gs4AbQ^hx7YxUeTp+S#X1>n zzLJ6+No_s)G8R3^Lj=@V@~%^xBaJ5c+bsdw?E+LQNEg=nIz77rix7U05}8zY-qe97#l z3%sBfZ_Us}mrAzpOK|bf9iMD`7T?*i!v?>oNi^6^@72=_{?@_j1BHFskQaFkE0e-p+;9YYY)a>XH#1q^y)1IV zk!-6DsI{Two%}z2SV~y&8TgBr67tPc=>HZw|6Y%5qLut+xTynv)&pB>`z?i=vH1T0 DdRZ1z literal 0 HcmV?d00001