首页 > 系统 > 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);  }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表