Android图片添加文字水印并保存水印文字图片到指定文件package zhangphil.test;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.os.Bundle;import android.os.Environment;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.View;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;public class JavaActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.drawable_activity); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { merge(); } }); } private void merge() { new Thread(new Runnable() { @Override public void run() { File zhang = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "zhang.jpg"); try { Bitmap bitmap1 = BitmapFactory.decodeStream(new FileInputStream(zhang)); File zhangphil = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "zhangphil.jpg"); if (!zhangphil.exists()) zhangphil.createNewFile(); int textSize = 60; //中间高度位置添加水印文字。 Bitmap bitmap2 = addTextWatermark(bitmap1, "blog.csdn.net/zhangphil", textSize, Color.RED, 0, bitmap1.getHeight() / 2, true); save(bitmap2, zhangphil, Bitmap.CompressFormat.JPEG, true); } catch (Exception e) { e.printStackTrace(); } } }).start(); } /** * 给一张Bitmap添加水印文字。 * * @param src 源图片 * @param content 水印文本 * @param textSize 水印字体大小 ,单位pix。 * @param color 水印字体颜色。 * @param x 起始坐标x * @param y 起始坐标y * @param recycle 是否回收 * @return 已经添加水印后的Bitmap。 */ public static Bitmap addTextWatermark(Bitmap src, String content, int textSize, int color, float x, float y, boolean recycle) { if (isEmptyBitmap(src) || content == null) return null; Bitmap ret = src.copy(src.getConfig(), true); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); Canvas canvas = new Canvas(ret); paint.setColor(color); paint.setTextSize(textSize); Rect bounds = new Rect(); paint.getTextBounds(content, 0, content.length(), bounds); canvas.drawText(content, x, y, paint); if (recycle && !src.isRecycled()) src.recycle(); return ret; } /** * 保存图片到文件File。 * * @param src 源图片 * @param file 要保存到的文件 * @param format 格式 * @param recycle 是否回收 * @return true 成功 false 失败 */ public static boolean save(Bitmap src, File file, Bitmap.CompressFormat format, boolean recycle) { if (isEmptyBitmap(src)) return false; OutputStream os; boolean ret = false; try { os = new BufferedOutputStream(new FileOutputStream(file)); ret = src.compress(format, 100, os); if (recycle && !src.isRecycled()) src.recycle(); } catch (IOException e) { e.printStackTrace(); } return ret; } /** * Bitmap对象是否为空。 */ public static boolean isEmptyBitmap(Bitmap src) { return src == null || src.getWidth() == 0 || src.getHeight() == 0; }}

假设在根目录的Pictures目录下已经存放好名为zhang.jpg的图片,给这张图片添加红色水印文字:blog.csdn.net/zhangphil

最终:

记得加存储权限:

android水印控件,Android图片添加文字水印并保存水印文字图片到指定文件相关推荐

  1. android toolbar控件,Android Toolbar控件

    1. Toolbar类 Toolbar是替代ActionBar的产物,低版本可以使用v7兼容包,使用Theme.AppCompat主题,并添加配置. false true 2. Toolbar配置 主 ...

  2. Android列表控件选项中添加进度框ProgressBar实现

        今天有时间就学习了下在ListView.GridView列表项中清加ProgressBar,小马用最简单的代码实现可以通用的功能,人人都能看懂,哈哈,直接说下,如果你的适配器getView方法 ...

  3. android 电量控件,Android实现显示电量的控件代码

    下面介绍了Android实现显示电量的控件代码,具体代码如下: 1.目录结构,本人是使用安卓死丢丢. 2.运行界面,输入框中输入数值,点击刷新,会再电池中显示出相应的电量 3.绘制自定义电池控件,首先 ...

  4. android+ebook控件,Android 自定义控件 eBook 翻书效果

    Book.java文件: package com.book; import Android.app.Activity; import android.os.Bundle; import android ...

  5. android md 控件,Android基本UI控件.md

    # Android基本UI控件 ## *TextView 文本框* ### TextView常用用法 | 主要方法 | 功能描述 | | :----------: | :--------------- ...

  6. android 绘制控件,Android自定义控件绘制基本图形基础入门

    本文讲述绘制Android自定义各种图形效果,为自定义控件的入门篇 相关视频链接: 绘制点–这个控件只需要在布局中引用或者代码中new 即可,下面几个绘制只展示onDraw方法 package com ...

  7. Android scroller控件,Android Scroller完全解析

    在Android中,任何一个控件都是可以滚动的,因为在View类当中有scrollTo()和scrollBy()这两个方法,如下图所示: 这两个方法的主要作用是将View/ViewGroup移至指定的 ...

  8. android裁剪控件,Android 仿抖音音频裁剪控件

    效果图 QQ图片20201126164657.jpg 功能要求:绘制音频效果,音乐播放后进度滚动,控件可拖动,拖动后获取新的起始时间 (后期会加入根据音乐各个时段分贝大小来动态显示音律线的长短) 控件 ...

  9. android 复制控件,Android长按复制文本功能

    安卓一般能用到长按复制的控件Textview,Editext,可能也有WebView 在开始之前先说一个我遇到的一个坑: viewGroup中有一个这个属性android:descendantFocu ...

最新文章

  1. Cuda Stream流 分析
  2. 两段用来启动/重启Linux下Tomcat的Perl脚本
  3. VS2010下使用dmp文件和pdb文件定位程序异常代码行号的注意事项
  4. Visual formatting model(图)
  5. mAP(mean Average Precision)应用(转)
  6. 算法题存档20190127
  7. 第二次裸辞_潜伏期_一些感想
  8. 如何判断笔记本蓝牙硬件坏了_还在担心被套路?老司机教你如何判断车用尿素溶液的好与坏...
  9. 数理方程与特殊函数|均匀各向同性介质内的热传导方程
  10. mac读取ntfs移动硬盘
  11. 电脑上如何快速将图片压缩变小?
  12. @PersistenceContext 注解在spring中代理
  13. 怎样进行两台电脑之间的数据传输?
  14. 南京技师学院计算机系,江苏南京技师学院
  15. 农业工程与信息技术是计算机类吗,中国海洋大学农业工程与信息技术概论2020考研复试大纲...
  16. 二十四节气查询 Python调用示例代码
  17. 基于SSM框架实现文件上传并插入数据库
  18. gcd(int a, int b) //求最大公约数
  19. 一个拖延症的学习之旅
  20. 案例聚焦:Ping32助力树兰医疗建设全面终端安全管理体系

热门文章

  1. 如何确定试管婴儿胚胎质量
  2. VMware Workstation15配置虚拟网络编辑器固定IP地址
  3. 【if语句与表达式】
  4. 上位机与下位机交互--让socket不死
  5. Fence Repair-栅栏维修(优先队列)
  6. EPLAN创建3D宏部件
  7. 特征工程常用于特征提取方法——数值特征
  8. Excel单元格中怎么批量将两行合并成一行
  9. C语言基础知识讲解(入门)
  10. Highcharts 江湖就这样