Skip to content
Shiny .NET v4 is here with BLE Windows Support, Improved GPS, & More! Check It Out

ImageEditor | Save & Export

Bind SaveCommand to receive an EditedImage object when the user taps Save:

[RelayCommand]
async Task Save(EditedImage editedImage)
{
await using var stream = await editedImage.ToStreamAsync(ImageExportFormat.Png);
var filePath = Path.Combine(FileSystem.CacheDirectory, "edited.png");
await using var fileStream = File.Create(filePath);
await stream.CopyToAsync(fileStream);
}

ToStreamAsync parameters:

ParameterTypeDefaultDescription
formatImageExportFormatPngOutput format: Png, Jpeg, or Webp
qualityfloat0.92Compression quality (0—1, applies to Jpeg/Webp)
widthint?nullTarget width (null = original image width)
heightint?nullTarget height (null = original image height)

You can also get the EditedImage programmatically via editor.GetEditedImage().

public partial class ImageEditorViewModel : ObservableObject
{
[ObservableProperty] ImageSource? imageSource = "photo.png";
[ObservableProperty] bool canUndo;
[ObservableProperty] bool canRedo;
[ObservableProperty] ImageEditorToolMode currentToolMode;
[ObservableProperty] Color drawColor = Colors.White;
[RelayCommand]
async Task PickImage()
{
var result = await MediaPicker.PickPhotoAsync();
if (result == null) return;
ImageSource = ImageSource.FromFile(result.FullPath);
}
[RelayCommand]
async Task Save(EditedImage editedImage)
{
await using var stream = await editedImage.ToStreamAsync(ImageExportFormat.Png);
// Save stream to file, upload, etc.
}
}

The Blazor <ImageEditor> component mirrors the MAUI control. Use @ref to call methods like GetEditedImage:

<ImageEditor @ref="editor"
Source="@imageUrl"
AllowCrop="true"
AllowDraw="true"
DrawStrokeColor="#ffffff"
CanUndoChanged="v => canUndo = v"
CanRedoChanged="v => canRedo = v" />
@code {
ImageEditor? editor;
string? imageUrl = "https://example.com/photo.jpg";
bool canUndo, canRedo;
}