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;

    }

 

你可能感兴趣的:(android)