当前位置: 首页 > news >正文

Android中使用图片水印,并且能够在线下载字体并应用于水印

Android中使用图片水印,并且能够在线下载字体并应用于水印

要在Android中使用图片水印,并且能够在线下载字体并应用于水印,可以按照以下步骤进行:

1.使用PicassoGlide或其他图片加载库加载图片:

ImageView imageView = findViewById(R.id.image_view);
String imageUrl = "https://example.com/image.jpg";
Picasso.get().load(imageUrl).into(imageView);

2.创建一个带有水印的Drawable

BitmapDrawable watermarkDrawable = createWatermarkDrawable("Watermark Text", "font.ttf", 16);

3.创建水印的方法:

private BitmapDrawable createWatermarkDrawable(String text, String fontPath, int textSize) {Typeface typeface = Typeface.createFromFile(fontPath);// 创建一个空白的Bitmap作为画布Bitmap bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);// 设置画布属性Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);paint.setColor(Color.WHITE);paint.setTextSize(textSize);paint.setTypeface(typeface);paint.setTextAlign(Paint.Align.LEFT);// 测量文本的宽度和高度Rect textBounds = new Rect();paint.getTextBounds(text, 0, text.length(), textBounds);// 计算水印的位置int x = (bitmap.getWidth() - textBounds.width()) / 2;int y = (bitmap.getHeight() + textBounds.height()) / 2;// 在画布上绘制文本canvas.drawText(text, x, y, paint);return new BitmapDrawable(getResources(), bitmap);
}

4.将水印应用到图片上:

Drawable imageDrawable = imageView.getDrawable();
Drawable[] layers = new Drawable[2];
layers[0] = imageDrawable;
layers[1] = watermarkDrawable;
LayerDrawable layerDrawable = new LayerDrawable(layers);
imageView.setImageDrawable(layerDrawable);

5.在线下载字体文件: 你可以使用DownloadManager来下载字体文件,并在下载完成后将其应用于水印:

private void downloadFont(String fontUrl, String fontName) {DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);DownloadManager.Request request = new DownloadManager.Request(Uri.parse(fontUrl));request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fontName);long downloadId = downloadManager.enqueue(request);// 注册一个广播接收器监听下载完成事件BroadcastReceiver onCompleteReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {long receivedDownloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);if (receivedDownloadId == downloadId) {// 下载完成,应用字体String fontPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath() + "/" + fontName;BitmapDrawable updatedWatermarkDrawable = createWatermarkDrawable("Watermark Text", fontPath, 16);Drawable[] updatedLayers = new Drawable[2];updatedLayers[0] = imageDrawable;updatedLayers[1] = updatedWatermarkDrawable;LayerDrawable updatedLayerDrawable = new LayerDrawable(updatedLayers);imageView.setImageDrawable(updatedLayerDrawable);// 注销广播接收器unregisterReceiver(this);}}};registerReceiver(onCompleteReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}

例子中使用了DownloadManager来下载字体文件,并在下载完成后应用于水印。请注意,在AndroidManifest.xml中,你需要添加相关权限声明:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

另外,记得在合适的时机调用

downloadFont

方法,并提供正确的字体文件URL和文件名。

相关文章:

Android中使用图片水印,并且能够在线下载字体并应用于水印

Android中使用图片水印&#xff0c;并且能够在线下载字体并应用于水印 要在Android中使用图片水印&#xff0c;并且能够在线下载字体并应用于水印&#xff0c;可以按照以下步骤进行&#xff1a; 1.使用Picasso、Glide或其他图片加载库加载图片&#xff1a; ImageView imageV…...

HTTP文件服务

在工作中&#xff0c;往往会需要将文件同时共享给很多台电脑。 本篇介绍HHDESK的HTTP文件服务功能&#xff0c;通过浏览器&#xff0c;将本地资源共享给任意主机。 1 共享文件 首页——资源管理——服务端——“”&#xff0c;在弹出框中选择HTTP文件服务。 填写各项内容。…...

