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();
}
相關文章
- 如何給 GoPro 拍攝的影片新增時間水印 All In OneGo
- Flink基礎:時間和水印
- android 拍照Android
- Android - 利用擴充套件函式為Bitmap新增文字水印Android套件函式
- Android Camera——拍照Android
- Java 在Excel中新增水印(單一水印、平鋪水印)JavaExcel
- Python影像暗水印新增Python
- 批次圖片新增水印
- pdf程式碼新增水印
- 批量照片水印新增工具
- 前端如何優雅的新增水印及去除水印前端
- 第08講:Flink 視窗、時間和水印
- android短視訊開發,上傳視訊自動新增水印Android
- 拍照黨福利駕到 華為雲微認證教你實現圖片壓縮和水印新增
- 如何快速新增水印?水印製作軟體iWatermark Pro
- Web 頁面如何新增水印?Web
- SpringBoot 實現 PDF 新增水印Spring Boot
- 協同文件如何新增水印
- MySQL為欄位新增預設時間(插入時間)MySql
- Android自定義拍照實現Android
- Android呼叫攝像頭拍照Android
- Android程式中的時間Android
- DateUtils Android時間工具類Android
- csdn上傳gif圖不能新增水印
- Android提供的攝像頭拍照Android
- Java 給PDF簽名時新增可信時間戳Java時間戳
- 怎樣在報表中新增文字水印
- Java 在PPT中新增文字水印的簡易方法(單一/平鋪水印)Java
- Elasticsearch為記錄新增時間戳timestampElasticsearch時間戳
- Android Studio 呼叫Camera實現拍照功能Android
- Android本地圖片上傳(拍照+相簿)Android地圖
- 商品圖片批量加水印,一鍵新增文字、logo圖片水印方法分享Go
- Android 修改系統息屏時間.Android
- 報表中怎麼新增動態文字水印
- 用canvas生成圖片為頁面新增水印Canvas
- Java 在Word中新增多行圖片水印Java
- 照片系列之android呼叫攝像頭拍照Android
- C# 處理PPT水印(三)—— 在PPT中新增多行(平鋪)文字水印效果C#