先上图:

上代码

------------------------MainActivity------------------------

package com.example.zhuoshi.watermarkdemo;import android.graphics.Bitmap;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
/*** Author: baipenggui* Date: 2019/1/23 16:06* Email: 1528354213@qq.com* Description: 在Activity中进行图片展示,以及图片保存*/
public class MainActivity extends AppCompatActivity {private static String filePath = Environment.getExternalStorageDirectory() + "/WatermarkPicture/";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);String photoAddress = "海淀区-清河路-西三旗桥";String phoneDate = "2019-01-22";String illicitCode = "1008";String illicitBehavior = "闯红灯";String equipmentNumber = "fgf54327d";String antifakeInformation = "*#4%6&*@";ImageView imageView = findViewById(R.id.image);int resource = R.drawable.girl;WatermarkSettings.getmInstance(this);Bitmap bitmap = WatermarkSettings.createWatermark(resource, photoAddress, phoneDate, illicitCode, illicitBehavior, equipmentNumber, antifakeInformation);imageView.setImageBitmap(bitmap);//保存图片imageView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {WatermarkSettings.savaWaterparkFile(filePath);Toast.makeText(MainActivity.this, "您点击了图片,已保存", Toast.LENGTH_SHORT).show();}});}
}

------------------------WatermarkSettings------------------------

package com.example.zhuoshi.watermarkdemo;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Rect;
import android.text.Layout;
import android.text.StaticLayout;
import android.text.TextPaint;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.WindowManager;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/*** Author: baipenggui* Date: 2019/1/23 16:06* Email: 1528354213@qq.com* Description: 形成水印工具类*/
public class WatermarkSettings {public static WatermarkSettings mInstance;public static Context mContext;public static int mResources;private static String watermarkText;private static String mPhotoGraphed;private static String mPhotoDate;private static String mIllicitCode;private static String mIllicitBehavior;private static String mEquipmentNumber;private static String mAntifakeInformation;private static String TAG = "";/**@Description: 图片添加水印的信息*@Params:*@Author: baipenggui*@Date: 2019/1/23*/public static WatermarkSettings getmInstance(Context context) {mContext = context;if (mInstance == null) {mInstance = new WatermarkSettings();}TAG = mContext.getClass().getName();return mInstance;}/*** @Description 创建水印文件,以下是水印上添加的文本信息* @param resources 需要添加水印的图片资源* @param photoGraphed 拍照地点* @param photoDate 拍照时间* @param illicitCode 违法代码* @param illicitBehavior 违法行为* @param equipmentNumber 设备编号* @param antifakeInformation 防伪信息* @return*/public static Bitmap createWatermark(int resources, String photoGraphed, String photoDate,String illicitCode, String illicitBehavior, String equipmentNumber, String antifakeInformation) {mResources = resources;mPhotoGraphed = photoGraphed;mPhotoDate = photoDate;mIllicitCode = illicitCode;mIllicitBehavior =  illicitBehavior;mEquipmentNumber = equipmentNumber;mAntifakeInformation = antifakeInformation;Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), resources);// 获取图片的宽高int bitmapWidth = bitmap.getWidth();int bitmapHeight = bitmap.getHeight();// 创建一个和图片一样大的背景图Bitmap bmp = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bmp);// 画背景图canvas.drawBitmap(bitmap, 0, 0, null);watermarkText = "违法时间:" + photoDate + "\n违法地点:" + photoGraphed + "\n违法代码:" + illicitCode + "\n违法行为:" + illicitBehavior + "\n设备编号:" + equipmentNumber + "\n防伪信息:" + antifakeInformation;//-------------开始绘制文字--------------if (!TextUtils.isEmpty(watermarkText)) {int screenWidth = getScreenWidth();float textSize = dp2px(mContext, 16) * bitmapWidth / screenWidth;// 创建画笔TextPaint mPaint = new TextPaint();// 文字矩阵区域Rect textBounds = new Rect();// 水印的字体大小mPaint.setTextSize(textSize);// 文字阴影mPaint.setShadowLayer(0.5f, 0f, 1f, Color.YELLOW);// 抗锯齿mPaint.setAntiAlias(true);// 水印的区域mPaint.getTextBounds(watermarkText, 0, watermarkText.length(), textBounds);// 水印的颜色mPaint.setColor(Color.BLUE);StaticLayout layout = new StaticLayout(watermarkText, 0, watermarkText.length(), mPaint, (int) (bitmapWidth - textSize),Layout.Alignment.ALIGN_NORMAL, 1.0F, 0.5F, true);// 文字开始的坐标float textX = dp2px(mContext, 8) * bitmapWidth / screenWidth;//float textY = bitmapHeight / 2;//图片的中间float textY = dp2px(mContext, 8) * bitmapHeight / screenWidth;// 画文字canvas.translate(textX, textY);layout.draw(canvas);}//保存所有元素canvas.save();canvas.restore();return bmp;}/*** @Description 保存水印图片* @param saveWatermarkPath 保存路径*/public static void savaWaterparkFile(String saveWatermarkPath) {Bitmap watermark = createWatermark(mResources,mPhotoGraphed,mPhotoDate,mIllicitCode,mIllicitBehavior,mEquipmentNumber,mAntifakeInformation);File watermarkfile = new File(saveWatermarkPath);if (!watermarkfile.exists()) {watermarkfile.mkdir();}// 创建媒体文件名String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());File file = new File(watermarkfile.getPath() + File.separator + timeStamp + ".jpg");if(file!=null){Log.e(TAG, "savaWaterparkFile: success ");}else{Log.e(TAG, "savaWaterparkFile: failure ");}BufferedOutputStream bos = null;try {bos = new BufferedOutputStream(new FileOutputStream(file));if (watermark != null) {watermark.compress(Bitmap.CompressFormat.JPEG, 80, bos);}} catch (FileNotFoundException e) {e.printStackTrace();}try {bos.flush();bos.close();} catch (IOException e) {e.printStackTrace();}}private static int getScreenWidth() {DisplayMetrics dm = new DisplayMetrics();WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);wm.getDefaultDisplay().getMetrics(dm);return dm.widthPixels;}private static int dp2px(Context context, float dp) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dp * scale + 0.5f);}}

