“Judge a man by his questions rather than by his answers.” ― Voltaire
- What are the license terms?
MagicScaler is free for use in all environments.
Binary releases of MagicScaler are licensed under the Apache 2 license.
The source code has a mixed license. Because some of the Windows Interop source code was originally licensed under the Ms-PL, that portion of the source must remain under the Ms-PL license. The remainder of the source code is licensed under the Apache 2 license.
- Where's the source?
- You can find the MagicScaler and WebRSize source on GitHub.
- What version(s) of the .NET Framework is/are supported?
- Only .NET Framework 4.6 and up. RyuJIT is an important piece of the performance equation, and it ships with .NET 4.6+, so I decided not to support older framework versions. If your app doesn't run on .NET 4.6 yet, you may be able to host MagicScaler and WebRSize in their own site rather than integrating them.
- What about .NET Core?
There is now a version of MagicScaler that supports .NET Core 1.0 and up. Because MagicScaler requires WIC, it still only works on Windows machines. If you are running on Windows, MagicScaler is the fastest and best quality image resizer available for .NET Core.
It is possible to replace the WIC functionality used by MagicScaler with either platform-specific or pure managed implementations so that it can be platform-independent, but those options would require a significant investment of time/money. If I am able to get some sponsorship for such an effort, it's a distinct possibility.
- What Windows versions are supported?
Windows 7 and Windows Server 2008 R2 are supported with the Platform Update, which is available from Windows Update. The Platform Update brings WIC up to the same version that shipped with Windows 8 and Windows Server 2012.
Windows 8.1 and Windows Server 2012 R2 added support for planar processing of YCbCr images. MagicScaler will take advantage of these features if they are available, so you'll get the best performance with newer Windows versions.
- Can I use MagicScaler with Azure App Services?
- Yes. Unless you specifically request a Linux host, Azure App Services are hosted on Windows, and the WIC APIs used by MagicScaler are available and supported. MagicScaler performs well even in the memory-limited Free tier of Azure App Services, where other graphics/imaging libraries exhaust available memory even under light load.
- Is professional support available?
- Yes. Despite the playful names, MagicScaler and WebRSize are serious, enterprise-class software, and I support them for enterprise use. I offer paid support and consulting that should meet any needs. For information, email ten.ecuasotohp@troppus
- What are the benefits of professional support?
Although I will monitor the GitHub issues list for the PhotoSauce repo and will make an effort to address any reported bugs, there are no guarantees with free software. Bug reports and feature requests will be evaluated on a case by case basis as time permits. Bugs affecting a large number of users and feature requests that fall in line with my own goals for the project will tend to receive the highest priority.
The purchase of a support contract ensures that bugs affecting your organization are addressed in a timely manner and that your feature requests are given priority. If your organization depends on MagicScaler and/or WebRSize for critical functions, a support contract buys you assurance the projects will continue to receive active support and that your issues will move to the top of the queue.
Proceeds from support contracts are also reinvested into the projects. In addition to the security that comes from knowing you can depend on the software, you'll also get a warm fuzzy feeling from knowing you're giving back to projects that give you much for free.
- 100% Managed code? Really? Doesn't that make it slow?
- Yes, yes, and no.
MagicScaler was written entirely in C# and was first developed and benchmarked with the legacy x64 JIT. Even then, one of the core requirements was that MagicScaler had to be faster than GDI+. And it was.
Once .NET 4.6 was released with the new RyuJIT, MagicScaler got even faster on x64 platforms (by about 10%).
I haven't done a ton of benchmarking with the x86 JIT, but single-thread performance should be at least on par with GDI+ if not better. MagicScaler is also significantly faster than Paint.NET, FreeImage .NET, ImageSharp, ImageMagick, and Imazen's FastScaling plugin.
- But it has unsafe code, right?
- Yeah, it has to. Iterating over millions of pixels, and doing potentially billions of sample calculations requires raw pointer access in order to be fast. Unsafe code is limited to only the tightest loops working on pixel data, so the unsafe surface area is small.
- Could it be faster in native code?
- Not much, actually. With code tuned for optimal JIT output, there is very little difference between machine code produced by a C++ compiler and RyuJIT. MagicScaler even has SIMD-optimized versions of its image convolution and composition code taking advantage of System.Numerics.Vectors.
- Are you accepting donations?
- Absolutely! I'll add a PayPal link for small donations soon, but I'm also looking for larger sponsors to support some of the more ambitious features I have planned (such as a cross-platform .NET Core version). Sponsors will receive proper recognition for the features they enable with their contributions. Contact me at ten.ecuasotohp@troppus if you'd like to help.