android後臺打水印,並進行壓縮

package com.unicom;

import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import    java.text.SimpleDateFormat;

import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

import java.util.Date;
import java.util.UUID;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import io.dcloud.application.DCloudApplication;

/**
 * Created by YueYan on 2018/8/7.
 */

public class JavaActivity{

    public String merge(String url,String dataStr) throws Exception {
        File zhang = new File(url);
        Bitmap bitmap1 = BitmapFactory.decodeStream(new FileInputStream(zhang));
        String[] filePathArr = url.split("/");
        String fileNameStr = filePathArr[filePathArr.length-1];
        String[] fileNameArr = fileNameStr.split("\\.");
        String fileType = fileNameArr[1];

        SimpleDateFormat    formatter    =   new    SimpleDateFormat    ("yyyyMMdd_HHmmss");
        Date curDate    =   new    Date(System.currentTimeMillis());//獲取當前時間
        String    str    =    formatter.format(curDate);
        String fileName = "IMG_"+str+"."+fileType;
        File zhangphil = new File("/storage/emulated/0/DCIM/Camera/"+fileName);
        if (!zhangphil.exists())
            zhangphil.createNewFile();
        //中間高度位置添加水印文字。
        Bitmap bitmap2 = addTextWatermark(bitmap1,dataStr, Color.BLUE, bitmap1.getWidth(), bitmap1.getHeight(), true);
        save(bitmap2, zhangphil, Bitmap.CompressFormat.JPEG, true,fileName);


        return  "/storage/emulated/0/DCIM/Camera/"+fileName;
    }

    /**
     * 給一張Bitmap添加水印文字。
     *
     * @param src      源圖片
     * @param content  水印文本
     * @param color    水印字體顏色。
     * @param x        起始座標x
     * @param y        起始座標y
     * @param recycle  是否回收
     * @return 已經添加水印後的Bitmap。
     */
    public static Bitmap addTextWatermark(Bitmap src, String content, int color, int x, int y, boolean recycle) {
        if (isEmptyBitmap(src) || content == null)
            return null;
        Bitmap ret = src.copy(src.getConfig(), true);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        //Canvas canvas = new Canvas(ret);
        Rect bounds = new Rect();
       //添加多行水印,逗號隔開,並根據圖片大小設置字體大小和水印間隔
        String[] paintArr =  content.split(",");
        int fontSize = x/20;
        if(fontSize>120) {
            fontSize=120;
        }
        int xw = 50;
        int fontSizeJJ = fontSize+fontSize/10;
        int yBngin = y-50-fontSizeJJ* paintArr.length;
        paint.setColor(color);
        paint.setTextSize(fontSize);
        for (int i =0;i<paintArr.length;i++  ) {
            yBngin=yBngin+fontSizeJJ;
            String str = paintArr[i];
            Canvas canvas = new Canvas(ret);
            paint.getTextBounds(str, 0, paintArr[i].length(), bounds);
            canvas.drawText(str, xw, yBngin, paint);
        }
        if (recycle && !src.isRecycled())
            src.recycle();
        return ret;
    }

    /**
     * 保存圖片到文件File。
     *
     * @param src     源圖片
     * @param file    要保存到的文件
     * @param format  格式
     * @param recycle 是否回收
     * @return true 成功 false 失敗
     */
    public boolean save(Bitmap src, File file, Bitmap.CompressFormat format, boolean recycle,String fileName) {
        if (isEmptyBitmap(src))
            return false;

        OutputStream os;
        boolean ret = false;
        try {
            os = new BufferedOutputStream(new FileOutputStream(file));
            ret = src.compress(format, 50, os);//50爲0-100之間的值,100不壓縮,
            String fileNames = file.getAbsolutePath();
            Bitmap bmp = src;
            Context mContext = DCloudApplication.getInstance();
            MediaStore.Images.Media.insertImage(mContext.getContentResolver(),
                    bmp, fileNames, null);
            //圖片保存後要加載下,不然圖片不會再相冊中顯示
            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
            Uri uri = Uri.fromFile(file);
            intent.setData(uri);
            mContext.sendBroadcast(intent);
            if (recycle && !src.isRecycled())
                src.recycle();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return ret;
    }

    /**
     * Bitmap對象是否爲空。
     */
    public static boolean isEmptyBitmap(Bitmap src) {
        return src == null || src.getWidth() == 0 || src.getHeight() == 0;
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章