-----------------------------activity_main-----------------------------

<?xml version="1.0" encoding="utf-8"?>
<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"tools:context=".MainActivity"android:background="#cccccc"android:orientation="vertical"><ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="centerCrop"android:id="@+id/image"/></LinearLayout>

---------------- babygirl.jpg --------------

Android 为图片添加文字水印相关推荐

  1. android图片上加有汉字,Android 为图片添加文字水印

    先上图: 上代码 ------------------------MainActivity------------------------ package com.example.zhuoshi.wa ...

  2. android水印控件,Android图片添加文字水印并保存水印文字图片到指定文件

    Android图片添加文字水印并保存水印文字图片到指定文件package zhangphil.test;import android.graphics.Bitmap;import android.gr ...

  3. Springboot中给图片添加文字水印

    Springboot中给图片添加文字水印 工作中遇到给图片添加文字水印的需求,记录下来方便之后查阅 需求内容: 给一张图片添加指定文字水印,使一张图片上有多个水印内容,并且设定一个水印开关,可指定是否 ...

  4. Swift - 给图片添加文字水印(图片上写文字,并可设置位置和样式)

    想要给图片添加文字水印或者注释,我们需要实现在UIImage上写字的功能. 1,效果图如下: (在图片左上角和右下角都添加了文字.) 2,为方便使用,我们通过扩展UIImage类来实现添加水印功能 ( ...

  5. php生成背景并加字,PHP给图片添加文字水印实例

    PHP给图片添加文字水印实例,支持中文文字水印,是否覆盖原图,自定义设置水印背景色.文字颜色.字体等. 水印类water.class.php var $Path = "./"; / ...

  6. 二、VB.NET实现给图片添加文字水印

    VB.NET实现给图片添加文字水印 通过vb.net给选定的图片添加文字水印,添加的文字从文本文档中获取,可以一次给相同的图片添加不同的文字水印,并以添加的文字命名图片: Imports System ...

  7. python 实现图片添加文字水印

    在python中我们可以使用openCV给图片添加水印,这里注意openCV无法添加汉字水印,添加汉字水印上可使用PIL库给图片添加水印 一:openCV给图片添加水印 1:安装openCV pip ...

  8. php给图片添加文字水印

    PHP对图片的操作用到GD库,这里我们介绍如何给图片添加文字水印. 大致分为四步: 1.打开图片 2.操作图片 3.输出图片 4.销毁图片 下面我们上代码来具体讲解每步的实现过程: <?php/ ...

  9. JAVA 给图片添加文字水印

    水印操作有很多,例如:给图片添加文字.图片水印,给pdf文件添加水印,给文件加盖公章,这类需求还是时常会遇到的,今天就简单记录一下给图片添加文字水印的demo,仅供大家参考,后续会写别的情况的添加水印 ...

最新文章

  1. 爬取一万条b站评论看《工作细胞》
  2. linux编程之GDB调试
  3. antd 动态添加表单_ZooTeam 拍了拍你,来看看如何设计动态化表单
  4. PHP Memcached + APC + 文件缓存封装
  5. 运维监控工具之 Nagios 客户端安装(二)
  6. linux nfs4 超时,Linux文件服务器NFS详解【4】
  7. java 支持 shards 的jar_Solr Cloud:跨节点分配Shards
  8. 会议论文出版地和出版者
  9. 带你全面掌握高级知识点!如何化身BAT面试收割机
  10. 用python来开发webgame服务端系列
  11. 国际结算三大方式之一—信用证 Letter of Credit(L/C)
  12. 海贼王燃烧意志服务器维修,海贼王燃烧意志刷经验
  13. Base64编码简介
  14. 电脑可以联网但是有的网页打不开
  15. 基于递归神经网络(RNN)的口语理解(SLU)
  16. java学习之类方法
  17. 【深度学习】Numpy实现简单神经网络
  18. python学习笔记_week14
  19. 12-监听器实现统计网站当前在线人数
  20. Linux集群之自我搭建(虚拟机固定ip与联网)

热门文章

  1. 数学基础(一)向量范数
  2. 【Android】仿蚂蚁森林,树木弹动动画
  3. Java笔记集合之ArrayList
  4. SVN 出现 R6034 错误 Python导致异常
  5. VSCODE汉化、更改主题和文件图标
  6. 羡慕大劳星空顶?不如跟我一起使用 Jetpack compose 绘制一个星空背景(带流星动画)
  7. 抄都抄的不认真,水印都没抹掉!小红书怒斥大众点评
  8. 问题 B: 【例4-9】城市公交网建设问题
  9. cf服务器人最多,《穿越火线》这就是海一,人数最多的大区
  10. 【聊天机器人测评】独立站插件用JivoChat和Zendesk哪个好?