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

具体代码如下所示:

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图片添加水印图片并把图片保存到文件存储的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • android实现文字水印效果 支持多行水印

    特点 支持多行水印,支持自定义角度,支持自定义文字大小. 原理: 使用一个TextView 占据整个页面.在TextView基础上面打水印. 用法: 具体的view在 package cn.fulushan.watermark.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter

  • android使用ItemDecoration给RecyclerView 添加水印

    前言 项目中有使用到水印效果,如下图所示.在实现过程中,最终选用ItemDecoration来实现,其中有两大步骤:自定义Drawable来完成水印图片.使用ItemDecoration来布局水印. Demo在 WatermarkFragment 中,效果图如下: 1. 自定义Drawable完成水印图片 public class MyDrawable extends Drawable { Paint mPaint; public MyDrawable() { mPaint = new Pain

  • Android给图片加文字和图片水印实例代码

    我们在做项目的时候有时候需要给图片添加水印,水寒今天就遇到了这样的问题,所以搞了一个工具类,贴出来大家直接调用就行. /** * 图片工具类 * @author 水寒 * */ public class ImageUtil { /** * 设置水印图片在左上角 * @param Context * @param src * @param watermark * @param paddingLeft * @param paddingTop * @return */ public static Bi

  • Android实现分享长图并且添加全图水印

    Android实现分享长图并且添加全图水印 前言: 长图一般是ScrollView和ListView. 我们需要取得这两个控件的完整显示的图片.原理很简单,搞一张和控件长宽一致的画布(就是创建一个高宽相等的bitmap).然后调用控件的draw方法把自己画到画布上去. 分别贴出两个控件的长图获取方法 /** * 截取scrollview的屏幕 **/ public static Bitmap getScrollViewBitmap(ScrollView scrollView) { int h =

  • Android添加水印的正确方法 只要三步!

    开门见山,添加水印的方法非常简单,其实就只有3个步骤: 1.载入原始图片 2.载入水印图片 3.保存带有水印的图片 实现的原理就是:获取原始图片的宽高,然后,新建一个同样宽高的bitmap,将这个新的bitmap作为画布,接着,就在这个画布上面画原图,画水印图片,有文字就接着画文字. 上面哪个顺序一定不能乱,不然你可能就看不到水印,或则文字了,因为画在原图下面去了 绘制水印的代码如下: private static Bitmap createWaterMaskBitmap(Bitmap src,

  • Android实现为图片添加水印

    添加水印的方法挺简单的,具体内容如下 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView iv = (ImageView) findViewByI

  • Android视频处理之动态时间水印效果

    最近的项目中遇到一个非常头痛的需求,在Android端录制视频的时候动态添加像监控画面一样的精确到秒的时间信息,关键是,并不是说只在播放器的界面显示时间就可以了,而是录制到视频里面去,这个MP4在电脑上播放也能看到每个画面的时间. 最后想到的办法是在录制完成以后去处理这个视频. 期间参考了很多资料,比较有用的大概是ffmpeg和比较新的Api mediaCodec系列了.介于ffmpeg都是C实现,和一大堆NDK相关,本人不是太懂,就重点关注了MediaCodec系列. 参考逻辑流程图一目了然的

  • Android给任何view添加全屏倾斜水印

    本文主要介绍了Android给任何view添加全屏倾斜水印,具体如下,分享给大家 如果要实现如下效果 目前有两种思路: 1.先画出带有水平文字的照片,然后再和原图合成即可 2.旋转画布,然后直接画布写字即可 两种方案都差不多,这里讲解的第二种方案. 但是两种方案都存在问题,就是文字需要完全覆盖,那么就需要我们的画布要比图片大,其实只要把画布移动到原图的外切图即可. 为了简单分析问题,我们取最长的边,把原图当成正方形,外切正方形的边长即为对角边.如下图 从上图我们可以看出,我们需要旋转45度然后平

  • Android 给图片加上水印的示例代码(支持logo+文字)

    本文介绍了Android 给图片加上水印的示例代码(支持logo+文字),分享给大家,具体如下: 现在我们想要往图片上打上水印,该水印应符合这样的需求的: 支持logo+文字: 文字信息支持多行展示: 用户可以选择水印在图片上的生成位置(左上.右上.右下和左下). 粗略的结构图低配版大概就长这样... 水印结构图.png 现在提供这样的一种思路去实现这一个需求,我们可以通过自定义一个view,view的布局中包含logo.公司名称和相关信息,这个view就是我们要打上图片的水印. 这样的一个vi

  • Android 图片添加水印的实现方法

    Android 图片添加水印的实现方法 实现效果图: 手机端打水印(文字和图片)使用的是Bitmap.Matrix和Canvas类的一些方法, 可以实现拉伸.旋转.位移等等效果. 原理很简单, 就是在画布Canvas上绘制图形.图片.文字等等, 得到你想要的效果图片. 百度搜索图片打水印有很多结果, 没找到斜着打水印的代码,有很多公司都要求上图的效果, 所以写着玩玩. /* 添加全屏斜着45度的文字 / public static Bitmap drawCenterLable(Context c

随机推荐