nginx配置获取客户端的真实ip

场景描述&#xff1a; 访问路径&#xff1a; A机器 - > B机器的 ->C虚拟机 &#xff1a; A机器为客户端用户&#xff0c;本地地址为 192.168.0.110 B机器为服务端反向代理服务器 本地地址为192.168.0.128 –>&#xff08;192.168.56.1&#xff09; C机器为B主机安…...

1990-2022上市公司董监高学历工资特征信息数据/上市公司高管信息数据

1990-2022上市公司董监高学历工资特征信息数据/上市公司高管信息数据 1、时间&#xff1a;1990-2022年&#xff08;统计截止日期为 2022年7月&#xff09; 2、指标&#xff1a;证券代码、统计截止日期、姓名、国籍、籍贯、籍贯所在地区代码、出生地、出生地所在地区代码、性别…...

Java程序连接 Mysql 超时问题 - 数据包过大,导致超时,# 配置网络超时时间 socketTimeout: 1800000

问题 Java程序连接 Mysql 超时问题 解决方法 如果存在 yml 等类似的配置文件&#xff0c;那么可以配置一下 socket 连接超时的参数&#xff0c;例如 # 配置网络超时时间 半小时&#xff0c;计算公式 60秒*1000毫秒*30分钟 socketTimeout: 1800000...

c++分层最短路(洛谷飞行路线)acwing版

分层最短路算法是在SPFA算法的基础上&#xff0c;将每个点分成若干层&#xff0c;从而使得每个点之间的转移只在同一层次或上下两个相邻层次之间进行&#xff0c;减少了每轮的迭代次数&#xff0c;优化了算法的效率。 #include <iostream> #include <cstdio> #inc…...

Python bs4 BeautifulSoup库使用记录

目录 介绍 安装 初始化 解析器 使用方法 优势 Python标准库 lxml HTML lxml XML html5lib 格式化输出 对象 tag Name 多值属性 其他方法 NavigableString BeautifulSoup Comment 遍历 子节点 父节点 兄弟节点 回退和前进 搜索 过滤器 字符串 正则表达…...

Jmeter系列-插件安装(5)

前言 jmeter4.0以上&#xff0c;如现在最新的5.2.1版本是有集成插件的只需要在官网下载 plugins-manager.jar 包&#xff0c;放在jmeter安装路径的lib/ext目录下即可使用&#xff1a;https://jmeter-plugins.org/install/Install/但并不能满足所有需求&#xff0c;仍然需要安装…...

spring aop源码解析

spring知识回顾 spring的两个重要功能&#xff1a;IOC、AOP&#xff0c;在ioc容器的初始化过程中&#xff0c;会触发2种处理器的调用&#xff0c; 前置处理器(BeanFactoryPostProcessor)后置处理器(BeanPostProcessor)。 前置处理器的调用时机是在容器基本创建完成时&#xff…...

使用Unity的Input.GetAxis(““)控制物体移动、旋转

使用Unity的Input.GetAxis("")控制物体移动、旋转 Input.GetAxis("") 是 Unity 引擎中的一个方法&#xff0c;用于获取游戏玩家在键盘或游戏手柄上输入的某个轴&#xff08;Axis&#xff09;的值。这里的 "" 是一个字符串参数&#xff0c;表示要…...

【CSS】画个三角形或圆形或环

首先通过调整边框&#xff0c;我们可以发现一些端倪 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><style>.box{width: 150px;height:150px;border: 50px solid black;}</style&g…...

AI项目六:基于YOLOV5的CPU版本部署openvino

若该文为原创文章&#xff0c;转载请注明原文出处。 一、CPU版本DEMO测试 1、创建一个新的虚拟环境 conda create -n course_torch_openvino python3.8 2、激活环境 conda activate course_torch_openvino 3、安装pytorch cpu版本 pip install torch torchvision torchau…...

记录YDLidar驱动包交叉编译时出现的一点问题

