• 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;
        }
  • 相关阅读:
    js 原生ajax实现
    layer 查看图片
    c# 操作XML
    C# 扩展方法
    c# 依赖注入
    visual studio 快捷键
    HIS系统结算后,没有更新单据状态为“已结算”
    网络流四·最小路径覆盖 HihoCoder
    飞行员配对(二分图最大匹配) 51Nod
    开心的小Q 51Nod
  • 原文地址:https://www.cnblogs.com/meieiem/p/2639543.html
Copyright © 2020-2023  润新知