Android 有關圖片水印設計的實現
阿新 • • 發佈:2020-07-09
例如:拍攝時間+地點文字水印與圖片水印
思路如下:
1.獲取要新增水印圖片寬高
Bitmap bitmap = BitmapFactory.decodeFile(new File(resources).getAbsolutePath()); // 獲取圖片的寬高 int bitmapWidth = bitmap.getWidth(); int bitmapHeight = bitmap.getHeight();
2.獲取水印圖片
//獲取水印圖片 Bitmap waterImage = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.ic_release_bg);
3.獲取縮放圖片
public static Bitmap getNewBitmap(Bitmap bitmap, int newWidth, int newHeight) { // 獲得圖片的寬高. int width = bitmap.getWidth(); int height = bitmap.getHeight(); // 計算縮放比例. float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; // 取得想要縮放的matrix引數.Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); // 得到新的圖片. Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); return newBitmap; }
4.繪製圖片到畫布
Bitmap newBitmap = getNewBitmap(waterImage, bitmapWidth, bitmapHeight); Canvas canvas= new Canvas(bmp); // 畫背景圖 canvas.drawBitmap(bitmap, 0, 0, null); //在畫布上繪製水印圖片 canvas.drawBitmap(newBitmap, 0, 0, null);
5.繪製文字,準備畫筆,確定繪製位置
//-------------開始繪製文字-------------- if (!TextUtils.isEmpty(watermarkText)) { int screenWidth = getScreenWidth(); float textSize = dp2px(mContext, 13) * bitmapWidth / screenWidth; // 建立畫筆 TextPaint mPaint = new TextPaint(); // 文字矩陣區域 Rect textBounds = new Rect(); // 水印的字型大小 mPaint.setTextSize(textSize); // 文字陰影 //mPaint.setShadowLayer(1f, 0f, 1f, Color.YELLOW); // 抗鋸齒 mPaint.setAntiAlias(true); // 水印的區域 mPaint.getTextBounds(watermarkText, 0, watermarkText.length(), textBounds); // 水印的顏色 mPaint.setColor(Color.WHITE); StaticLayout layout = new StaticLayout(watermarkText, 0, watermarkText.length(), mPaint, (int) (bitmapWidth - textSize), Layout.Alignment.ALIGN_NORMAL, 1.0F, 0.5F, true); // 文字開始的座標 float textX = dp2px(mContext, 8) * bitmapWidth / screenWidth; float textY = bitmapHeight - dp2px(mContext, 40) * bitmapHeight / screenWidth; // 畫文字 canvas.translate(textX, textY); layout.draw(canvas); } //儲存所有元素 canvas.save(); canvas.restore();
總結:至此,一個小的水印就繪製在了新的Bitmap上.我們根據新的Bitmap可以寫在本地,上傳伺服器.