1. 程式人生 > 實用技巧 >Android 有關圖片水印設計的實現

Android 有關圖片水印設計的實現

例如:拍攝時間+地點文字水印與圖片水印

思路如下:

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可以寫在本地,上傳伺服器.