zoukankan      html  css  js  c++  java
  • 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" /> 
  • 相关阅读:
    Json 操作
    visual studio 单元测试的认识
    EntityFramework 贪婪加载与延迟加载以及资源回收
    idea 查看源码
    idea技巧快速生成构造函数 get set
    Spring Boot Jpa框架自定义查询语句返回自定义实体
    启动redis
    查找nginx安装目录并启动
    idea技巧 --查找当前方法都被哪些类引用
    第一个webapi及swagger
  • 原文地址:https://www.cnblogs.com/zaixiachengxuyuan/p/14465515.html
Copyright © 2011-2022 走看看