Android轻松实现拍照加水印

概述

在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("加水印失败");
                }
            }
        }

四、项目文件结构截图:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西安未央

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值