AndroidWM

download.svgAndroidWM.svg?branch=master7f8e55520309410a95f71b54cfe8c381

progress-developing-yellow.svgwiki-chinese-blue.svg

一个轻量级的 Android 图片水印框架,支持隐形数字水印。 English version

logo.svg

下载与安装

Gradle

下载完整版本水印框架,支持隐形数字水印 (包大小: 1Mb):

implementation 'com.huangyz0918:androidwm:0.2.3'

下载轻量级版本,只支持可见图像水印 (包大小: 28Kb):

implementation 'com.huangyz0918:androidwm-light:0.1.2'

快速入门

新建一个水印图片

在下载并且配置好 androidwm 之后,你可以创建一个 WatermarkImage 或者是 WatermarkText 的实例,并且使用内置的诸多Set方法为创建一个水印做好准备。

WatermarkText watermarkText = new WatermarkText(editText)

.setPositionX(0.5)

.setPositionY(0.5)

.setTextColor(Color.WHITE)

.setTextFont(R.font.champagne)

.setTextShadow(0.1f, 5, 5, Color.BLUE)

.setTextAlpha(150)

.setRotation(30)

.setTextSize(20);

对于具体定制一个文字水印或者是图片水印, 我们在接下来的文档中会仔细介绍。

当你的水印(文字或图片水印)已经准备就绪的时候,你需要一个 WatermarkBuilder来把水印画到你希望的背景图片上。 你可以通过 create 方法获取一个 WatermarkBuilder 的实例,注意,在创建这个实例的时候你需要先传入一个 Bitmap 或者是一个 Drawable 的资源 id 来获取背景图。

WatermarkBuilder

.create(context, backgroundBitmap)

.loadWatermarkText(watermarkText) // use .loadWatermarkImage(watermarkImage) to load an image.

.getWatermark()

.setToImageView(imageView);

f862270f863d2d3df7ab2e2932e7fd14.png

选择绘制模式

你可以在 WatermarkBuilder.setTileMode() 中选择是否使用铺满整图模式,默认情况下我们只会添加一个水印。

WatermarkBuilder

.create(this, backgroundBitmap)

.loadWatermarkText(watermarkText)

.setTileMode(true) // select different drawing mode.

.getWatermark()

.setToImageView(backgroundView);

咚! 带水印的图片已经绘制好啦:

f1d8d5af2e369fc6363a3608ebba413f.png

获取输出图片

你可以在 WatermarkBuilder 中同时加载文字水印和图片水印。 如果你想在绘制完成之后获得带水印的结果图片,可以使用 Watermark 的 .getOutputImage() 方法:

Bitmap bitmap = WatermarkBuilder

.create(this, backgroundBitmap)

.getWatermark()

.getOutputImage();

创建多个水印

你还可以一次性添加多个水印图片,通过创建一个WatermarkText 的列表 List<> 并且在水印构建器的方法 .loadWatermarkTexts(watermarkTexts)中把列表传入进去(图片类型水印同理):

WatermarkBuilder

.create(this, backgroundBitmap)

.loadWatermarkTexts(watermarkTexts)

.loadWatermarkImages(watermarkImages)

.getWatermark();

加载资源

你还可以从系统的控件和资源中装载图片或者是文字资源,从而创建一个水印对象:

WatermarkText watermarkText = new WatermarkText(editText); // for a text from EditText.

WatermarkText watermarkText = new WatermarkText(textView); // for a text from TextView.

WatermarkImage watermarkImage = new WatermarkImage(imageView); // for an image from ImageView.

WatermarkImage watermarkImage = new WatermarkImage(this, R.drawable.image); // for an image from Resource.

WatermarkBuilder里面的背景图片同样可以从系统资源或者是 ImageView 中装载:

WatermarkBuilder

.create(this, backgroundImageView) // .create(this, R.drawable.background)

.getWatermark()

如果在水印构建器中你既没有加载文字水印也没有加载图片水印,那么处理过后的图片将保持原样,毕竟你啥也没干 :)

隐形水印 (测试版)

androidwm 支持两种模式的隐形水印:

空域 LSB 水印

频域叠加水印

你可以通过WatermarkBuilder 直接构造一个隐形水印,为了选择不同的隐形方式,可以使用布尔参数 isLSB 来区分它们 (注:频域水印仍在开发中),而想要获取到构建成功的水印图片,你需要添加一个监听器:

WatermarkBuilder

.create(this, backgroundBitmap)

.loadWatermarkImage(watermarkBitmap)

.setInvisibleWMListener(true, new BuildFinishListener() {

@Override

public void onSuccess(Bitmap object) {

if (object != null) {

// do something...

}

}

@Override

public void onFailure(String message) {

// do something...

}

});

同理,检测隐形水印可以使用类WatermarkDetector,通过一个create方法获取到实例,同时传进去一张加过水印的图片。.create方法的第一个布尔参数是水印的种类(isLSB),这决定了可检测水印的种类。

WatermarkDetector

.create(inputBitmap, true)

.detect(false, new DetectFinishListener() {

@Override

public void onSuccess(DetectionReturnValue returnValue) {

Bitmap watermarkImage = returnValue.getWatermarkBitmap();

String watermarkString = returnValue.getWatermarkString();

}

@Override

public void onFailure(String message) {

// do something...

}

});

LSB 隐形空域水印 Demo 动态图:

cac08f98111461cd4cbd5a760e800b29.gif

e6d90ef0d3e5d58e653083654eb71b07.gif

隐形文字水印 (LSB)

隐形图像水印 (LSB)

好啦!请尽情使用吧

571906b0b91fd8e5f03804cd5c493112.png 关于具体的用法和原理介绍,可以查看 Wiki

开源许可

Copyright 2018 Yizheng Huang

Licensed under the Apache License, Version 2.0 (the "License");

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an "AS IS" BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