先上图:

Android 为图片添加文字水印_第1张图片

上代码

------------------------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: [email protected] * 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: [email protected] * 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"?>    

 

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

 

 

Android 为图片添加文字水印_第2张图片

 

更多相关文章

  1. Android 异步加载图片(扩展后)
  2. android获取图片文件头信息
  3. android 图片的自由缩放和旋转
  4. android裁剪图片
  5. android左右滑动翻页查看图片
  6. Android内存缓存图片的标准方法
  7. Android MenuItem 设置文字颜色-TextColor的设置
  8. Android根据不同语言切换图片
  9. Android 图片处理工具类汇总

随机推荐

  1. 创建适配器时报:ERROR/AndroidRuntime(17
  2. Android(安卓)achartengine统计图
  3. Android(安卓)XML属性在文档中的位置
  4. 收集几个移动平台浏览器的User-Agent
  5. 【Android】Android实现截取当前屏幕图片
  6. 我的Android学习笔记1(Android开发环境配
  7. Android(安卓)NDK常见错误解决方案
  8. android开发环境配置
  9. Android(安卓)Bitmap详细介绍
  10. android 4中新增的日历处理相关API