经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
Android实现拍照添加时间水印
来源:jb51  时间:2022/3/29 14:17:58  对本文有异议

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

效果如下图 :

1、拍照

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

2、创建JPEG数据回调

  1. // 创建JPEG图片回调数据对象
  2. public static PictureCallback jpeg0 = new PictureCallback() {
  3. ? ? ? ? @Override
  4. ? ? ? ? public void onPictureTaken(byte[] data, Camera camera) {
  5. ? ? ? ? ? ? try {
  6. ? ? ? ? ? ? ? ? // 获得图片
  7. ? ? ? ? ? ? ? ? Bitmap mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
  8. ? ? ? ? ? ? ? ? //添加时间水印
  9. ? ? ? ? ? ? ? ? Bitmap mTimeWatermark = AddTimeWatermark(mBitmap);
  10. ? ? ? ? ? ? ? ? // 判断文件夹是否存在,传入图片存储路径
  11. ? ? ? ? ? ? ? ? CreateFile(StaticVariables.mPicPath);
  12. ?
  13. ? ? ? ? ? ? ? ? String mPath = StaticVariables.mPicPath + System.currentTimeMillis()+".jpeg"; ? ? ? //临时测试命名
  14. ?
  15. ? ? ? ? ? ? ? ? File mFile = new File(mPath);
  16. ?
  17. ? ? ? ? ? ? ? ? BufferedOutputStream mOutputStream = new BufferedOutputStream(new FileOutputStream(mFile));
  18. ? ? ? ? ? ? ? ? // 将图片压缩到流中
  19. ? ? ? ? ? ? ? ? mTimeWatermark.compress(Bitmap.CompressFormat.JPEG,100,mOutputStream); ? ? ?//时间水印
  20. ?
  21. ? ? ? ? ? ? ? ? mOutputStream.flush();
  22. ? ? ? ? ? ? ? ? mOutputStream.close();
  23. ?
  24. ? ? ? ? ? ? ? ? // 停止预览
  25. ? ? ? ? ? ? ? ? mCamera0.stopPreview();
  26. ? ? ? ? ? ? ? ? mCamera0.release();
  27. ? ? ? ? ? ? ? ? mCamera0 = Camera.open(4);
  28. ? ? ? ? ? ? ? ? Parameters parameters = mCamera0.getParameters();
  29. ? ? ? ? ? ? ? ? // parameters.setPreviewSize(width, height);
  30. ? ? ? ? ? ? ? ? mCamera0.setParameters(parameters);
  31. ? ? ? ? ? ? ? ? mCamera0.setDisplayOrientation(0);
  32. ?
  33. ? ? ? ? ? ? ? ? mCamera0.setPreviewTexture(mTextureView0.getSurfaceTexture());
  34. ?
  35. ? ? ? ? ? ? ? ? // 处理完数据之后预览
  36. ? ? ? ? ? ? ? ? mCamera0.startPreview();
  37. ? ? ? ? ? ? } catch (Exception e) {
  38. ? ? ? ? ? ? ? ? // TODO Auto-generated catch block
  39. ? ? ? ? ? ? ? ? e.printStackTrace();
  40. ? ? ? ? ? ? }
  41. ? ? ? ? }
  42. ?
  43. };

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

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

4、创建文件夹

  1. // 创建 文件夹
  2. public static void CreateFile(String path) {
  3. ? ? ? ? File destDir = new File(path);
  4. ? ? ? ? if (!destDir.exists()) {
  5. ? ? ? ? ? ? Log.i(TAG,"文件夹创建成功");
  6. ? ? ? ? ? ? destDir.mkdirs();
  7. ? ? ? ? } else {
  8. ? ? ? ? ? ? Log.i(TAG,"文件夹已存在");
  9. ? ? ? ? }
  10. ? ? }

5、Java 实现添加水印

  1. /**
  2. ?? ? * 设置文字水印
  3. ?? ? *?
  4. ?? ? * @param sourceImg
  5. ?? ? * ? ? ? ? ? ?源图片路径
  6. ?? ? * @param targetImg
  7. ?? ? * ? ? ? ? ? ?保存的图片路径
  8. ?? ? * @param content
  9. ?? ? * ? ? ? ? ? ?内容
  10. ?? ? * @param font
  11. ?? ? * ? ? ? ? ? ?水印字体大小
  12. ? ? ? ? ?* Font font = new Font("微软雅黑", Font.BOLD, 16);
  13. ?? ? * @throws IOException
  14. */
  15. public void addWatermark(String sourceImg, String targetImg,String content, Font font) throws IOException {
  16. ?? ??? ?
  17. ?? ??? ?File srcImgFile = new File(sourceImg);
  18. ?? ??? ?Image srcImg = ImageIO.read(srcImgFile);
  19. ?
  20. ?? ??? ?int srcImgWidth = srcImg.getWidth(null);
  21. ?? ??? ?int srcImgHeight = srcImg.getHeight(null);
  22. ?
  23. ?? ??? ?BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight,BufferedImage.TYPE_INT_RGB);
  24. ?? ??? ?Graphics2D g = bufImg.createGraphics();
  25. ?? ??? ?g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
  26. ?
  27. ?? ??? ?g.setColor(Color.BLACK);
  28. ?? ??? ?g.setFont(font);
  29. ?
  30. ?? ??? ?if (content.equals("model")) {
  31. ?? ??? ??? ?// 添加 设备名、MADE IN
  32. ?? ??? ??? ?g.drawString(content, 350, 110);
  33. ?? ??? ??? ?g.drawString(mMade, 50, 340);
  34. ?? ??? ?} else {
  35. ?? ??? ??? ?// 设置水印的坐标 标题
  36. ?? ??? ??? ?g.drawString(content, 50, 115);
  37. ?? ??? ?}
  38. ?? ??? ?g.dispose();
  39. ?
  40. ?? ??? ?// 输出图片
  41. ?? ??? ?FileOutputStream outImgStream = new FileOutputStream(targetImg);
  42. ?? ??? ?ImageIO.write(bufImg, "jpg", outImgStream);
  43. ?? ??? ?System.out.println("文字水印添加完成");
  44. ?? ??? ?outImgStream.flush();
  45. ?? ??? ?outImgStream.close();
  46. ?? ?}

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号