android 实现图片加水印
File fImage = new File("/sdcard/dcim","beijing.jpeg"); FileOutputStream iStream = new FileOutputStream(fImage); * 取出Bitmap oriBmp oriBmp.compress(CompressFormat.JPEG, 100, iStream); int w = 320,h = 240; String mstrTitle = “感受Android带给我们的新体验”; Bitmap mbmpTest = Bitmap.createBitmap(w,h, Config.ARGB_8888); Canvas canvasTemp = new Canvas(mbmpTest); canvasTemp.drawColor(Color.WHITE); Paint p = new Paint(); String familyName = “宋体”; Typeface font = Typeface.create(familyName,Typeface.BOLD); p.setColor(Color.RED); p.setTypeface(font); p.setTextSize(22); canvasTemp.drawText(mstrTitle,0,100,p); 6.图片水印的生成方法 生成水印的过程。其实分为三个环节:第一,载入原始图片;第二,载入水印图片;第三,保存新的图片。 /** * create the bitmap from a byte array * * @param src the bitmap object you want proecss * @param watermark the water mark above the src * @return return a bitmap object ,if paramter's length is 0,return null */ private Bitmap createBitmap( Bitmap src, Bitmap watermark ) { String tag = "createBitmap"; Log.d( tag, "create a new bitmap" ); if( src == null ) { return null; } int w = src.getWidth(); int h = src.getHeight(); int ww = watermark.getWidth(); int wh = watermark.getHeight(); //create the new blank bitmap Bitmap newb = Bitmap.createBitmap( w, h, Config.ARGB_8888 );//创建一个新的和SRC长度宽度一样的位图 Canvas cv = new Canvas( newb ); //draw src into cv.drawBitmap( src, 0, 0, null );//在 0,0坐标开始画入src //draw watermark into cv.drawBitmap( watermark, w - ww + 5, h - wh + 5, null );//在src的右下角画入水印 //save all clip cv.save( Canvas.ALL_SAVE_FLAG );//保存 //store cv.restore();//存储 return newb; } 转自:http://blog.csdn.net/hachirou/archive/2010/04/11/5473312.aspx
原文地址,http://www.devdiv.com/home.php?mod=space&uid=19970&do=blog&id=3868
//根据我自己的需要改进了一下
//获取图片缩小的图片 public static Bitmap scaleBitmap(String src,int max) { //获取图片的高和宽 BitmapFactory.Options options = new BitmapFactory.Options(); //这一个设置使 BitmapFactory.decodeFile获得的图片是空的,但是会将图片信息写到options中 options.inJustDecodeBounds = true; BitmapFactory.decodeFile(src, options); // 计算比例 为了提高精度,本来是要640 这里缩为64 max=max/10; int be = options.outWidth / max; if(be%10 !=0) be+=10; be=be/10; if (be <= 0) be = 1; options.inSampleSize = be; //设置可以获取数据 options.inJustDecodeBounds = false; //获取图片 return BitmapFactory.decodeFile(src, options); } // 加水印 也可以加文字 public static Bitmap watermarkBitmap(Bitmap src, Bitmap watermark, String title) { if (src == null) { return null; } int w = src.getWidth(); int h = src.getHeight(); //需要处理图片太大造成的内存超过的问题,这里我的图片很小所以不写相应代码了 Bitmap newb= Bitmap.createBitmap(w, h, Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图 Canvas cv = new Canvas(newb); cv.drawBitmap(src, 0, 0, null);// 在 0,0坐标开始画入src Paint paint=new Paint(); //加入图片 if (watermark != null) { int ww = watermark.getWidth(); int wh = watermark.getHeight(); paint.setAlpha(50); cv.drawBitmap(watermark, w - ww + 5, h - wh + 5, paint);// 在src的右下角画入水印 } //加入文字 if(title!=null) { String familyName ="宋体"; Typeface font = Typeface.create(familyName,Typeface.BOLD); TextPaint textPaint=new TextPaint(); textPaint.setColor(Color.RED); textPaint.setTypeface(font); textPaint.setTextSize(22); //这里是自动换行的 StaticLayout layout = new StaticLayout(title,textPaint,w,Alignment.ALIGN_NORMAL,1.0F,0.0F,true); layout.draw(cv); //文字就加左上角算了 //cv.drawText(title,0,40,paint); } cv.save(Canvas.ALL_SAVE_FLAG);// 保存 cv.restore();// 存储 return newb; }