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();
    }

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

(0)

相关推荐

  • android实现文字水印效果 支持多行水印

    特点 支持多行水印,支持自定义角度,支持自定义文字大小. 原理: 使用一个TextView 占据整个页面.在TextView基础上面打水印. 用法: 具体的view在 package cn.fulushan.watermark.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter

  • Android给图片加文字和图片水印实例代码

    我们在做项目的时候有时候需要给图片添加水印,水寒今天就遇到了这样的问题,所以搞了一个工具类,贴出来大家直接调用就行. /** * 图片工具类 * @author 水寒 * */ public class ImageUtil { /** * 设置水印图片在左上角 * @param Context * @param src * @param watermark * @param paddingLeft * @param paddingTop * @return */ public static Bi

  • Android 图片添加水印的实现方法

    Android 图片添加水印的实现方法 实现效果图: 手机端打水印(文字和图片)使用的是Bitmap.Matrix和Canvas类的一些方法, 可以实现拉伸.旋转.位移等等效果. 原理很简单, 就是在画布Canvas上绘制图形.图片.文字等等, 得到你想要的效果图片. 百度搜索图片打水印有很多结果, 没找到斜着打水印的代码,有很多公司都要求上图的效果, 所以写着玩玩. /* 添加全屏斜着45度的文字 / public static Bitmap drawCenterLable(Context c

  • Android 给图片加上水印的示例代码(支持logo+文字)

    本文介绍了Android 给图片加上水印的示例代码(支持logo+文字),分享给大家,具体如下: 现在我们想要往图片上打上水印,该水印应符合这样的需求的: 支持logo+文字: 文字信息支持多行展示: 用户可以选择水印在图片上的生成位置(左上.右上.右下和左下). 粗略的结构图低配版大概就长这样... 水印结构图.png 现在提供这样的一种思路去实现这一个需求,我们可以通过自定义一个view,view的布局中包含logo.公司名称和相关信息,这个view就是我们要打上图片的水印. 这样的一个vi

  • Android视频处理之动态时间水印效果

    最近的项目中遇到一个非常头痛的需求,在Android端录制视频的时候动态添加像监控画面一样的精确到秒的时间信息,关键是,并不是说只在播放器的界面显示时间就可以了,而是录制到视频里面去,这个MP4在电脑上播放也能看到每个画面的时间. 最后想到的办法是在录制完成以后去处理这个视频. 期间参考了很多资料,比较有用的大概是ffmpeg和比较新的Api mediaCodec系列了.介于ffmpeg都是C实现,和一大堆NDK相关,本人不是太懂,就重点关注了MediaCodec系列. 参考逻辑流程图一目了然的

  • Android实现分享长图并且添加全图水印

    Android实现分享长图并且添加全图水印 前言: 长图一般是ScrollView和ListView. 我们需要取得这两个控件的完整显示的图片.原理很简单,搞一张和控件长宽一致的画布(就是创建一个高宽相等的bitmap).然后调用控件的draw方法把自己画到画布上去. 分别贴出两个控件的长图获取方法 /** * 截取scrollview的屏幕 **/ public static Bitmap getScrollViewBitmap(ScrollView scrollView) { int h =

  • 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 andro

  • Android实现为图片添加水印

    添加水印的方法挺简单的,具体内容如下 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView iv = (ImageView) findViewByI

  • Android给任何view添加全屏倾斜水印

    本文主要介绍了Android给任何view添加全屏倾斜水印,具体如下,分享给大家 如果要实现如下效果 目前有两种思路: 1.先画出带有水平文字的照片,然后再和原图合成即可 2.旋转画布,然后直接画布写字即可 两种方案都差不多,这里讲解的第二种方案. 但是两种方案都存在问题,就是文字需要完全覆盖,那么就需要我们的画布要比图片大,其实只要把画布移动到原图的外切图即可. 为了简单分析问题,我们取最长的边,把原图当成正方形,外切正方形的边长即为对角边.如下图 从上图我们可以看出,我们需要旋转45度然后平

  • Android添加水印的正确方法 只要三步!

    开门见山,添加水印的方法非常简单,其实就只有3个步骤: 1.载入原始图片 2.载入水印图片 3.保存带有水印的图片 实现的原理就是:获取原始图片的宽高,然后,新建一个同样宽高的bitmap,将这个新的bitmap作为画布,接着,就在这个画布上面画原图,画水印图片,有文字就接着画文字. 上面哪个顺序一定不能乱,不然你可能就看不到水印,或则文字了,因为画在原图下面去了 绘制水印的代码如下: private static Bitmap createWaterMaskBitmap(Bitmap src,

随机推荐