Search This Blog

Thursday 11 November 2021

Xamain Form Image Resizer

Xamarin Form Project

Create the interface in your Xamarin Form Project.

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
 
namespace CollegeApp.Services.Interfaces
{
    public interface IImageCompression
    {
        byte[] ResizeImage(byte[] imageData, float width, float height);
    }
}
 

Now Create a Dependency Service in your Xamairn Android & Xamarin iOS Project.

Xamarin Android Project (ImageCompression.cs)

using Android.Graphics;
using CollegeApp.Droid.Services;
using CollegeApp.Services.Interfaces;
using System.IO;
using Xamarin.Forms;
 
[assembly: Dependency(typeof(ImageCompression))]
namespace CollegeApp.Droid.Services
{
    public class ImageCompression : IImageCompression
    {
        public byte[] ResizeImage(byte[] imageData, float width, float height)
        {
            Bitmap originalImage = BitmapFactory.DecodeByteArray(imageData, 0, imageData.Length);
            Bitmap resizedImage = Bitmap.CreateScaledBitmap(originalImage, (int)width, (int)height, false);
            using (MemoryStream ms = new MemoryStream())
            {
                resizedImage.Compress(Bitmap.CompressFormat.Jpeg,80, ms);
                return ms.ToArray();
            }
        }
    }
}


Xamarin iOS Project (ImageCompression.cs)

using CollegeApp.iOS.Services;
using CollegeApp.Services.Interfaces;
using CoreGraphics;
using Foundation;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using UIKit;
using Xamarin.Forms;
 
[assembly: Dependency(typeof(ImageCompression))]
namespace CollegeApp.iOS.Services
{
    public class ImageCompression : IImageCompression
    {
        //public Stream CompressImage(string filePath)
        //{
        //    UIImage image = UIImage.FromFile(filePath);
        //    if (image == null)
        //    {
        //        return null;
        //    }
        //    return image.AsJPEG(0.0f).AsStream();
        //}
 
        public byte[] ResizeImage(byte[] imageData, float width, float height)
        {
            UIImage originalImage = ImageFromByteArray(imageData);
            UIImageOrientation orientation = originalImage.Orientation;
 
            //create a 24bit RGB image
            using (CGBitmapContext context = new CGBitmapContext(IntPtr.Zero,
                                                 (int)width, (int)height, 8,
                                                 4 * (int)width, CGColorSpace.CreateDeviceRGB(),
                                                 CGImageAlphaInfo.PremultipliedFirst))
            {
 
                RectangleF imageRect = new RectangleF(0, 0, width, height);
 
                // draw the image
                context.DrawImage(imageRect, originalImage.CGImage);
 
                UIKit.UIImage resizedImage = UIKit.UIImage.FromImage(context.ToImage(), 0, orientation);
 
                // save the image as a jpeg
                return resizedImage.AsJPEG().ToArray();
            }
        }
        public static UIKit.UIImage ImageFromByteArray(byte[] data)
        {
            if (data == null)
            {
                return null;
            }
 
            UIKit.UIImage image;
            try
            {
                image = new UIKit.UIImage(Foundation.NSData.FromArray(data));
            }
            catch (Exception e)
            {
                Console.WriteLine("Image load failed: " + e.Message);
                return null;
            }
            return image;
        }
    }
}


How to Use (Xamairn Form Project)

For example, if you use Xamarin Essential Media Picker.

var file = await MediaPicker.PickPhotoAsync();
 
byte[] imageData;
var originalStream = await file.OpenReadAsync();
using (MemoryStream ms = new MemoryStream())
{
    originalStream.CopyTo(ms);
    imageData = ms.ToArray();
}
 
var resizedImage = DependencyService.Get<IImageCompression>().ResizeImage(imageData, 400, 400);



No comments:

Post a Comment

Popular Posts