Browse Source

添加图片加水印的插件

zhanglong7 5 years ago
parent
commit
17542b4319

+ 24 - 0
ipu-plugin-basic/build.gradle

1
apply plugin: 'java'
2
3
group = 'com.ai.ipu.mobile'
4
version = '3.0-SNAPSHOT'
5
6
tasks.withType(JavaCompile) {
7
	options.encoding = 'UTF-8'
8
}
9
10
repositories {
11
    maven { url "http://114.215.100.48:9090/nexus/content/groups/public/" }
12
}
13
14
dependencies {
15
	compileOnly group: 'junit', name: 'junit', version:'4.12'
16
	compileOnly group: 'android', name: 'android', version:'22'
17
	compileOnly group: 'com.ai.wade', name: 'wade-mobile-data', version:'1.0'
18
    compileOnly "android:android-lite-http:1.0"
19
	compileOnly "com.ai.ipu:ipu-basic:${IPU_VERSION}"
20
	compileOnly "com.ai.ipu.mobile:ipu-mobile-basic:${IPU_VERSION}"
21
	compileOnly "com.ai.ipu.mobile:ipu-mobile-framework:${IPU_VERSION}"
22
    compileOnly "com.ai.ipu.mobile:ipu-plugin-extend:${IPU_VERSION}"
23
    compileOnly "com.ai.ipu.mobile:ipu-mobile-ui:${IPU_VERSION}"
24
}

+ 18 - 0
ipu-plugin-basic/gradle.properties

1
## Project-wide Gradle settings.
2
#
3
# For more details on how to configure your build environment visit
4
# http://www.gradle.org/docs/current/userguide/build_environment.html
5
#
6
# Specifies the JVM arguments used for the daemon process.
7
# The setting is particularly useful for tweaking memory settings.
8
# Default value: -Xmx1024m -XX:MaxPermSize=256m
9
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
10
#
11
# When configured, Gradle will run in incubating parallel mode.
12
# This option should only be used with decoupled projects. More details, visit
13
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
14
# org.gradle.parallel=true
15
#
16
android_support_v4=1.0
17
IPU_VERSION=3.0-SNAPSHOT
18

+ 90 - 0
ipu-plugin-basic/src/main/java/com/ai/ipu/mobile/plugin/MobileCamera.java

1
package com.ai.ipu.mobile.plugin;
1
package com.ai.ipu.mobile.plugin;
2
2
3
import java.io.BufferedOutputStream;
3
import java.io.File;
4
import java.io.File;
5
import java.io.FileNotFoundException;
6
import java.io.FileOutputStream;
7
import java.io.IOException;
4
import java.text.SimpleDateFormat;
8
import java.text.SimpleDateFormat;
5
import java.util.Date;
9
import java.util.Date;
6
10
12
import android.database.Cursor;
16
import android.database.Cursor;
13
import android.graphics.Bitmap;
17
import android.graphics.Bitmap;
14
import android.graphics.BitmapFactory;
18
import android.graphics.BitmapFactory;
19
import android.graphics.Canvas;
20
import android.graphics.Rect;
15
import android.net.Uri;
21
import android.net.Uri;
16
import android.os.Bundle;
22
import android.os.Bundle;
17
import android.provider.MediaStore;
23
import android.provider.MediaStore;
23
import com.ai.ipu.mobile.ui.HintUtil;
29
import com.ai.ipu.mobile.ui.HintUtil;
24
import com.ai.ipu.mobile.ui.image.MobileGraphics;
30
import com.ai.ipu.mobile.ui.image.MobileGraphics;
25
import com.ai.ipu.mobile.util.DirectionUtil;
31
import com.ai.ipu.mobile.util.DirectionUtil;
32
import com.ai.ipu.mobile.util.IpuMobileLog;
26
import com.ai.ipu.mobile.util.IpuMobileUtility;
33
import com.ai.ipu.mobile.util.IpuMobileUtility;
27
import com.ailk.common.data.IData;
34
import com.ailk.common.data.IData;
28
import com.ailk.common.data.impl.DataMap;
35
import com.ailk.common.data.impl.DataMap;
288
		//cursor.close(); //关闭会报错
295
		//cursor.close(); //关闭会报错
289
		return path;
296
		return path;
290
	}
297
	}
298
	
299
	public void addWaterMarkForImage(JSONArray param) throws Exception {
300
	    String path = param.getString(0);
301
	    String waterPath = param.getString(1);
302
	    double left = param.getDouble(2);
303
	    double top = param.getDouble(3);
304
	    double right = param.getDouble(4);
305
	    double bottom = param.getDouble(5);
306
	    
307
	    String resultPath = addWaterMark(path, waterPath, left, top, right, bottom);
308
	    
309
	    callback(resultPath);
310
	}
311
	
312
	/**
313
    * @param path 原图片路径
314
    * @param waterPath 水印图片路径
315
    * @param left 水印图片左边位置,值为占整个图片的宽的比例
316
    * @param top 水印图片上边位置,值为占整个图片的高的比例
317
    * @param right 水印图片右边位置,值为占整个图片的宽的比例
318
    * @param bottom 水印图片下边位置,值为占整个图片的高的比例
319
    * @return 加了水印的图片路径
320
    */
321
   private String addWaterMark(String path, String waterPath, double left, double top, double right, double bottom) {
322
       Bitmap bitmap1 = BitmapFactory.decodeFile(path);
323
       Bitmap bitmap2 = BitmapFactory.decodeFile(waterPath);
324
       bitmap1 = bitmap1.copy(bitmap1.getConfig(), true);
325
       Canvas canvas = new Canvas(bitmap1);
326
327
       Rect rect = buildRect(bitmap1, left, top, right, bottom);
328
       canvas.drawBitmap(bitmap2, null, rect, null);
329
330
       String fileName = format.format(new Date()) + "-mark.png";
331
       File f = new File(DirectionUtil.getInstance(context).getImageDirection(true), fileName);
332
       if (!f.getParentFile().exists()) {
333
           f.getParentFile().mkdirs();
334
       }
335
       String res = f.getAbsolutePath();
336
       BufferedOutputStream bos = null;
337
       try {
338
           FileOutputStream outputStream = new FileOutputStream(f);
339
           bos = new BufferedOutputStream(outputStream);
340
           bitmap1.compress(Bitmap.CompressFormat.PNG, 100, bos);
341
       } catch (FileNotFoundException e) {
342
           e.printStackTrace();
343
           res = null;
344
       } finally {
345
           if (bos != null) {
346
               try {
347
                   bos.close();
348
               } catch (IOException e) {
349
                   e.printStackTrace();
350
               }
351
           }
352
       }
353
354
       return res;
355
   }
356
357
   private Rect buildRect(Bitmap bitmap, double left, double top, double right, double bottom) {
358
       left = fixIn1(left);
359
       right = fixIn1(right);
360
       top = fixIn1(top);
361
       bottom = fixIn1(bottom);
362
       int w = bitmap.getWidth();
363
       int h = bitmap.getHeight();
364
       int l = (int) (w * left);
365
       int t = (int) (h * top);
366
       int r = (int) (w * right);
367
       int b = (int) (h * bottom);
368
       if (l >= r || t >= b) {
369
           IpuMobileLog.w(TAG, "buildRect: invalid params");
370
           return new Rect(0, 0, w/4, h/4);
371
       }
372
       Rect rect = new Rect(l, t, r, b);
373
       return rect;
374
   }
375
376
   private double fixIn1(double v) {
377
       if (v > 1) v = 1;
378
       if (v < 0) v = 0;
379
       return v;
380
   }
291
}
381
}