ImageSharp v1.0.0-beta6 Release Notes
Release Date: 2019-01-25 // about 5 years ago-
👌 Improvements since beta-5
Resize
- Significant speed-up in our resizer (
~2.5x
). On .NET Core 2.1 now we downscale images faster than System.Drawing (#731, #781) - Using
~30%
less memory during resize (#731, #781) - #719 - Keep one pixel if aspect ratio respecting resize would set a dimension to 0.
Formats
JPEG (& Exif)
- Read Jpeg-s with incorrect App0 markers (#722)
- Decode interleaved progressive jpegs correctly (#724)
- 👌 Support 12 bit jpegs (#784)
- #698 - Allow several invalid data types when reading the exif resolution.
- #699 - Fix EXIF overflow and Jpeg decoding
- #768 - Various Jpeg optimizations
- #801 - #797 throw ImageFormatException when no StartOfFrame marker is found
- #804 - Use bounds checks in Huffman ctr. Fix #798
PNG
- 📇 Preserve PNG trancparency metadata after decoding. (#764, #693)
- 🛠 #705 - Png and Wu Quantizer fixes
- #712 - Add 1, 2, and 4 bit Png Encoding
- #740 - Use scaled luminance trns comparison.
BMP
- ✅ #676 - Fix 1 bit bmp decoding and add extra test images.
- 🚧 #791 - WIP: Adds support for Decoding Bitmaps with 16 bytes headers
- 🏁 #792 - WIP: Fix for Windows 2.0 or OS/2 1.x bitmaps only use 3 bytes per color palette entry
- #796 - Decoding Bitmaps with BITFIELDS masks
- 👍 #812 - Support for decoding RLE4 encoded bitmaps
- 👍 #813 - Adds support for OS/2 version 2 bitmaps
GIF
- #770 - Fix infinite loop when a GIF prematurely terminates
Color Spaces and Filters
- Publish Color Space and transformation API-s (#664)
- Introduce
ColorMatrix
and fix Color Filters, making them CSS-compatible (#806) - 🔨 #734 - Refactor Companding
- #736 - Write float values using the invariant culture.
Pixel Types
- ➕ Add Gray8 and Gray16 Pixel Formats and clean up IPixel (#729)
- #754 - Imrpoved Gray8 accuracy
- #728 - Add ToString implementations to Bgr24 and Bgra32
- 🔨 #744 - Refactor & simplify conversion API's
- ⚡️ #680 - Optimize Equals & GetHashCode methods within PixelFormats
Drawing and text
- The
.DrawImage()
extension method works across pixel types. (image<Rgba>.Mutate(x => x.DrawImage( Image<Argb>))
) (#686) - ⚡️ #765 - Optimize filling a region with a solid brush when antialias is off
- #755 - Prevent text wandering from baseline
- #756 - constrain destination span and scanline to same length
Transformations
- Introduce
AffineTransformBuilder
andProjectiveTransformBuilder
to help dealing with composite transformations. (#775) - #788 - Fix Projective Transforms
Compatibility
- 👌 Improved Xamarin iOS compatibility by providing a workaround for AOT issues (#767, #785)
- 👍 Discontinue netstandard1.1 support (#737)
- 👍 Discontinue .NET Core 2.0 support (#681)
- #746 - Cross target NET472 and enable extended intrinsics behind symbol
- #708 - Fix issue on mono <= 5.14 when reading multiple png data chunks.
Other
🆕 New API-s and API changes
- Split pixel blending and alpha composition API-s (#641, #679)
- ➕ Add API-s to preserve format-specific metadata after decoding images, so it won't be lost when they are being reencoded. (#693)
- Image formats are now public (#701)
- 🔨 #741 - Add generic palette quantizer, refactor + werner palette
Optimizations
- #671 - Use span directly for DetectFormat
- ⚡️ #710 - Optimized parallel pixel processing
- ⚡️ #742 - Clean up and optimize byte<->float and Rgba32 <-> Vector4 conversion
- ⚡️ #751 - Introduce optimized conversion methods for RGBA-like types
- #771 - Avoid doing the same thing multiple times
🐛 Bug fixes
- 🔧 #684 - Don't allow duplicate formats in configuration.
- #715 - Use clean buffer when detecting format
- #753 - Added missing length check that caused an ArgumentNullException (#750)
- #726 - Throw when crop rectangle exceeds source bounds.
- Mathematically correct Gaussian Blur (#789)
Internal changes without visible effects
#678, #682, #689, #717, #720, #727, #747, #760, #769, #773, #772, #783, #691, #706, #709, #761, #759, #780, #782
Special thanks to regular contributors
- Jason Nelson (@iamcarbon) - Code sanity, optimizations
- @jongleur1983 - Code sanity, optimizations
- Vicente Penades (@vpenades) - Separating Color Blending from Alpha Composition
- 👍 Brian Popow (@brianpopow) - Better BMP support
- 👀 Dan Manning (@dmanning23) - AOT seeding for Xamarin iOS
- 📇 @devedse - Png metadata
- 👍 Stephan Vedder (@feliwir) - 12 bit Jpeg support
Blog post (including long term licensing plans)
- Significant speed-up in our resizer (