圖片的常用幾種圖形變換
阿新 • • 發佈:2019-01-07
一、根據原圖繪製圓形圖片
/** * 根據原圖和變長繪製圓形圖片 * * @param source * @param min * @return */ public static Bitmap getCircleImage(Bitmap source) { if (source==null) { return null; } int width=source.getWidth(); int height=source.getHeight(); int l=0; if (width>=height) { l=height; }else { l=width; } final Paint paint = new Paint(); paint.setAntiAlias(true); Bitmap target = Bitmap.createBitmap(l, l, Config.ARGB_8888); /** * 產生一個同樣大小的畫布 */ Canvas canvas = new Canvas(target); /** * 首先繪製圓形 */ canvas.drawCircle(l / 2, l / 2, l / 2, paint); /** * 使用SRC_IN */ paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); /** * 繪製圖片 */ canvas.drawBitmap(source, 0, 0, paint); return target; }
二、將原圖片變成圓角圖片
/** * 將原圖片變成圓角圖片 * * @param bitmap * 需要修改的圖片 * @param pixels * 圓角的弧度 * @return 圓角圖片 */ public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) { Bitmap target= Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(target); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); final float roundPx = pixels; paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return target; }
三、製作水印圖片,水印在右下角
/** * 水印 * * @param bitmap * @return */ public static Bitmap createBitmapForWatermark(Bitmap src, Bitmap watermark) { 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; }
四、圖片合成
public static final int LEFT = 0;
public static final int RIGHT = 1;
public static final int TOP = 3;
public static final int BOTTOM = 4;
/**
* 圖片合成
*
* @return
*/
public static Bitmap potoMix(int direction, Bitmap... bitmaps) {
if (bitmaps.length <= 0) {
return null;
}
if (bitmaps.length == 1) {
return bitmaps[0];
}
Bitmap newBitmap = bitmaps[0];
// newBitmap = createBitmapForFotoMix(bitmaps[0],bitmaps[1],direction);
for (int i = 1; i < bitmaps.length; i++) {
newBitmap = createBitmapForFotoMix(newBitmap, bitmaps[i], direction);
}
return newBitmap;
}
private static Bitmap createBitmapForFotoMix(Bitmap first, Bitmap second,
int direction) {
if (first == null) {
return null;
}
if (second == null) {
return first;
}
int fw = first.getWidth();
int fh = first.getHeight();
int sw = second.getWidth();
int sh = second.getHeight();
Bitmap newBitmap = null;
if (direction == LEFT) {
newBitmap = Bitmap.createBitmap(fw + sw, fh > sh ? fh : sh,
Config.ARGB_8888);
Canvas canvas = new Canvas(newBitmap);
canvas.drawBitmap(first, sw, 0, null);
canvas.drawBitmap(second, 0, 0, null);
} else if (direction == RIGHT) {
newBitmap = Bitmap.createBitmap(fw + sw, fh > sh ? fh : sh,
Config.ARGB_8888);
Canvas canvas = new Canvas(newBitmap);
canvas.drawBitmap(first, 0, 0, null);
canvas.drawBitmap(second, fw, 0, null);
} else if (direction == TOP) {
newBitmap = Bitmap.createBitmap(sw > fw ? sw : fw, fh + sh,
Config.ARGB_8888);
Canvas canvas = new Canvas(newBitmap);
canvas.drawBitmap(first, 0, sh, null);
canvas.drawBitmap(second, 0, 0, null);
} else if (direction == BOTTOM) {
newBitmap = Bitmap.createBitmap(sw > fw ? sw : fw, fh + sh,
Config.ARGB_8888);
Canvas canvas = new Canvas(newBitmap);
canvas.drawBitmap(first, 0, 0, null);
canvas.drawBitmap(second, 0, fh, null);
}
return newBitmap;
}
五、圖片轉化為PNG
/**
* 儲存圖片為PNG
*
* @param bitmap 原圖
* @param path 儲存檔案的路徑
*/
public static void savePNG_After(Bitmap bitmap, String path) {
File file = new File(path);
Log.e("getAbsolutePath", file.getAbsolutePath());
try {
FileOutputStream out = new FileOutputStream(file);
if (bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)) {
out.flush();
out.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
六、圖片轉化為JPEG
/**
* 儲存圖片為JPEG
*
* @param bitmap 原圖
* @param path 儲存檔案的路徑
*/
public static void saveJPGE_After(Bitmap bitmap, String path) {
File file = new File(path);
try {
FileOutputStream out = new FileOutputStream(file);
if (bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out)) {
out.flush();
out.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
七、圖片去色,返回灰度圖片
/**
* 圖片去色,返回灰度圖片
*
* @param bmpOriginal
* 傳入的圖片
* @return 去色後的圖片
*/
public static Bitmap toGrayscale(Bitmap bmpOriginal) {
int width, height;
height = bmpOriginal.getHeight();
width = bmpOriginal.getWidth();
Bitmap bmpGrayscale = Bitmap.createBitmap(width, height,
Bitmap.Config.RGB_565);
Canvas c = new Canvas(bmpGrayscale);
Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
paint.setColorFilter(f);
c.drawBitmap(bmpOriginal, 0, 0, paint);
return bmpGrayscale;
}