由于一不小心把交叉编译的系统根目录破坏了&#xff0c;所以一股脑将交叉编译系统根目录全删了重新安装&#xff0c;安装后&#xff0c;交叉编译发现ydlidar的ros包驱动出现了库无法链接的错误(刚刚还是好好的)&#xff0c;但是又想不起来之前是怎么解决的了&#xff0c;所以还…...

嵌入式学习笔记(32)S5PV210的向量中断控制器

6.6.1异常处理的2个阶段 可以将异常处理分为2个阶段来理解。第一个阶段是异常向量表跳转&#xff1b;第二个阶段是进入了真正的异常处理程序irq_handler之后的部分。 6.6.2回顾&#xff1a;中断处理的第一个阶段&#xff08;异常向量表跳转阶段&#xff09;处理 &#xff08;…...

linux下安装qt、qt触摸屏校准tslib

linux下安装qt 在 Linux 系统下安装 Qt&#xff0c;可以通过以下步骤进行操作&#xff1a;1. 下载 Qt 安装包&#xff1a;首先&#xff0c;你需要从 Qt 官方网站&#xff08;https://www.qt.io/&#xff09;下载适用于 Linux 的 Qt 安装包。选择与你的系统和需求相匹配的版本&…...

C++之unordered_map,unordered_set模拟实现

unordered_map&#xff0c;unordered_set模拟实现 哈希表源代码哈希表模板参数的控制仿函数增加正向迭代器实现*运算符重载->运算符重载运算符重载! 和 运算符重载begin()与end()实现 unordered_set实现unordered_map实现map/set 与 unordered_map/unordered_set对比哈希表…...

React Router,常用API有哪些?

react-router React Router是一个用于构建单页面应用程序&#xff08;SPA&#xff09;的库&#xff0c;它是用于管理React应用中页面导航和路由的工具。SPA是一种Web应用程序类型&#xff0c;它在加载初始页面后&#xff0c;通过JavaScript来动态加载并更新页面内容&#xff0…...

JVM类加载和双亲委派机制

当我们用java命令运行某个类的main函数启动程序时&#xff0c;首先需要通过类加载器把类加载到JVM&#xff0c;本文主要说明类加载机制和其具体实现双亲委派模式。 一、类加载机制 类加载过程&#xff1a; 类加载的过程是将类的字节码加载到内存中的过程&#xff0c;主要包括…...

P-MVSNet ICCV-2019 学习笔记总结 译文 深度学习三维重建

文章目录 5 P-MVSNet ICCV-20195.0 主要特点5.1 文章概述5.2 研究方法5.2.1 特征提取5.2.2 学习局域匹配置信5.2.3 深度图预测5.2.4 Loss方程MVSNet系列最新顶刊 对比总结5 P-MVSNet ICCV-2019 深度学习三维重建 P-MVSNet-ICCV-2019(原文、译文、批注) 下载 5.0 主要特点 …...

vueshowpdf 移动端pdf文件预览

1、安装 npm install vueshowpdf -S2、参数 属性说明类型默认值v-model是否显示pdf--pdfurlpdf的文件地址String- scale 默认放大倍数 Number1.2 minscale 最小放大倍数 Number0.8 maxscale 最大放大倍数 Number2 3、事件 名称说明回调参数closepdf pdf关闭事件-pdferr文…...

告别天书:用Python+NumPy手把手实现Turbo码的迭代译码(附完整代码)

告别天书&#xff1a;用PythonNumPy手把手实现Turbo码的迭代译码&#xff08;附完整代码&#xff09; 在通信系统的演进历程中&#xff0c;Turbo码的出现犹如一场静默的革命。1993年&#xff0c;当Berrou等人首次公开这项技术时&#xff0c;其接近香农极限的性能让整个学术界为…...

收藏!AI时代程序员的“避坑指南“与“财富密码“,小白也能轻松逆袭大模型开发!

