概述
在Android开发中,给照片加水印是一个常用高级功能,尤其是加一个自定义的水印或者图片,今天花时间做一个,以便在以后的开发中用到。
详细
记得把这几点描述好咯:需求(要做什么) + 代码实现过程 + 项目文件结构截图 + 演示效果
一、加水印效果图:
水印的布局内容可以随意定制,水印的位置也可以随意更改。也可以把一个图片作为一个水印加到这个照片当中。
二、实现思路:
1、首先我们需要实现一个普通拍照界面。
2、拍照完成后将照片路径回传给加水印功能界面。
3、实现在照片加水印方法,添加成功后保存到
/storage/emulated/0/Android/data/com.cjq.picturemarkerdemo/cache/1633764004390_watermark_suc.png路径。
三、实现过程:
1、首先我们需要实现一个普通拍照界面。
public class CameraActivity extends BigBaseActivity
implements View.OnClickListener,
RadioGroup.OnCheckedChangeListener,
CameraManager.OnPictureTakenListener,
ValueAnimator.AnimatorUpdateListener {
@SuppressLint("WrongConstant")
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
mCameraManager = CameraManager.getInstance(this);
Intent intent = getIntent();
String action = intent.getAction();
// add ACTION_VIEW to fix bug when start activity use android_util_code library.
mIntentAction = action == null || action.equals(Intent.ACTION_VIEW) ? ACTION_BOTH : action;
// make the volume buttons change STREAM_MUSIC.
getWindow().setVolumeControlStream(AudioManager.STREAM_MUSIC);
mActionTypeTrigger = new MutableLiveData<>();
// default is take picture
mActionTypeTrigger.setValue(false);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnBack://退出
onBackPressed();
break;
case R.id.btnSwitchCamera://前后摄像头切换
mCameraManager.toggleCameraFacing();
break;
case R.id.btnCancel://重新拍照
hideConfirms();
mCameraManager.restartPreview();
stopReplay();
break;
case R.id.btnConfirm://确认保存
save();
stopReplay();
break;
case R.id.btnReplay://预览
replay();
break;
case R.id.btnStart://拍照
if (isTakePicture()) {
mCameraManager.takePicture(this);
mDeviceRotation = mCameraManager.getDeviceRotation();
} else {
switchRecord();
}
default:
break;
}
}
}
2、拍照完成后将照片路径回传给加水印功能界面。
processCameraResult从data参数里面获取拍照的照片,然后执行加水印方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
processCameraResult(requestCode, resultCode, data);
}
3、实现在照片加水印方法,添加成功后保存到
/storage/emulated/0/Android/data/com.cjq.picturemarkerdemo/cache/1633764004390_watermark_suc.png路径。
/**
* 添加水印并保存到手机新目录
*/
private void exeAddWaterMarker() {
long current = System.currentTimeMillis();
if (mIsPicture) {
Bitmap watermark = view2Bitmap(mWatermarkContainer); //mWatermarkContainer.getDrawingCache();
//Bitmap watermark = BitmapFactory.decodeResource(Utils.getApp().getResources(), R.drawable.video_watermark_logo);
Bitmap srcPic = ImageUtils.getBitmap(mMediaPath);
Bitmap watermarkedPicture = createWatermarkedPicture(srcPic, watermark);
if (ImageUtils.save(watermarkedPicture, getExternalCacheDir() + File.separator + current + "_watermark_suc.png", Bitmap.CompressFormat.JPEG)) {
ToastUtils.showShort("加水印成功! 路径在:" + getExternalCacheDir() + File.separator + current + "_watermark_suc.png");
android.util.Log.d("sssssss","加水印成功! 路径在:" + getExternalCacheDir() + File.separator + current + "_watermark_suc.png");
} else {
ToastUtils.showShort("加水印失败");
}
}
}