人臉裁剪類
public final class FaceCj { private static BitmapFactory.Options BitmapFactoryOptionsbfo; private static ByteArrayOutputStream out; private static byte[] data; private static FaceDetector.Face[] myFace; private static FaceDetector myFaceDetect; private static int tx = 0; private static int ty = 0; private static int bx = 0; private static int by = 0; private static int width = 0; private static int height = 0; private static float wuchax = 0; private static float wuchay = 0; private static FaceDetector.Face face; private static PointF myMidPoint; private static float myEyesDistance; private static List<String> facePaths; private static String facePath; public static Bitmap cutFace(Bitmap bitmap, Context context) { facePaths = null; BitmapFactoryOptionsbfo = new BitmapFactory.Options(); BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565; // 構(gòu)造位圖生成的參數(shù),必須為565。類名+enum out = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 50, out); data = out.toByteArray(); bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, BitmapFactoryOptionsbfo); try { out.flush(); out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } width = bitmap.getWidth(); height = bitmap.getHeight(); myFace = new FaceDetector.Face[5]; // 分配人臉數(shù)組空間 myFaceDetect = new FaceDetector(bitmap.getWidth(), bitmap.getHeight(), 5); int numberOfFaceDetected = myFaceDetect.findFaces(bitmap, myFace); if (numberOfFaceDetected <= 0) {// FaceDetector構(gòu)造實(shí)例并解析人臉 bitmap.recycle(); return null; } facePaths = new ArrayList<String>(); for (int i = 0; i < numberOfFaceDetected; i++) { face = myFace[i]; myMidPoint = new PointF(); face.getMidPoint(myMidPoint); myEyesDistance = face.eyesDistance(); //得到人臉中心點(diǎn)和眼間距離參數(shù),并對(duì)每個(gè)人臉進(jìn)行畫框 wuchax = myEyesDistance / 2 + myEyesDistance; wuchay = myEyesDistance * 2 / 3 + myEyesDistance; if (myMidPoint.x - wuchax < 0) {//判斷左邊是否出界 tx = 0; } else { tx = (int) (myMidPoint.x - wuchax); } if (myMidPoint.x + wuchax > width) {//判斷右邊是否出界 bx = width; } else { bx = (int) (myMidPoint.x + wuchax); } if (myMidPoint.y - wuchay < 0) {//判斷上邊是否出界 ty = 0; } else { ty = (int) (myMidPoint.y - wuchay); } if (myMidPoint.y + wuchay > height) {//判斷下邊是否出界 by = height; } else { by = (int) (myMidPoint.y + wuchay); } try { return Bitmap.createBitmap(bitmap, tx, ty, bx - tx, by - ty);//這里可以自行調(diào)整裁剪寬高 } catch (Exception e) { e.printStackTrace(); } } bitmap.recycle(); return bitmap; }}
總結(jié)
以上所述是小編給大家介紹的Android 裁剪人臉的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)VEVB武林網(wǎng)網(wǎng)站的支持!
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注