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

首頁 > 系統(tǒng) > Android > 正文

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

2019-10-23 18:30:13
字體:
來源:轉載
供稿:網友

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

/** * 圖片工具類 * @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();    //創(chuàng)建一個bitmap    Bitmap newb = Bitmap.createBitmap(width, height, Config.ARGB_8888);// 創(chuàng)建一個新的和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/168375.html">android/212432.html">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();      // 創(chuàng)建一個matrix容器      Matrix matrix = new Matrix();      // 計算縮放比例      float scaleWidth = (float) (w / width);      float scaleHeight = (float) (h / height);      // 開始縮放      matrix.postScale(scaleWidth, scaleHeight);      // 創(chuàng)建縮放后的圖片      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);  }}

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


注:相關教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 轮台县| 乌兰浩特市| 宽城| 达尔| 溧水县| 天气| 兴山县| 桐城市| 托克逊县| 临武县| 年辖:市辖区| 麻阳| 左云县| 卓尼县| 同德县| 潼南县| 台山市| 文昌市| 安康市| 德昌县| 吴江市| 右玉县| 莆田市| 永平县| 香港 | 墨竹工卡县| 阿尔山市| 宣恩县| 吴旗县| 扎鲁特旗| 于都县| 炎陵县| 德令哈市| 和硕县| 当阳市| 绥滨县| 南木林县| 成安县| 湖北省| 紫阳县| 油尖旺区|