国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android給圖片加文字和圖片水印實例代碼

2019-12-12 02:59:29
字體:
來源:轉載
供稿:網友

我們在做項目的時候有時候需要給圖片添加水印,水寒今天就遇到了這樣的問題,所以搞了一個工具類,貼出來大家直接調用就行。

/** * 圖片工具類 * @author 水寒 * */public class ImageUtil {  /**   * 設置水印圖片在左上角   * @param Context   * @param src   * @param watermark   * @param paddingLeft   * @param paddingTop   * @return   */  public static Bitmap createWaterMaskLeftTop(      Context context, Bitmap src, Bitmap watermark,      int paddingLeft, int paddingTop) {    return createWaterMaskBitmap(src, watermark,         dp2px(context, paddingLeft), dp2px(context, paddingTop));  }  private static Bitmap createWaterMaskBitmap(Bitmap src, Bitmap watermark,      int paddingLeft, int paddingTop) {    if (src == null) {      return null;    }    int width = src.getWidth();    int height = src.getHeight();    //創建一個bitmap    Bitmap newb = Bitmap.createBitmap(width, height, Config.ARGB_8888);// 創建一個新的和SRC長度寬度一樣的位圖    //將該圖片作為畫布    Canvas canvas = new Canvas(newb);    //在畫布 0,0坐標上開始繪制原始圖片    canvas.drawBitmap(src, 0, 0, null);    //在畫布上繪制水印圖片    canvas.drawBitmap(watermark, paddingLeft, paddingTop, null);    // 保存    canvas.save(Canvas.ALL_SAVE_FLAG);    // 存儲    canvas.restore();    return newb;  }  /**   * 設置水印圖片在右下角   * @param Context   * @param src   * @param watermark   * @param paddingRight   * @param paddingBottom   * @return   */  public static Bitmap createWaterMaskRightBottom(      Context context, Bitmap src, Bitmap watermark,      int paddingRight, int paddingBottom) {    return createWaterMaskBitmap(src, watermark,         src.getWidth() - watermark.getWidth() - dp2px(context, paddingRight),         src.getHeight() - watermark.getHeight() - dp2px(context, paddingBottom));  }  /**   * 設置水印圖片到右上角   * @param Context   * @param src   * @param watermark   * @param paddingRight   * @param paddingTop   * @return   */  public static Bitmap createWaterMaskRightTop(      Context context, Bitmap src, Bitmap watermark,      int paddingRight, int paddingTop) {    return createWaterMaskBitmap( src, watermark,         src.getWidth() - watermark.getWidth() - dp2px(context, paddingRight),         dp2px(context, paddingTop));  }  /**   * 設置水印圖片到左下角   * @param Context   * @param src   * @param watermark   * @param paddingLeft   * @param paddingBottom   * @return   */  public static Bitmap createWaterMaskLeftBottom(      Context context, Bitmap src, Bitmap watermark,      int paddingLeft, int paddingBottom) {    return createWaterMaskBitmap(src, watermark, dp2px(context, paddingLeft),         src.getHeight() - watermark.getHeight() - dp2px(context, paddingBottom));  }  /**   * 設置水印圖片到中間   * @param Context   * @param src   * @param watermark   * @return   */  public static Bitmap createWaterMaskCenter(Bitmap src, Bitmap watermark) {    return createWaterMaskBitmap(src, watermark,         (src.getWidth() - watermark.getWidth()) / 2,        (src.getHeight() - watermark.getHeight()) / 2);  }  /**   * 給圖片添加文字到左上角   * @param context   * @param bitmap   * @param text   * @return   */  public static Bitmap drawTextToLeftTop(Context context, Bitmap bitmap, String text,      int size, int color, int paddingLeft, int paddingTop) {    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);    paint.setColor(color);    paint.setTextSize(dp2px(context, size));    Rect bounds = new Rect();    paint.getTextBounds(text, 0, text.length(), bounds);    return drawTextToBitmap(context, bitmap, text, paint, bounds,         dp2px(context, paddingLeft),         dp2px(context, paddingTop) + bounds.height());  }  /**   * 繪制文字到右下角   * @param context   * @param bitmap   * @param text   * @param size   * @param color   * @param paddingLeft   * @param paddingTop   * @return   */  public static Bitmap drawTextToRightBottom(Context context, Bitmap bitmap, String text,      int size, int color, int paddingRight, int paddingBottom) {    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);    paint.setColor(color);    paint.setTextSize(dp2px(context, size));    Rect bounds = new Rect();    paint.getTextBounds(text, 0, text.length(), bounds);    return drawTextToBitmap(context, bitmap, text, paint, bounds,         bitmap.getWidth() - bounds.width() - dp2px(context, paddingRight),         bitmap.getHeight() - dp2px(context, paddingBottom));  }  /**   * 繪制文字到右上方   * @param context   * @param bitmap   * @param text   * @param size   * @param color   * @param paddingRight   * @param paddingTop   * @return   */  public static Bitmap drawTextToRightTop(Context context, Bitmap bitmap, String text,      int size, int color, int paddingRight, int paddingTop) {    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);    paint.setColor(color);    paint.setTextSize(dp2px(context, size));    Rect bounds = new Rect();    paint.getTextBounds(text, 0, text.length(), bounds);    return drawTextToBitmap(context, bitmap, text, paint, bounds,         bitmap.getWidth() - bounds.width() - dp2px(context, paddingRight),         dp2px(context, paddingTop) + bounds.height());  }  /**   * 繪制文字到左下方   * @param context   * @param bitmap   * @param text   * @param size   * @param color   * @param paddingLeft   * @param paddingBottom   * @return   */  public static Bitmap drawTextToLeftBottom(Context context, Bitmap bitmap, String text,      int size, int color, int paddingLeft, int paddingBottom) {    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);    paint.setColor(color);    paint.setTextSize(dp2px(context, size));    Rect bounds = new Rect();    paint.getTextBounds(text, 0, text.length(), bounds);    return drawTextToBitmap(context, bitmap, text, paint, bounds,         dp2px(context, paddingLeft),         bitmap.getHeight() - dp2px(context, paddingBottom));  }  /**   * 繪制文字到中間   * @param context   * @param bitmap   * @param text   * @param size   * @param color   * @return   */  public static Bitmap drawTextToCenter(Context context, Bitmap bitmap, String text,      int size, int color) {    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);    paint.setColor(color);    paint.setTextSize(dp2px(context, size));    Rect bounds = new Rect();    paint.getTextBounds(text, 0, text.length(), bounds);    return drawTextToBitmap(context, bitmap, text, paint, bounds,         (bitmap.getWidth() - bounds.width()) / 2,         (bitmap.getHeight() + bounds.height()) / 2);  }  //圖片上繪制文字  private static Bitmap drawTextToBitmap(Context context, Bitmap bitmap, String text,      Paint paint, Rect bounds, int paddingLeft, int paddingTop) {    android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig();    paint.setDither(true); // 獲取跟清晰的圖像采樣    paint.setFilterBitmap(true);// 過濾一些    if (bitmapConfig == null) {      bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;    }    bitmap = bitmap.copy(bitmapConfig, true);    Canvas canvas = new Canvas(bitmap);    canvas.drawText(text, paddingLeft, paddingTop, paint);    return bitmap;  }  /**   * 縮放圖片   * @param src   * @param w   * @param h   * @return   */  public static Bitmap scaleWithWH(Bitmap src, double w, double h) {    if (w == 0 || h == 0 || src == null) {      return src;    } else {      // 記錄src的寬高      int width = src.getWidth();      int height = src.getHeight();      // 創建一個matrix容器      Matrix matrix = new Matrix();      // 計算縮放比例      float scaleWidth = (float) (w / width);      float scaleHeight = (float) (h / height);      // 開始縮放      matrix.postScale(scaleWidth, scaleHeight);      // 創建縮放后的圖片      return Bitmap.createBitmap(src, 0, 0, width, height, matrix, true);    }  }  /**   * dip轉pix   * @param context   * @param dp   * @return   */  public static int dp2px(Context context, float dp) {     final float scale = context.getResources().getDisplayMetrics().density;     return (int) (dp * scale + 0.5f);   } }

使用方法如下:

添加一個布局,上面是原始圖片,下面是添加水印后的圖片

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical">  <TextView    android:id="@+id/sour_pic_title"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="原圖" />  <ImageView     android:id="@+id/sour_pic"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:scaleType="centerInside"/>  <TextView    android:id="@+id/watermark_pic_title"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="水印" />  <ImageView     android:id="@+id/wartermark_pic"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:scaleType="centerInside"/></LinearLayout>

在Activity中獲取到ImageView對象,并且獲取Bitmap對象,對Bitmap進行canva繪圖,添加水印:

/** * 圖片工具類 * @author 水寒 * */public class MainActivity extends Activity {  private ImageView mSourImage;  private ImageView mWartermarkImage;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    initView();  }  private void initView(){    mSourImage = (ImageView) findViewById(R.id.sour_pic);    mWartermarkImage = (ImageView) findViewById(R.id.wartermark_pic);    Bitmap sourBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sour_pic);    mSourImage.setImageBitmap(sourBitmap);    Bitmap waterBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.weixin);    Bitmap watermarkBitmap = ImageUtil.createWaterMaskCenter(sourBitmap, waterBitmap);    watermarkBitmap = ImageUtil.createWaterMaskLeftBottom(this, watermarkBitmap, waterBitmap, 0, 0);    watermarkBitmap = ImageUtil.createWaterMaskRightBottom(this, watermarkBitmap, waterBitmap, 0, 0);    watermarkBitmap = ImageUtil.createWaterMaskLeftTop(this, watermarkBitmap, waterBitmap, 0, 0);    watermarkBitmap = ImageUtil.createWaterMaskRightTop(this, watermarkBitmap, waterBitmap, 0, 0);    Bitmap textBitmap = ImageUtil.drawTextToLeftTop(this, watermarkBitmap, "左上角", 16, Color.RED, 0, 0);    textBitmap = ImageUtil.drawTextToRightBottom(this, textBitmap, "右下角", 16, Color.RED, 0, 0);    textBitmap = ImageUtil.drawTextToRightTop(this, textBitmap, "右上角", 16, Color.RED, 0, 0);    textBitmap = ImageUtil.drawTextToLeftBottom(this, textBitmap, "左下角", 16, Color.RED, 0, 0);    textBitmap = ImageUtil.drawTextToCenter(this, textBitmap, "中間", 16, Color.RED);    mWartermarkImage.setImageBitmap(textBitmap);  }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 松潘县| 北京市| 石河子市| 巴中市| 漳浦县| 常山县| 法库县| 包头市| 义乌市| 左云县| 迁安市| 乌海市| 桃园县| 静宁县| 丽江市| 白河县| 舞钢市| 锡林郭勒盟| 尖扎县| 青州市| 吉林省| 珠海市| 河北区| 孝义市| 泊头市| 泌阳县| 枣庄市| 都江堰市| 江山市| 江源县| 河曲县| 福清市| 南江县| 赤壁市| 井冈山市| 衢州市| 正镶白旗| 乐昌市| 衡山县| 曲麻莱县| 怀安县|