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

 更新时间:2018年06月21日 09:47:25   作者:zhangphil  
这篇文章主要介绍了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图片添加水印图片并把图片保存到文件存储的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 详解androidstudio项目上传到github方法以及步骤

    详解androidstudio项目上传到github方法以及步骤

    在使用studio开发的项目过程中有时候我们想将项目发布到github上,studio其实是自带这种功能的,那么如何使用呢,下面我们就一起来了解一下
    2019-01-01
  • Android实现左滑退出Activity的完美封装

    Android实现左滑退出Activity的完美封装

    这篇文章主要介绍了Android实现左滑退出Activity的完美封装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Android实现IOS相机滑动控件

    Android实现IOS相机滑动控件

    这篇文章主要为大家详细介绍了Android实现IOS相机滑动控件的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Flutter中go_router路由管理的使用指南

    Flutter中go_router路由管理的使用指南

    go_router 是一个 Flutter 的第三方路由插件,相比 Flutter 自带的路由,go_router 更加灵活,而且简单易用,下面小编就来和大家聊聊go_router的使用吧
    2023-08-08
  • Android自定义水波纹底部导航的实现

    Android自定义水波纹底部导航的实现

    TabLayout作为导航组件来说,使用场景非常的多,也意味着要满足各种各样的需求,这篇文章主要介绍了Android自定义水波纹底部导航的实现
    2022-08-08
  • 详解Android 8.1.0 Service 中 弹出 Dialog的方法

    详解Android 8.1.0 Service 中 弹出 Dialog的方法

    这篇文章主要介绍了Android 8.1.0 Service 中怎么弹出 Dialog问题,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Android编程实现通过反射获取资源Id的方法

    Android编程实现通过反射获取资源Id的方法

    这篇文章主要介绍了Android编程实现通过反射获取资源Id的方法,结合实例形式分析了Android反射机制操作资源的相关实现技巧,需要的朋友可以参考下
    2018-01-01
  • Android中检查、监听电量和充电状态的方法

    Android中检查、监听电量和充电状态的方法

    这篇文章主要介绍了Android中检查、监听电量和充电状态的方法,如判断当前充电状态、监听充电状态的改变、判断当前剩余电量等,需要的朋友可以参考下
    2014-06-06
  • android 识别U盘以及读写文件的方法

    android 识别U盘以及读写文件的方法

    今天小编就为大家分享一篇android 识别U盘以及读写文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • android LabelView实现标签云效果

    android LabelView实现标签云效果

    这篇文章主要为大家详细介绍了android LabelView实现标签云效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05

最新评论