Android图片添加水印图片并把图片保存到文件存储的实现代码

作者:zhangphil 时间:2022-06-03 21:48:54 

具体代码如下所示:


package zhangphil.test;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
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) {
   add();
  }
 });
}
private void add() {
 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));
    //水印图。
    Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.logo);
    //原图片添加水印后形成新的文件。
    File zhangphil = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "zhangphil.jpg");
    if (!zhangphil.exists())
     zhangphil.createNewFile();
    //原图片添加水印后形成的新Bitmap。在原图片的最左边和做顶部开始添加。
    //如果是中间或者底部需要计算x,y的坐标位置。
    Bitmap newbitmap = addImageWatermark(bitmap1, bitmap2, 0, 0);
    //把添加水印后的Bitmap保存到文件。
    save(newbitmap, zhangphil, Bitmap.CompressFormat.JPEG, true);
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 }).start();
}
/**
 * 添加图片水印。
 *
 * @param src  源图片
 * @param watermark 图片水印
 * @param x   起始坐标x
 * @param y   起始坐标y
 * @return 带有图片水印的图片
 */
public static Bitmap addImageWatermark(Bitmap src, Bitmap watermark, int x, int y) {
 Bitmap retBmp = src.copy(src.getConfig(), true);
 Canvas canvas = new Canvas(retBmp);
 canvas.drawBitmap(watermark, x, y, null);
 return retBmp;
}
/**
 * 保存图片到文件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和水印图片res/drawable/logo.jpg。

权限:


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

总结

以上所述是小编给大家介绍的Android图片添加水印图片并把图片保存到文件存储的实现代码网站的支持!

来源:https://blog.csdn.net/zhangphil/article/details/80747512

标签:android,水印,图片,存储
0
投稿

猜你喜欢

  • Android 简单实现倒计时功能

    2023-06-27 11:35:40
  • IDEA java出现无效的源发行版14解决方案

    2021-06-25 08:50:33
  • SpringBoot @ConfigurationProperties注解的简单使用

    2021-09-03 12:21:57
  • Android中断线程的处理方法

    2023-07-31 11:51:55
  • C#基于委托实现多线程之间操作的方法

    2022-07-16 23:58:16
  • spring框架集成flyway项目的详细过程

    2023-09-14 11:47:14
  • java 模仿拼多多红包递减算法的实现

    2022-05-11 11:03:30
  • Spring boot整合log4j2过程解析

    2023-11-29 10:47:53
  • springboot对接微信支付的完整流程(附前后端代码)

    2021-11-12 15:08:42
  • Spring refresh()源码解析

    2022-09-04 18:45:52
  • Java方法的参数传递机制实例详解

    2021-05-24 07:38:29
  • Java持久化框架Hibernate与Mybatis优劣及选择详解

    2023-12-03 19:46:14
  • Java中的异常处理(try,catch,finally,throw,throws)

    2021-07-29 16:45:12
  • 初识MyBatis及基本配置和执行

    2021-11-12 05:53:40
  • Android5.0新控件实例详解

    2022-12-06 21:58:18
  • C# memcache 使用介绍

    2022-11-25 12:25:57
  • Java简单计时的实现案例(可以用来限时循环)

    2023-02-01 21:39:19
  • Java Benchmark 基准测试的实例详解

    2023-10-08 11:01:02
  • Java中Scanner类与BufferReader类的不同点(非常详细)

    2023-07-07 01:21:18
  • java根据网络地址保存图片的方法

    2021-09-01 18:37:02
  • asp之家 软件编程 m.aspxhome.com