These are:
- Resizing images – usually with a specific size in mind
- Knowing what size and existing image is
- Converting an image between png and jpeg formats
All the source code for the above can be found here, and the nuget package is available here.
All the code assumes images are in byte[] format – what you’d normally use for storing images in database repos etc.
As an aside – there’s a separate Xamarin Forms Value Converter nuget for binding a byte[] image to an ImageSource here
For all the code, you can choose to use the command interface, or the ImageTools interface, which wraps the functionality in explicit method calls.
Resizing an Image
This is the most common requirement for image manipulation.Images taken from disc, or using the camera are usually way to big to be included for wire transfers or light weight repo stores. Other usages are perhaps generating a pre-defined size thumbnail image.
IResizeImageCommand resizeCommand = DependencyService.Get<IResizeImageCommand>();
ResizeImageContext context = new ResizeImageContext { Height = 130, Width = 130, OriginalImage = image };
var resizeResult = await resizeCommand.ExecuteAsync(context);
if (resizeResult.IsValid())
{
image = resizeResult.ResizedImage;
}
Analyze an Image
Sometimes you just want to know what the dimensions of an image is, or what size it is, or in what orientation: var analyseImage = DependencyService.Get<IAnalyseImageCommand>();
var analyseResult = await analyseImage.ExecuteAsync(new AnalyseImageContext { Image = imageAsBytes });
if (analyseResult.IsValid())
{
var imageWidth = analyseResult.Width.ToString();
var imageHeight = analyseResult.Height.ToString();
var orientation = analyseResult.Orientaion.ToString();
var size = analyseResult.SizeInKB.ToString();
}
Convert an Image (Png and Jpeg support only)
I needed this recently because the pdf library I was using only supported jpeg files.var imageTools = DependencyService.Get<IImageTools>();
var convertResult = await imageTools.ConvertImageAsync(new ConvertImageContext(Logo, ImageFormat.Jpeg));
if (convertResult.TaskResult == TaskResult.Success)
{
ConvertedLogo = convertResult.ConvertedImage;
ConvertedSize = ConvertedLogo.SizeInKB().ToString();
}
Here I’m using the ImageTools dependency – you could just as easily have used the command as in the first two examples.
…. I haven’t tested all the platforms extensively, so if you find a bug, feel free to log an issue on github, or better yet: a pull request with the fix.
No comments:
Post a Comment