blob: 8a720b414ddfc05597a6d6ce2ec41c09e65bb3f2 [file] [log] [blame]
import 'dart:html' as Html;
import 'package:image/image.dart';
import 'dart:convert';
Html.InputElement fileInput;
void main() {
// There are at least two ways to get a file into an html dart app:
// using a file Input element, or an AJAX HttpRequest.
// This example demonstrates using a file Input element.
fileInput = Html.querySelector("#file");
fileInput.addEventListener("change", onFileChanged);
}
/**
* Called when the user has selected a file.
*/
void onFileChanged(Html.Event event) {
Html.FileList files = fileInput.files;
var file = files.item(0);
Html.FileReader reader = new Html.FileReader();
reader.addEventListener("load", onFileLoaded);
reader.readAsArrayBuffer(file);
}
/**
* Called when the file has been read.
*/
void onFileLoaded(Html.Event event) {
Html.FileReader reader = event.currentTarget;
var bytes = reader.result;
// Find a decoder that is able to decode the given file contents.
Decoder decoder = findDecoderForData(bytes);
if (decoder == null) {
print('Could not find format decoder for file');
return;
}
// If a decoder was found, decode the file contents into an image.
Image image = decoder.decodeImage(bytes);
// If the image was able to be decoded, we can display it in a couple
// different ways. We could encode it to a format that can be displayed
// by an IMG image element (like PNG or JPEG); or we could draw it into
// a canvas.
if (image != null) {
// Add a separator to the html page
Html.document.body.append(new Html.ParagraphElement());
// Draw the image into a canvas. First create a canvas at the correct
// resolution.
var c = new Html.CanvasElement();
Html.document.body.append(c);
c.width = image.width;
c.height = image.height;
// Create a buffer that the canvas can draw.
Html.ImageData d = c.context2D.createImageData(c.width, c.height);
// Fill the buffer with our image data.
d.data.setRange(0, d.data.length, image.getBytes());
// Draw the buffer onto the canvas.
c.context2D.putImageData(d, 0, 0);
// OR we could use an IMG element to display the image.
// This requires encoding it to a common format (like PNG), base64 encoding
// the encoded image, and using a data url for the img src.
var img = new Html.ImageElement();
Html.document.body.append(img);
// encode the image to a PNG
var png = encodePng(image);
// base64 encode the png
var png64 = base64Encode(png);
// set the img src as a data url
img.src = 'data:image/png;base64,${png64}';
}
return;
}