人脸裁剪类
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; // 构造位图生成的参数,必须为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]; // 分配人脸数组空间 myFaceDetect = new FaceDetector(bitmap.getWidth(), bitmap.getHeight(), 5); int numberOfFaceDetected = myFaceDetect.findFaces(bitmap, myFace); if (numberOfFaceDetected <= 0) {// FaceDetector构造实例并解析人脸 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(); //得到人脸中心点和眼间距离参数,并对每个人脸进行画框 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);//这里可以自行调整裁剪宽高 } catch (Exception e) { e.printStackTrace(); } } bitmap.recycle(); return bitmap; } }
总结
以上所述是小编给大家介绍的Android 裁剪人脸的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。