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

先上图:

729d92b0c264bb7d5ea4e4331d3cf025.png

上代码

------------------------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/";

@Override

protected 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() {

@Override

public 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-----------------------------

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

033ae49386035ce3936870e0a535dda9.png

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值