Android给图片加文字和图片水印实例代码
发布时间 - 2026-01-11 00:50:47 点击率:次我们在做项目的时候有时候需要给图片添加水印,水寒今天就遇到了这样的问题,所以搞了一个工具类,贴出来大家直接调用就行。
/**
* 图片工具类
* @author 水寒
*
*/
public class ImageUtil {
/**
* 设置水印图片在左上角
* @param Context
* @param src
* @param watermark
* @param paddingLeft
* @param paddingTop
* @return
*/
public static Bitmap createWaterMaskLeftTop(
Context context, Bitmap src, Bitmap watermark,
int paddingLeft, int paddingTop) {
return createWaterMaskBitmap(src, watermark,
dp2px(context, paddingLeft), dp2px(context, paddingTop));
}
private static Bitmap createWaterMaskBitmap(Bitmap src, Bitmap watermark,
int paddingLeft, int paddingTop) {
if (src == null) {
return null;
}
int width = src.getWidth();
int height = src.getHeight();
//创建一个bitmap
Bitmap newb = Bitmap.createBitmap(width, height, Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图
//将该图片作为画布
Canvas canvas = new Canvas(newb);
//在画布 0,0坐标上开始绘制原始图片
canvas.drawBitmap(src, 0, 0, null);
//在画布上绘制水印图片
canvas.drawBitmap(watermark, paddingLeft, paddingTop, null);
// 保存
canvas.save(Canvas.ALL_SAVE_FLAG);
// 存储
canvas.restore();
return newb;
}
/**
* 设置水印图片在右下角
* @param Context
* @param src
* @param watermark
* @param paddingRight
* @param paddingBottom
* @return
*/
public static Bitmap createWaterMaskRightBottom(
Context context, Bitmap src, Bitmap watermark,
int paddingRight, int paddingBottom) {
return createWaterMaskBitmap(src, watermark,
src.getWidth() - watermark.getWidth() - dp2px(context, paddingRight),
src.getHeight() - watermark.getHeight() - dp2px(context, paddingBottom));
}
/**
* 设置水印图片到右上角
* @param Context
* @param src
* @param watermark
* @param paddingRight
* @param paddingTop
* @return
*/
public static Bitmap createWaterMaskRightTop(
Context context, Bitmap src, Bitmap watermark,
int paddingRight, int paddingTop) {
return createWaterMaskBitmap( src, watermark,
src.getWidth() - watermark.getWidth() - dp2px(context, paddingRight),
dp2px(context, paddingTop));
}
/**
* 设置水印图片到左下角
* @param Context
* @param src
* @param watermark
* @param paddingLeft
* @param paddingBottom
* @return
*/
public static Bitmap createWaterMaskLeftBottom(
Context context, Bitmap src, Bitmap watermark,
int paddingLeft, int paddingBottom) {
return createWaterMaskBitmap(src, watermark, dp2px(context, paddingLeft),
src.getHeight() - watermark.getHeight() - dp2px(context, paddingBottom));
}
/**
* 设置水印图片到中间
* @param Context
* @param src
* @param watermark
* @return
*/
public static Bitmap createWaterMaskCenter(Bitmap src, Bitmap watermark) {
return createWaterMaskBitmap(src, watermark,
(src.getWidth() - watermark.getWidth()) / 2,
(src.getHeight() - watermark.getHeight()) / 2);
}
/**
* 给图片添加文字到左上角
* @param context
* @param bitmap
* @param text
* @return
*/
public static Bitmap drawTextToLeftTop(Context context, Bitmap bitmap, String text,
int size, int color, int paddingLeft, int paddingTop) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(color);
paint.setTextSize(dp2px(context, size));
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
return drawTextToBitmap(context, bitmap, text, paint, bounds,
dp2px(context, paddingLeft),
dp2px(context, paddingTop) + bounds.height());
}
/**
* 绘制文字到右下角
* @param context
* @param bitmap
* @param text
* @param size
* @param color
* @param paddingLeft
* @param paddingTop
* @return
*/
public static Bitmap drawTextToRightBottom(Context context, Bitmap bitmap, String text,
int size, int color, int paddingRight, int paddingBottom) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(color);
paint.setTextSize(dp2px(context, size));
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
return drawTextToBitmap(context, bitmap, text, paint, bounds,
bitmap.getWidth() - bounds.width() - dp2px(context, paddingRight),
bitmap.getHeight() - dp2px(context, paddingBottom));
}
/**
* 绘制文字到右上方
* @param context
* @param bitmap
* @param text
* @param size
* @param color
* @param paddingRight
* @param paddingTop
* @return
*/
public static Bitmap drawTextToRightTop(Context context, Bitmap bitmap, String text,
int size, int color, int paddingRight, int paddingTop) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(color);
paint.setTextSize(dp2px(context, size));
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
return drawTextToBitmap(context, bitmap, text, paint, bounds,
bitmap.getWidth() - bounds.width() - dp2px(context, paddingRight),
dp2px(context, paddingTop) + bounds.height());
}
/**
* 绘制文字到左下方
* @param context
* @param bitmap
* @param text
* @param size
* @param color
* @param paddingLeft
* @param paddingBottom
* @return
*/
public static Bitmap drawTextToLeftBottom(Context context, Bitmap bitmap, String text,
int size, int color, int paddingLeft, int paddingBottom) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(color);
paint.setTextSize(dp2px(context, size));
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
return drawTextToBitmap(context, bitmap, text, paint, bounds,
dp2px(context, paddingLeft),
bitmap.getHeight() - dp2px(context, paddingBottom));
}
/**
* 绘制文字到中间
* @param context
* @param bitmap
* @param text
* @param size
* @param color
* @return
*/
public static Bitmap drawTextToCenter(Context context, Bitmap bitmap, String text,
int size, int color) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(color);
paint.setTextSize(dp2px(context, size));
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
return drawTextToBitmap(context, bitmap, text, paint, bounds,
(bitmap.getWidth() - bounds.width()) / 2,
(bitmap.getHeight() + bounds.height()) / 2);
}
//图片上绘制文字
private static Bitmap drawTextToBitmap(Context context, Bitmap bitmap, String text,
Paint paint, Rect bounds, int paddingLeft, int paddingTop) {
android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig();
paint.setDither(true); // 获取跟清晰的图像采样
paint.setFilterBitmap(true);// 过滤一些
if (bitmapConfig == null) {
bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
}
bitmap = bitmap.copy(bitmapConfig, true);
Canvas canvas = new Canvas(bitmap);
canvas.drawText(text, paddingLeft, paddingTop, paint);
return bitmap;
}
/**
* 缩放图片
* @param src
* @param w
* @param h
* @return
*/
public static Bitmap scaleWithWH(Bitmap src, double w, double h) {
if (w == 0 || h == 0 || src == null) {
return src;
} else {
// 记录src的宽高
int width = src.getWidth();
int height = src.getHeight();
// 创建一个matrix容器
Matrix matrix = new Matrix();
// 计算缩放比例
float scaleWidth = (float) (w / width);
float scaleHeight = (float) (h / height);
// 开始缩放
matrix.postScale(scaleWidth, scaleHeight);
// 创建缩放后的图片
return Bitmap.createBitmap(src, 0, 0, width, height, matrix, true);
}
}
/**
* dip转pix
* @param context
* @param dp
* @return
*/
public static int dp2px(Context context, float dp) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dp * scale + 0.5f);
}
}
使用方法如下:
添加一个布局,上面是原始图片,下面是添加水印后的图片
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/sour_pic_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="原图" />
<ImageView
android:id="@+id/sour_pic"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerInside"/>
<TextView
android:id="@+id/watermark_pic_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="水印" />
<ImageView
android:id="@+id/wartermark_pic"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerInside"/>
</LinearLayout>
在Activity中获取到ImageView对象,并且获取Bitmap对象,对Bitmap进行canva绘图,添加水印:
/**
* 图片工具类
* @author 水寒
*
*/
public class MainActivity extends Activity {
private ImageView mSourImage;
private ImageView mWartermarkImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView(){
mSourImage = (ImageView) findViewById(R.id.sour_pic);
mWartermarkImage = (ImageView) findViewById(R.id.wartermark_pic);
Bitmap sourBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sour_pic);
mSourImage.setImageBitmap(sourBitmap);
Bitmap waterBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.weixin);
Bitmap watermarkBitmap = ImageUtil.createWaterMaskCenter(sourBitmap, waterBitmap);
watermarkBitmap = ImageUtil.createWaterMaskLeftBottom(this, watermarkBitmap, waterBitmap, 0, 0);
watermarkBitmap = ImageUtil.createWaterMaskRightBottom(this, watermarkBitmap, waterBitmap, 0, 0);
watermarkBitmap = ImageUtil.createWaterMaskLeftTop(this, watermarkBitmap, waterBitmap, 0, 0);
watermarkBitmap = ImageUtil.createWaterMaskRightTop(this, watermarkBitmap, waterBitmap, 0, 0);
Bitmap textBitmap = ImageUtil.drawTextToLeftTop(this, watermarkBitmap, "左上角", 16, Color.RED, 0, 0);
textBitmap = ImageUtil.drawTextToRightBottom(this, textBitmap, "右下角", 16, Color.RED, 0, 0);
textBitmap = ImageUtil.drawTextToRightTop(this, textBitmap, "右上角", 16, Color.RED, 0, 0);
textBitmap = ImageUtil.drawTextToLeftBottom(this, textBitmap, "左下角", 16, Color.RED, 0, 0);
textBitmap = ImageUtil.drawTextToCenter(this, textBitmap, "中间", 16, Color.RED);
mWartermarkImage.setImageBitmap(textBitmap);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# android
# 图片添加水印
# 图片水印
# 图片加水印
# Android视频处理之动态时间水印效果
# Android添加水印的正确方法 只要三步!
# Android实现为图片添加水印
# Android 给图片加上水印的示例代码(支持logo+文字)
# Android给任何view添加全屏倾斜水印
# Android 图片添加水印的实现方法
# android实现文字水印效果 支持多行水印
# Android图片添加水印图片并把图片保存到文件存储的实现代码
# Android实现分享长图并且添加全图水印
# Android可配置透明度的水印
# 创建一个
# 标上
# 就行
# 贴出
# 将该
# 搞了
# 大家多多
# 方法如下
# 直接调用
# paddingRight
# createWaterMaskRightBottom
# paddingBottom
# createWaterMaskRightTop
# text
# drawTextToLeftTop
# createWaterMaskLeftBottom
# createWaterMaskCenter
# Canvas
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
php json中文编码为null的解决办法
微信小程序 五星评分(包括半颗星评分)实例代码
如何用IIS7快速搭建并优化网站站点?
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
如何快速搭建高效服务器建站系统?
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
三星网站视频制作教程下载,三星w23网页如何全屏?
PHP 500报错的快速解决方法
独立制作一个网站多少钱,建立网站需要花多少钱?
微信小程序 配置文件详细介绍
javascript日期怎么处理_如何格式化输出
C语言设计一个闪闪的圣诞树
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Laravel如何记录自定义日志?(Log频道配置)
Python图片处理进阶教程_Pillow滤镜与图像增强
制作企业网站建设方案,怎样建设一个公司网站?
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
简单实现Android验证码
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
如何在腾讯云服务器上快速搭建个人网站?
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
详解jQuery中基本的动画方法
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
js代码实现下拉菜单【推荐】
php结合redis实现高并发下的抢购、秒杀功能的实例
如何快速搭建FTP站点实现文件共享?
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
javascript中闭包概念与用法深入理解
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
香港服务器WordPress建站指南:SEO优化与高效部署策略
JS实现鼠标移上去显示图片或微信二维码
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
javascript中的try catch异常捕获机制用法分析
如何用wdcp快速搭建高效网站?
微信小程序 canvas开发实例及注意事项
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
如何基于云服务器快速搭建网站及云盘系统?
如何用5美元大硬盘VPS安全高效搭建个人网站?
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
Python文件异常处理策略_健壮性说明【指导】
大学网站设计制作软件有哪些,如何将网站制作成自己app?
黑客如何通过漏洞一步步攻陷网站服务器?
如何快速生成橙子建站落地页链接?
如何在宝塔面板中修改默认建站目录?
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优

