Pixpipejs
- opening a distant image file with AJAX request, using
pixpipe.UrlImageReader
- creating a
pixpipe.Image2D
with the same size as the first, but monoband.
- - run a
pixpipe.ForEachPixelImageFilter
ont the monoband image to create a radial gradient (values in [0, 1])
- - multiply the loaded image with the gradient image using a
pixpipe.SpectralScaleImageFilter
+ - run a
pixpipe.ForEachPixelImageFilter
on the monoband image to create a radial gradient (values in [0, 1])
+ - blend the loaded image and the gradient using a
pixpipe.ImageBlendExpressionFilter
- displaying the final output in a canvas using
pixpipe.CanvasImageWriter
@@ -82,8 +82,11 @@ Pixpipejs
blendingFilter.setMetadata("expression", "A*B");
+ var t0 = performance.now();
// apply the gradient on the loaded image
blendingFilter.update();
+ var t1 = performance.now();
+ console.log("Call to doSomething took " + (t1 - t0) + " milliseconds.");
// create a filter to write the image into a canvas
var imageToCanvasFilter = new pixpipe.CanvasImageWriter( );
diff --git a/examples/imageBlending.html b/examples/imageBlending.html
new file mode 100644
index 0000000..c660f34
--- /dev/null
+++ b/examples/imageBlending.html
@@ -0,0 +1,83 @@
+
+
+ Mask and blending
+
+
+
+
+
+
+
+
+ Pixpipejs
+
+ This does the following :
+
+ - opening a distant image (1) file with AJAX request, using
pixpipe.UrlImageReader
+ - opening another distant image (2) file with AJAX request, using
pixpipe.UrlImageReader
+ - (image 1 and image 2 have the same size and same number of band)
+ - use image 2 as a mask and blend both using a
pixpipe.ImageBlendExpressionFilter
+ - displaying the final output in a canvas using
pixpipe.CanvasImageWriter
+
+
+
+
+
+
The original image and the mask:
+
+
+
+
+
+
The masked image:
+
+
+
+
+
+
+
diff --git a/examples/imageBlending2.html b/examples/imageBlending2.html
new file mode 100644
index 0000000..cb5d1c3
--- /dev/null
+++ b/examples/imageBlending2.html
@@ -0,0 +1,80 @@
+
+
+ Mask and blending
+
+
+
+
+
+
+
+
+ Pixpipejs
+
+ This does the following :
+
+ - opening a distant image (1) file with AJAX request, using
pixpipe.UrlImageReader
+ - opening another distant image (2) file with AJAX request, using
pixpipe.UrlImageReader
+ - (image 1 and image 2 have the same size and same number of band)
+ - use image 2 as a mask and blend both using a
pixpipe.ImageBlendExpressionFilter
+ - displaying the final output in a canvas using
pixpipe.CanvasImageWriter
+
+
+
+
+
+
The original image and the mask:
+
+
+
+
+
+
The blended image, only the lighter parts of the second images are visible:
+
+
+
+
+
+
+
diff --git a/examples/images/mask.png b/examples/images/mask.png
new file mode 100644
index 0000000000000000000000000000000000000000..f7de385220ee0f699959560d1c9e81a15e004f9a
GIT binary patch
literal 25748
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