private bool TryToDetectFaceAndResizeImage(KeyValuePair <string, EPiFaceImageAttribute> faceImagePropertyDef, ImageData image, Image imageDetails, out byte[] faceResizedImage) { faceResizedImage = null; IList <DetectedFace> detectedFaces = FaceRecognitionService.DetectFace(image.BinaryData); if (detectedFaces?.Count == 0) { return(false); } DetectedFace firstFace = detectedFaces.FirstOrDefault(); FaceImageDimensions faceImageDimensions = new FaceImageDimensions(firstFace, faceImagePropertyDef.Value.FacePercentage, imageDetails); faceResizedImage = ImageResizeService.CutAndResizeImage(image.BinaryData.ReadAllBytes(), faceImageDimensions, faceImagePropertyDef.Value.Width, faceImagePropertyDef.Value.Height); return(true); }
internal static byte[] CutImage(Image image, FaceImageDimensions imageDimensions) { var destRect = new Rectangle(0, 0, imageDimensions.Width, imageDimensions.Height); var destImage = new Bitmap(imageDimensions.Width, imageDimensions.Height); destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); using (var graphics = Graphics.FromImage(destImage)) { graphics.CompositingMode = CompositingMode.SourceCopy; graphics.CompositingQuality = CompositingQuality.HighQuality; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; using (var wrapMode = new ImageAttributes()) { wrapMode.SetWrapMode(WrapMode.TileFlipXY); graphics.DrawImage(image, destRect, imageDimensions.MinX, imageDimensions.MinY, imageDimensions.Width, imageDimensions.Height, GraphicsUnit.Pixel, wrapMode); } } return(destImage.BitmapToByteArray()); }
internal static byte[] CutImage(byte[] image, FaceImageDimensions imageDimensions) { return(CutImage(image.ByteArrayToImage(), imageDimensions)); }
internal static byte[] CutAndResizeImage(byte[] image, FaceImageDimensions imageDimensions, int outputWidth, int outputHeight) { return(CutAndResizeImage(image.ByteArrayToImage(), imageDimensions, outputWidth, outputHeight)); }
internal static byte[] CutAndResizeImage(Image image, FaceImageDimensions imageDimensions, int outputWidth, int outputHeight) { byte[] faceOnly = CutImage(image, imageDimensions); return(ResizeImage(faceOnly, outputWidth, outputHeight)); }