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/l85uNYkIJihv5zWgUY8QDQs3etQhdmBjUkRn4_YQ3-I/opengraph/https://github.com/usercode/ImageWizard
Screenshot loader
@Url.ImageWizard().Screenshot("https://github.com").BuildUrl()
/image/mB4tWB751ltco4atZU5bUlLRvW_la5eoPqJIOkiOtqM/screenshot/https://github.com
SVG transforming
@Url.ImageWizard().FetchLocalFile("img/dot-net-core.svg").BuildUrl()
/image/99DCrsiNMhosF5AWMa4HM1715x8YEYZIPISxSqFlS-A/fetch/img/dot-net-core.svg?v=7Yo0oNCT
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/YHnbZMwSr_iCxkcl1lHRyxSBhJVanV6lNU_fhxv9x00/resize(400,800,pad)/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
resize(400,800,crop)
![](/image/fdb743gbwXJLTtgyu5Tuwjigfawi-xwL1_1IxQsmeuY/resize(400,800,crop)/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
resize(400,800,stretch)
![](/image/ZH_yNYPC8qpAu7mgBhWaClySszBzSpuhIqO_IzvlC60/resize(400,800,stretch)/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
resize(400,800,min)
![](/image/_qNfBGzOgDEGaMPBUeekB2i1KXq-3L6vfvGdsNpgQ-g/resize(400,800,min)/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
resize(400,800,max)
![](/image/kdKXkM6zU1KUNcsJTcGoHVbex_CRzw_7w_PyviX5MHY/resize(400,800,max)/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
blackwhite()
![](/image/BlN4s2x9wvk0Z9u3yjnCSqJbVDjFsBmn8ujZFYC422E/resize(400,400)/blackwhite()/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
Grayscale()
![](/image/YJMLiGZ0yjLHY2oe68iJeQYrvH212sFW9IX4VY8eOUg/resize(400,400)/grayscale()/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
blur()
![](/image/XCQpFPPbX4-Oxh657fBJq443Zk5Ecz1RF4h63F7OQQo/resize(400,400)/blur()/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
rotate(90.0)
![](/image/nEuWjH88Bf5UmtNkIeliIbmq9s-uRQAZRaVcZQgbynI/resize(400,400)/rotate(90.0)/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
rotate(180.0)
![](/image/trAPxA_Cvw8OoebGA9t_mHxC5a1hTTvHJ735cT763Ow/resize(400,400)/rotate(180.0)/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
rotate(270.0)
![](/image/W4OlHHBnfSco0BbeKDEAUqn1rLY6WYcb4gFthQzqa6s/resize(400,400)/rotate(270.0)/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
flip(vertical)
![](/image/YywJGJ8c0jhoLxESaV9J4DWBvuf42n2wV0_W4THSR5s/resize(400,400)/flip(vertical)/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
flip(horizontal)
![](/image/hjA1bWK_JEP2RN_hxnBczJ2g0bGWE9FE_5_MYfZZ7tk/resize(400,400)/flip(horizontal)/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
invert()
![](/image/acgaqgnuIcz0tjHC1OidrHaIHzoOusEyTAFcwMMXgj4/resize(400,400)/invert()/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
brightness(0.5)
![](/image/hCAvf4esPvsaX2e5CsoOwed2tB4-MRo3iJLDftQws5w/resize(400,400)/brightness(0.5)/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
brightness(0.5)
![](/image/z7x6eHqeshGQX4WbaDTyVr2XPTWwHZvr-_dHCaSdP8Y/resize(400,400)/contrast(0.5)/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
crop(0.17, 0.22, 0.3, 0.3)
![](/image/VsoAZ0y9Y0BgWHQzJfPzvqSi3ByMi6Gqz1IXl30TS4A/crop(0.170000002,0.219999999,0.300000012,0.300000012)/resize(400,400)/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
Fetch local file (from wwwroot folder)
@Url.ImageWizard().FetchLocalFile("img/meerkat.jpg").AsImage().Resize(400,400).BuildUrl()
/image/2fpCxDPikfGbanzwRgRLZL5UUxGju2qvGI8gQ6RQKEk/resize(400,400)/fetch/img/meerkat.jpg?v=B7UZdbtW
![](/image/2fpCxDPikfGbanzwRgRLZL5UUxGju2qvGI8gQ6RQKEk/resize(400,400)/fetch/img/meerkat.jpg?v=B7UZdbtW)
![](/image/trr-l6V9f0OeeX4aRRi9dYO5ahLbw72rAVVQNqlUESI/resize(400,400)/grayscale()/fetch/img/meerkat.jpg?v=B7UZdbtW)
![](/image/4HlKG5N0EU35sBZoQhHu4LZ0X4eXLSIO8OuwJ3rPenI/resize(400,400)/blur()/fetch/img/meerkat.jpg?v=B7UZdbtW)
Fetch remote image
@Url.ImageWizard().Fetch("https://upload.wikimedia.org/wikipedia/commons/b/b7/Europe_topography_map.png").AsImage().Resize(400,400).BuildUrl()
/image/40oKfOUcgF3yBxEB0cTTjVLLShBMY2QElhXETX5JDIE/resize(400,400)/fetch/https://upload.wikimedia.org/wikipedia/commons/b/b7/Europe_topography_map.png
![](/image/40oKfOUcgF3yBxEB0cTTjVLLShBMY2QElhXETX5JDIE/resize(400,400)/fetch/https://upload.wikimedia.org/wikipedia/commons/b/b7/Europe_topography_map.png)
Default
![](/image/wuGk8d0z3xtg8aMXd_AyhfMa_ke0U8EQkS91lL87u04/resize(400,400)/grayscale()/fetch/https://upload.wikimedia.org/wikipedia/commons/b/b7/Europe_topography_map.png)
Grayscale
![](/image/5I94ARCQs-2vdzaCqqHOUc2T4pk_TftkA0H9pxgEAMk/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/6EYQE8e55YB9PG6hC3UjOQ-aJGMQHCU-qFRCWJ9hEFo/placeholder/600x300
600x300
DPR (Device Pixel Ratio)
@Url.ImageWizard().Fetch("lion.jpg").AsImage().DPR(1).Resize(100,100).BuildUrl()
/image/vYWcY1WU9xn9BNr88fLQHGSTxVll_5BUwGi-07zsXfY/dpr(1.0)/resize(100,100)/fetch/lion.jpg
![](/image/1pa6MZKGECMQC2_pg8fwXxWIKS0ZNhF-FnP9-_4zpAw/dpr(1.0)/resize(100,100)/fetch/img/lion.jpg?v=mwkQv4wt)
DPR 1.0
![](/image/syDO3cczswjsO8ZgF4djhXdYDR717QvABavod8PuSao/dpr(2.0)/resize(100,100)/fetch/img/lion.jpg?v=mwkQv4wt)
DPR 2.0
![](/image/E6ziawyyP_6XRur2hg4VR-KXDHqBkPjVPvll-jaNHl8/dpr(3.0)/resize(100,100)/fetch/img/lion.jpg?v=mwkQv4wt)
DPR 3.0
Use file provider (IFileProvider)
@Url.ImageWizard().File("img/meerkat.jpg").AsImage().Resize(400,400).BuildUrl()
/image/TTO4MFF-24o1nBpZSG4n29HaaEiCT9bpZZJAj-Yrfps/resize(400,400)/file/img/meerkat.jpg
![](/image/TTO4MFF-24o1nBpZSG4n29HaaEiCT9bpZZJAj-Yrfps/resize(400,400)/file/img/meerkat.jpg)
![](/image/J1JsEd-1aoeJAYKBJrPPmQRmj_n9JFrdmGKCTjcTTRU/resize(400,400)/grayscale()/file/img/meerkat.jpg)
![](/image/KfAID__WkMFd9geMBah_Z9imwFdgXBWyYgzOgkB6WbQ/resize(400,400)/blur()/file/img/meerkat.jpg)
Watermark
@Url.ImageWizard().FetchLocalFile("img/bat-eared-fox.jpg", 4).AsImage().Watermark().BuildUrl()
/image/JOnOlys15ZQTGMlFOwHGb3rVZR7bEBLYFutkCTROjnE/watermark()/fetch/img/bat-eared-fox.jpg?v=rO6b
![](/image/oWiU05Sh__XgtvNjPRfU0yBmATK-cuX2SfrLj5CgT_s/resize(400,400)/watermark()/fetch/img/bat-eared-fox.jpg?v=rO6b)
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/sbUqU9dl0jSDfw6MwdHVIcyNYmEo7KoI_kRj2XMVsUA/resize(400,400)/drawtext(text='bat-eared-fox',size=65,x=0.3,y=0.1)/fetch/img/bat-eared-fox.jpg?v=rO6b
![](/image/bsc76JG9LeZMVx7IQNOgTEpl666jkjckKKg1xWB0b74/resize(400,400)/drawtext(text='bat eared fox',size=65,x=0.3,y=0.1)/fetch/img/bat-eared-fox.jpg?v=rO6bJIBN)
Fetch youtube thumbnail
@Url.ImageWizard().Youtube("lzyWFew_w8Y").Resize(400,400).BuildUrl()
/image/2iAi3LbJWfjn7Xx7dLn13phbMmy4Y0YpKIMLSI35gwk/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/yq0sCew-E2SeKno6gY-R7h_uN9gzcquZdVY_aTkZHEU/resize(200,200)/gravatar/0bc83cb571cd1c50ba6f3e8a78ef1346
Default
Grayscale
Blur
PDF (page to image)
@Url.ImageWizard().FetchLocalFile("/pdf/earth.pdf").AsPdf().PageToImage(0).BuildUrl()
/image/yc6HZvGxprxHrfr-yGBsoVq2n7TzfTTiqOVn4VxSv78/pagetoimage(0)/fetch/pdf/earth.pdf?v=Sr59Cabh
OpenStreetMap
Use as relay to openstreetmap server.