ImageWizard
ยป Image processing webservice based on ASP.NET Core and ImageSharp / SkiaSharp
- Based on ASP.NET and ImageSharp / SkiaSharp / SvgNet / DocNET
- Different data loaders: Http, File, YouTube (thumbnail), Gravatar, OpenGraph
- Different data caches: File, Distributed cache, MongoDB cache
- Image filters: resize, crop, rotate,..
- Common image effects like grayscale and blur are available
- Pdf filters: page-to-image for documents
- Url is protected by a HMACSHA256 signature to prevent DDoS attacks
- Can handle the device pixel ratio (DPR)
- Support for cache control and ETag
- Enable range processing by http request
- Use RecyclableMemoryStream for smarter memory management (IStreamPool)
Use the standalone version or middleware.
Go to GitHubOpenGraph loader
@Url.ImageWizard().OpenGraph("https://github.com/usercode/ImageWizard").BuildUrl()
/image/-pOWlA9l0g6qOz6XQVS1B2f6UYeY6KNHLrh5AEqVx4Q/opengraph/https://github.com/usercode/ImageWizard
Screenshot loader
@Url.ImageWizard().Screenshot("https://github.com").BuildUrl()
/image/Xq_QMGYbACAfeQmoqHYdglI_-zUgrIcwBbPzSJDFN78/screenshot/https://github.com
SVG transforming
@Url.ImageWizard().FetchLocalFile("img/dot-net-core.svg").BuildUrl()
/image/DfEF1zeJJeojVyAVav78EnJIv-N5mHJQ_tFIDzyDAF4/fetch/img/dot-net-core.svg?v=JQDUYJdp
Original (width=100px, height=100px)
RemoveSize()
Rotate(45.0)
Blur()
Grayscale()
Invert()
Saturate(0.3)
Combine filters (grayscale, rotate, invert)
ImageSharp filters
resize(400,800,pad)
![](/image/IkYXr7zqEd9dRc4kyKE31ru_Op2hzUHCwekKXaBuQ6w/resize(400,800,pad)/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
resize(400,800,crop)
![](/image/UTq3a_yUAlUBKXpMQ8_WHfLwliAmNbuS3Hd7K9cotxI/resize(400,800,crop)/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
resize(400,800,stretch)
![](/image/vx1Yv-YZ3hMEOOBxNvfhc7AEQpEO4PXdZ2IHgK6KrEI/resize(400,800,stretch)/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
resize(400,800,min)
![](/image/C5hRfPCz80P7StzInOIrK0HTwi_xxV3yefo9CJuGdXk/resize(400,800,min)/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
resize(400,800,max)
![](/image/dcPfNbAn4FTaVJlLL9lHHsKjUrRwwb8zy2lFJ-TCfCU/resize(400,800,max)/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
blackwhite()
![](/image/GlUw1iegnkebf2eGeBMdqaxZCsYd7F9yLnZIF1R6hSY/resize(400,400)/blackwhite()/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
Grayscale()
![](/image/th7tvoVmJUaxBZKkIVXPM3CmTNOhrmsUJorryMAX5EE/resize(400,400)/grayscale()/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
blur()
![](/image/MLAtrJ6zvzOGkclf1JROG-5l6Yp4jRVSw8BqlbpCZ2k/resize(400,400)/blur()/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
rotate(90.0)
![](/image/z21aJu294vSxLzuKa6NbodXc936fZpf5lzkT6g7RPh0/resize(400,400)/rotate(90.0)/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
rotate(180.0)
![](/image/M4HGjNsAzwz77eVAbfjL4ezcRDgiV0fuhO2cpm53IXU/resize(400,400)/rotate(180.0)/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
rotate(270.0)
![](/image/eM62HdnO5qcJAjC7mfVPc0IfF7DmbRKPGDTEMtvuhkM/resize(400,400)/rotate(270.0)/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
flip(vertical)
![](/image/7Aaz8mJYyapsDOiOYHjwWwhNdWvBl6ADnY_SdMRnVrM/resize(400,400)/flip(vertical)/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
flip(horizontal)
![](/image/FYmb6btVLYmXd8e5_FCVW4Uw9gWbclzaf_9cpuOAncQ/resize(400,400)/flip(horizontal)/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
invert()
![](/image/UQv3v6qy0Fwu49fTUimMII8ZSzVut62YbJeMZKzArDY/resize(400,400)/invert()/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
brightness(0.5)
![](/image/4PhEoF9RxJkXIWrJERa72PK9dUZ4H-ggHomdriNQWf8/resize(400,400)/brightness(0.5)/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
brightness(0.5)
![](/image/7FcylSqXdcwf9MGn8uyG99G33DeTZu_f4FMqNd7mPYQ/resize(400,400)/contrast(0.5)/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
crop(0.17, 0.22, 0.3, 0.3)
![](/image/He-7AEsMkrLJHeyQN-K8eGYxwkd7af8LTw0Q2v2CskY/crop(0.170000002,0.219999999,0.300000012,0.300000012)/resize(400,400)/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
Fetch local file (from wwwroot folder)
@Url.ImageWizard().FetchLocalFile("img/meerkat.jpg").AsImage().Resize(400,400).BuildUrl()
/image/eNPr8ui0XyTVYU4yYKB5yn_g73EOlz1GyeKiZB3vOJ0/resize(400,400)/fetch/img/meerkat.jpg?v=ruMCmWgs
![](/image/eNPr8ui0XyTVYU4yYKB5yn_g73EOlz1GyeKiZB3vOJ0/resize(400,400)/fetch/img/meerkat.jpg?v=ruMCmWgs)
![](/image/MN73prsMQPzWHndM1ADKUELi4wy4mnPomGlgI-2XZ2o/resize(400,400)/grayscale()/fetch/img/meerkat.jpg?v=ruMCmWgs)
![](/image/1LaT8nsMjiuETojYWWVRpVUfZx3DHzSfKUb7CwbeDhs/resize(400,400)/blur()/fetch/img/meerkat.jpg?v=ruMCmWgs)
Fetch remote image
@Url.ImageWizard().Fetch("https://upload.wikimedia.org/wikipedia/commons/b/b7/Europe_topography_map.png").AsImage().Resize(400,400).BuildUrl()
/image/hsgWA1EDVGtIzFA2GnzQGRI_JlQ-x6PUyrGRB9ZTpt8/resize(400,400)/fetch/https://upload.wikimedia.org/wikipedia/commons/b/b7/Europe_topography_map.png
![](/image/hsgWA1EDVGtIzFA2GnzQGRI_JlQ-x6PUyrGRB9ZTpt8/resize(400,400)/fetch/https://upload.wikimedia.org/wikipedia/commons/b/b7/Europe_topography_map.png)
Default
![](/image/VM2q127ykOaWxk_pAuxTpfUQMROTrhicNvnMl-RzZG4/resize(400,400)/grayscale()/fetch/https://upload.wikimedia.org/wikipedia/commons/b/b7/Europe_topography_map.png)
Grayscale
![](/image/Jx_MQr5mphdQGzoLDYS-Tz07Kup0IxZa3j_ouvOr6jk/resize(400,400)/blur()/fetch/https://upload.wikimedia.org/wikipedia/commons/b/b7/Europe_topography_map.png)
Blur
Placeholder
@Url.ImageWizard().Placeholder(600, 300).BuildUrl()
/image/oY-FECwF1IWv-HuBfrGYhvWT0We78HYr4DygSeU9Aso/placeholder/600x300
600x300
DPR (Device Pixel Ratio)
@Url.ImageWizard().Fetch("lion.jpg").AsImage().DPR(1).Resize(100,100).BuildUrl()
/image/La9GYxEJ9hNO3zxq0_gt4KbVEGrTxjbYDDvlx71vZZs/dpr(1.0)/resize(100,100)/fetch/lion.jpg
![](/image/6DDqDmUxaNYN5p58POnaLMt7QhtA9lJmsYShJF2vtHw/dpr(1.0)/resize(100,100)/fetch/img/lion.jpg?v=4OTmL1n9)
DPR 1.0
![](/image/SCdFLasPP-eem6B7c5bYtWEYhLSUNiwJ1-WlRsVtSyY/dpr(2.0)/resize(100,100)/fetch/img/lion.jpg?v=4OTmL1n9)
DPR 2.0
![](/image/8Zhevpc3AAid_N5m5bJhuQXTRr5ChhFN2XIsD6rokmU/dpr(3.0)/resize(100,100)/fetch/img/lion.jpg?v=4OTmL1n9)
DPR 3.0
Use file provider (IFileProvider)
@Url.ImageWizard().File("img/meerkat.jpg").AsImage().Resize(400,400).BuildUrl()
/image/DQZx_HWUfGyhJ_afhC7TbVN_qKSpxDE8MdwWZRA1Jf8/resize(400,400)/file/img/meerkat.jpg
![](/image/DQZx_HWUfGyhJ_afhC7TbVN_qKSpxDE8MdwWZRA1Jf8/resize(400,400)/file/img/meerkat.jpg)
![](/image/TSqBLImr-X815js7NiSoqpBqegUu8wFZ-CNCx3mcCmI/resize(400,400)/grayscale()/file/img/meerkat.jpg)
![](/image/xGtGeURhUg0WWtINa5lovpSjlDf7TiSReEnpCfaB4N8/resize(400,400)/blur()/file/img/meerkat.jpg)
Watermark
@Url.ImageWizard().FetchLocalFile("img/bat-eared-fox.jpg", 4).AsImage().Watermark().BuildUrl()
/image/vK_-XQpt71Y77TfZaz8qB9FHK43tW0HgtFpNGH9WhP4/watermark()/fetch/img/bat-eared-fox.jpg?v=O8ad
![](/image/R9J3ofpZq0FR7EMCRUiiO7ogY4gl4R2SRyh9PMo9-DU/resize(400,400)/watermark()/fetch/img/bat-eared-fox.jpg?v=O8ad)
Draw text
@Url.ImageWizard().FetchLocalFile("img/bat-eared-fox.jpg", 4).AsImage().Resize(400, 400).DrawText("bat-eared-fox", 65, 0.3, 0.1, false).BuildUrl()
/image/Bly0EGFG5cfaiqdBZk153iqRaZ20y6xpFKlMAqRTEL8/resize(400,400)/drawtext(text='bat-eared-fox',size=65,x=0.3,y=0.1)/fetch/img/bat-eared-fox.jpg?v=O8ad
![](/image/o1icPgqY9IvmME680tBpJtPGFTT5ae_S6UxKtLs7ChI/resize(400,400)/drawtext(text='bat eared fox',size=65,x=0.3,y=0.1)/fetch/img/bat-eared-fox.jpg?v=O8adq-RY)
Fetch youtube thumbnail
@Url.ImageWizard().Youtube("lzyWFew_w8Y").Resize(400,400).BuildUrl()
/image/IUl8h9mTO_EFFyjL4B4DK1A22397qNXLaQ2gkXT3Y_A/resize(400,400)/youtube/lzyWFew_w8Y
Default
Grayscale
Blur
Use youtube taghelper (GDPR friendly)
Fetch gravatar image
@Url.ImageWizard().Gravatar("MyEmailAddress@example.com").Resize(200,200).BuildUrl()
/image/5JvAt5borvR9NmWvN8Nug6YRVOMBD7F0ZVDq37XjIkg/resize(200,200)/gravatar/0bc83cb571cd1c50ba6f3e8a78ef1346
Default
Grayscale
Blur
PDF (page to image)
@Url.ImageWizard().FetchLocalFile("/pdf/earth.pdf").AsPdf().PageToImage(0).BuildUrl()
/image/3hrljwEkYlEBozd3GBKzLmWVb629lrWpX1Lsjyu3BJU/pagetoimage(0)/fetch/pdf/earth.pdf?v=VGCJTuIh
OpenStreetMap
Use as relay to openstreetmap server.