文章反驳了AI将取代程序员的论调&#xff0c;指出程序员面临的是结构性冲击&#xff0c;初级岗位收缩但中高端岗位爆发式增长。AI将替代重复劳动&#xff0c;促使程序员向上迁移至系统架构设计等高价值岗位。AI岗位薪资远超行业平均水平&#xff0c;程序员通过拥抱AI技术&#…...

从零部署OpenClaw:打造私有AI助手全流程指南

1. 项目概述&#xff1a;从零部署你的专属AI助手 如果你对AI Agent&#xff08;智能体&#xff09;感兴趣&#xff0c;想拥有一个能24小时在线、不仅能聊天还能帮你执行任务、操控浏览器、生成图片的私人助手&#xff0c;但又觉得技术门槛太高、无从下手&#xff0c;那么你来对…...

NotebookLM播客化功能上线即爆火(2024Q2内部灰度测试TOP3功能首次公开)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM文档播客化功能详解 NotebookLM 的文档播客化&#xff08;Doc-to-Podcast&#xff09;功能将静态文本内容智能转化为自然流畅的语音叙述&#xff0c;支持多角色配音、语速调节与上下文感知停…...

终极模组加载器指南:如何在5分钟内安全扩展《杀戮尖塔》游戏内容

终极模组加载器指南&#xff1a;如何在5分钟内安全扩展《杀戮尖塔》游戏内容 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire ModTheSpire是一款专为《杀戮尖塔》设计的开源模组加载器&…...

AI Agent配置安全实践:用Config-Guard为自动化变更加锁

1. 项目概述&#xff1a;为AI Agent系统配置变更加上“安全锁”如果你正在运行一个基于OpenClaw或其他类似框架的AI Agent系统&#xff0c;那么你一定对那个核心的配置文件——通常是openclaw.json或类似的config.json——又爱又恨。它掌控着网关、模型、渠道和工具的命脉&…...

【湖南师范大学主办 | ACM出版,检索快且稳定 | 往届均已见刊并完成EI、Scopus检索】第三届智慧教育与计算机技术国际学术会议 (IECT 2026)暨十三届第四期“麓峰”交叉科学论坛

已通过ACM出版&#xff0c;ISBN号&#xff1a;979-8-4007-2365-0 教育方向结合&#xff1a;计算机、信息技术、人工智能、多媒体技术、大数据等主题均可投递 第三届智慧教育与计算机技术国际学术会议 (IECT 2026)暨十三届第四期“麓峰”交叉科学论坛 2026 3rd International…...

STM32H7网络通信避坑指南:CubeMX配置LWIP 2.1.2时,这几个DCache和ETH的坑你别踩

STM32H7网络通信深度优化&#xff1a;LWIP 2.1.2配置与Cache一致性实战解析 当你在CubeMX中勾选了ETH和LWIP组件&#xff0c;生成代码后却发现设备无法稳定响应ping请求&#xff0c;或者传输大文件时出现数据错乱——这很可能与STM32H7独特的Cache架构有关。本文将带你深入理解…...

技术乐观主义与悲观主义:我们正在走向乌托邦还是dystopia?

测试者的双重身份作为一名软件测试从业者&#xff0c;我们天然地同时拥有两副眼镜&#xff1a;一副是信任的眼镜&#xff0c;相信系统能够按照预期运行&#xff0c;相信缺陷终将被发现和修复&#xff1b;另一副是怀疑的眼镜&#xff0c;习惯于在任何看似完美的流程中寻找裂缝&a…...

Llama.cpp Docker镜像部署指南:快速搭建本地大模型运行环境

1. 项目概述&#xff1a;为什么需要为Llama.cpp准备Docker镜像&#xff1f; 在本地部署和运行大型语言模型&#xff08;LLM&#xff09;这件事上&#xff0c;Llama.cpp 几乎成了开源社区的“标准答案”。它用纯C/C编写&#xff0c;通过高效的量化技术&#xff0c;让我们能在消费…...