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();
}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?

