Example #1
0
        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));
 }