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

2020-11-05 11:42:27 浏览数 (2)

具体代码如下所示:

代码语言:javascript复制
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。

权限:

代码语言:javascript复制
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /  

总结

以上所述是小编给大家介绍的Android图片添加水印图片并把图片保存到文件存储的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对ZaLou.Cn网站的支持!

0 人点赞