Android实现拍照添加时间水印

 更新时间:2022年03月29日 12:27:23   作者:阳光灿烂的夜  
这篇文章主要为大家详细介绍了Android实现拍照添加时间水印,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android实现拍照添加时间水印的具体代码,供大家参考,具体内容如下

效果如下图 :

1、拍照

// 非空判断 拍照
 if (mCamera0 != null){
                mCamera0.takePicture(null, null, jpeg0); // 1 front
            }

2、创建JPEG数据回调

// 创建JPEG图片回调数据对象
public static PictureCallback jpeg0 = new PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            try {
                // 获得图片
                Bitmap mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                //添加时间水印
                Bitmap mTimeWatermark = AddTimeWatermark(mBitmap);
                // 判断文件夹是否存在,传入图片存储路径
                CreateFile(StaticVariables.mPicPath);
 
                String mPath = StaticVariables.mPicPath + System.currentTimeMillis()+".jpeg";       //临时测试命名
 
                File mFile = new File(mPath);
 
                BufferedOutputStream mOutputStream = new BufferedOutputStream(new FileOutputStream(mFile));
                // 将图片压缩到流中
                mTimeWatermark.compress(Bitmap.CompressFormat.JPEG,100,mOutputStream);      //时间水印
 
                mOutputStream.flush();
                mOutputStream.close();
 
                // 停止预览
                mCamera0.stopPreview();
                mCamera0.release();
                mCamera0 = Camera.open(4);
                Parameters parameters = mCamera0.getParameters();
                // parameters.setPreviewSize(width, height);
                mCamera0.setParameters(parameters);
                mCamera0.setDisplayOrientation(0);
 
                mCamera0.setPreviewTexture(mTextureView0.getSurfaceTexture());
 
                // 处理完数据之后预览
                mCamera0.startPreview();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
 
};

3、添加时间水印:AddTimeWatermark(mBitmap);

/**
     * 添加时间水印
     * @param mBitmap
     * @return mNewBitmap
*/
    private  Bitmap AddTimeWatermark(Bitmap mBitmap) {
        //获取原始图片与水印图片的宽与高
        int mBitmapWidth = mBitmap.getWidth();
        int mBitmapHeight = mBitmap.getHeight();
      //定义底片 大小 将mBitmap填充  
        Bitmap mNewBitmap = Bitmap.createBitmap(mBitmapWidth, mBitmapHeight, Bitmap.Config.ARGB_8888);
        Canvas mCanvas = new Canvas(mNewBitmap);
        //向位图中开始画入MBitmap原始图片
        mCanvas.drawBitmap(mBitmap,0,0,null);
        //添加文字
        Paint mPaint = new Paint();
        String mFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss EEEE").format(new Date());
        //String mFormat = TingUtils.getTime()+"\n"+" 纬度:"+GpsService.latitude+"  经度:"+GpsService.longitude;
        mPaint.setColor(Color.RED);
        mPaint.setTextSize(20);
        //水印的位置坐标
        mCanvas.drawText(mFormat, (mBitmapWidth * 1) / 10,(mBitmapHeight*14)/15,mPaint);
//        mCanvas.save(Canvas.ALL_SAVE_FLAG);
        mCanvas.save();
        mCanvas.restore();
 
        return mNewBitmap;
}

4、创建文件夹

// 创建 文件夹
public static void CreateFile(String path) {
        File destDir = new File(path);
        if (!destDir.exists()) {
            Log.i(TAG,"文件夹创建成功");
            destDir.mkdirs();
        } else {
            Log.i(TAG,"文件夹已存在");
        }
    }

5、Java 实现添加水印

/**
     * 设置文字水印
     * 
     * @param sourceImg
     *            源图片路径
     * @param targetImg
     *            保存的图片路径
     * @param content
     *            内容
     * @param font
     *            水印字体大小
         * Font font = new Font("微软雅黑", Font.BOLD, 16);
     * @throws IOException
*/
public void addWatermark(String sourceImg, String targetImg,String content, Font font) throws IOException {
        
        File srcImgFile = new File(sourceImg);
        Image srcImg = ImageIO.read(srcImgFile);
 
        int srcImgWidth = srcImg.getWidth(null);
        int srcImgHeight = srcImg.getHeight(null);
 
        BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight,BufferedImage.TYPE_INT_RGB);
        Graphics2D g = bufImg.createGraphics();
        g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
 
        g.setColor(Color.BLACK);
        g.setFont(font);
 
        if (content.equals("model")) {
            // 添加 设备名、MADE IN
            g.drawString(content, 350, 110);
            g.drawString(mMade, 50, 340);
        } else {
            // 设置水印的坐标 标题
            g.drawString(content, 50, 115);
        }
        g.dispose();
 
        // 输出图片
        FileOutputStream outImgStream = new FileOutputStream(targetImg);
        ImageIO.write(bufImg, "jpg", outImgStream);
        System.out.println("文字水印添加完成");
        outImgStream.flush();
        outImgStream.close();
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android自定义播放器控件VideoView

    Android自定义播放器控件VideoView

    这篇文章主要介绍了Android自定义播放器控件VideoView的相关资料,需要的朋友可以参考下
    2016-01-01
  • Android 实现文件夹排序功能的实例代码

    Android 实现文件夹排序功能的实例代码

    这篇文章主要介绍了Android 实现文件夹排序功能的实例代码,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2018-09-09
  • Android EditText 实现监听实例

    Android EditText 实现监听实例

    本文主要介绍Android EditText 组件 实现监听事件,并附有代码实例,在Android开发过程中如果能用到可以参考下
    2016-07-07
  • Android几种多渠道打包的步骤详解

    Android几种多渠道打包的步骤详解

    在不同的应用市场可能有不同的统计需求,需要为每个应用市场发布一个安装包,这里就引出了Android的多渠道打包。这篇文章主要介绍了Android几种多渠道打包,需要的朋友可以参考下
    2019-09-09
  • Android闪屏效果实现方法

    Android闪屏效果实现方法

    这篇文章主要介绍了Android闪屏效果实现方法,结合实例形式分析了Android闪屏效果的实现原理及相关功能与布局设置技巧,需要的朋友可以参考下
    2016-01-01
  • Android仿美团拖拽效果实例代码

    Android仿美团拖拽效果实例代码

    这篇文章主要给大家介绍了关于Android仿美团拖拽效果的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • Android仿支付宝手势密码解锁功能

    Android仿支付宝手势密码解锁功能

    这篇文章主要为大家详细介绍了Android仿支付宝手势密码解锁功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Android自定义recyclerView实现时光轴效果

    Android自定义recyclerView实现时光轴效果

    这篇文章主要介绍了Android自定义recyclerView实现时光轴效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Android 列表形式的切换的示例代码

    Android 列表形式的切换的示例代码

    本篇文章主要介绍了Android 列表形式的切换的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • androidstudio3.0使用butterknife报错解决的解决方法

    androidstudio3.0使用butterknife报错解决的解决方法

    这篇文章主要介绍了androidstudio3.0使用butterknife报错解决的解决方法,非常具有实用价值,需要的朋友可以参考下
    2018-01-01

最新评论