ImageSharp v1.0.0 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 and ProjectiveTransformBuilder 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)
      • Some properties impemented for Gif, Png and Jpeg
      • Png stuff extended in #764
      • Introduced IDeepClonable to ensure metadata objects are properly cloned (#707)
    • 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)

    https://sixlabors.com/blog/beta-six-labors/