Releases: SixLabors/ImageSharp
Releases · SixLabors/ImageSharp
1.0.0-rc.1
Release Notes
Milestone: 1.0.0-rc1
Area:Api
- ExifTagDescriptionAttribute doesnt need fields - #978 via @SimonCropp, @JimBobSquarePants
- Refactor IDisposable pattern - #1009 via @JimBobSquarePants
- Expose visitor through advanced namespace. - #1010 via @JimBobSquarePants
- Make processors public, refactor cloning. - #1011 via @JimBobSquarePants
- Expose pixelblenders. #967 - #1028 via @JimBobSquarePants
- Expose Buffer2D and ParallelHelper internals - #1035 via @antonfirsov, @JimBobSquarePants
- Expose final internals to allow decoupling Drawing. - #1046 via @JimBobSquarePants
- Allow returning the image format with the info. - #1059 via @JimBobSquarePants
- Add La16 and La32 IPixel formats. - #1062 via @JimBobSquarePants
- Public Vector4 to/from conversions - #1050 via @Sergio0694, @JimBobSquarePants
- Allow passing custom Configuration instances to processors - #1070 via @JimBobSquarePants
- Simplify and cleanup build constants - #1075 via @JimBobSquarePants
- Merge SixLabors.Core sources into ImageSharp - #1087 via @antonfirsov, @DaniaalNadir, @dlemstra, @iamcarbon, @JimBobSquarePants, @Mertsch, @synercoder, @tocsoft
- Expose Pixel Operations and Configuration - #1095 via @JimBobSquarePants
- Rename Pixel Shader Extensions and Delegates - #1096 via @JimBobSquarePants
- Add new Color parsing methods. - #1104 via @JimBobSquarePants
- Single row value delegates for parallel iterator - #1108 via @Sergio0694
- Remove Closure Allocations when Iterating Rows in Parallel - #1107 via @JimBobSquarePants, @Sergio0694
- Bokeh blur cache optimization - #1113 via @Sergio0694
- Fix quantization and dithering. - #1114 via @JimBobSquarePants, @brianpopow
- Implement discontiguous buffer handling - #1109 via @antonfirsov, @brianpopow, @JimBobSquarePants
- Generic Octet struct - #1131 via @Sergio0694
- Refactoring and tweaks (2) - #1122 via @Sergio0694, @JimBobSquarePants
- Single row value delegate option - #1132 via @Sergio0694
- Text segment ReadOnlySpan initialization - #1133 via @Sergio0694, @JimBobSquarePants
- Dither and Quantize API and Performance Improvements. - #1138 via @JimBobSquarePants, @antonfirsov
- Add overloads. Fix #1144 - #1146 via @JimBobSquarePants
- Add image extension method for save as tga - #1155 via @brianpopow
- Clean Up Namespaces and Visibility - #1161 via @JimBobSquarePants
- Improve accessability of Span methods. - #1172 via @JimBobSquarePants
- Update ToBase64String - #1175 via @JimBobSquarePants
- Allocation-free IMemoryGroup enumeration - #1173 via @Sergio0694, @JimBobSquarePants
- Add exception type and update xml docs. - #1179 via @JimBobSquarePants
- Add Property bag to Configuration and Image Processing Context - #1176 via @tocsoft, @JimBobSquarePants
- Change ImageFormatException to InvalidImageContentException - #1190 via @brianpopow
- Introduce PngCompressionLevel - #1192 via @JimBobSquarePants
- BufferRegion => Buffer2DRegion - #1194 via @JimBobSquarePants
Area:Bug
- Fix RGB to HSL conversion - #1001 via @JimBobSquarePants
- Fix #999 and add tests - #1003 via @JimBobSquarePants
- Fix #1004 - #1005 via @JimBobSquarePants, @antonfirsov
- Prevent PathGradientBrush from throwing an error with corner cases - #1007 via @mysticfall
- Fix horizontally out-of-bounds error when drawing text - #1008 via @Turnerj
- Change histogram clipLimit to be an absolute value - #1017 via @brianpopow, @JimBobSquarePants
- Png decoder fix for Issue #1014 - #1020 via @brianpopow
- Update the hex value for DarkSeaGreen color - #1021 via @zappyzhao, @JimBobSquarePants
- Fix reading of pngs with corrupt IEND chunks. - #1055 via @JimBobSquarePants
- Fix #1006 Resize from large source to small thumbnail produces deformed top pixel rows - #1060 via @JimBobSquarePants
- Js/fix namespace - #1066 via @JimBobSquarePants
- EXIF - Post review fixes - #1069 via @JimBobSquarePants
- Enumerate once on clone. Fix #1073 - #1074 via @JimBobSquarePants
- Remove invalid Subsampling checks. - #1078 via @JimBobSquarePants
- Use per-edge buffer + minor optimizations. - #1079 via @JimBobSquarePants
- Update Exif LensInfo - #1093 via @JimBobSquarePants
- Default Gif RepeatCount to 1 - #1100 via @JimBobSquarePants
- Break when minY >= bottom - [#1106](https://github...
1.0.0-beta7
- #816 - Update dependencies + fix stylecop
enhancement
contributed by JimBobSquarePants - #819 - Respecting fileHeader Offset, skipping bytes if necessary
bug
formats:bmp
contributed by brianpopow - #820 - Track input stream position on load.
bug
formats:jpeg
contributed by JimBobSquarePants - #830 - Fix Decoding 8-Bit interlaced grayscale png's with alpha channel contributed by brianpopow
- #831 - Fix Decoding interlaced grayscale png's contributed by brianpopow
- #832 - Add support for Decoding BI_ALPHABITFIELDS contributed by brianpopow
- #833 - Allow Build with Visual Studio For Mac
build
contributed by JimBobSquarePants - #834 - Remove hardcoded subsampling.
bug
formats:jpeg
contributed by JimBobSquarePants - #835 - GDI+ stability fixes for the benchmark and tests contributed by Lakritzator
- #836 - Jpeg Fuzz Fixes
bug
formats:jpeg
contributed by JimBobSquarePants - #841 - Lazily derive the huffman tables. Fix #839
bug
formats:jpeg
contributed by JimBobSquarePants - #842 - Bokeh blur implementation contributed by Sergio0694
- #848 - Implement IEquatable<Block8x8F> and check when summing.
bug
formats:jpeg
contributed by JimBobSquarePants - #851 - Png Decoder Bounds check. Fix #849
bug
formats:png
contributed by JimBobSquarePants - #853 - #852 Adding instructions to add submodules when cloning the repository
documentation
contributed by bulldetektor - #855 - Updating some readonly static data in JpegEncoderCore to take advantage of compiler functionality.
formats:jpeg
performance
contributed by tannergooding - #863 - Remove Enum Comparison Boxing
performance
contributed by JimBobSquarePants - #864 - Fix incorrect gradient color-stop calculation
bug
drawing
contributed by Poyo-SSB - #865 - Change existing gradient brushes to accept PointF
drawing
enhancement
contributed by Poyo-SSB - #869 - Introduce extended pixel conversion
api
enhancement
performance
contributed by antonfirsov - #870 - Nits
codequality
contributed by iamcarbon - #874 - Use more accuracy when calculating variance. Fix #866
bug
quantizers
contributed by JimBobSquarePants - #877 - Now throws a better excpetion DrawImage source does not overlap target contributed by atruskie
- #879 - Nits - Metadata
documentation
metadata:exif
metadata:icc
metadata:iptc
metadata:xmp
contributed by iamcarbon - #880 - Nits - Colorspaces
bug
colorspaces
performance
contributed by iamcarbon - #883 - ImageBrush shouldn't Dispose of the image it is using.
bug
drawing
contributed by BorisTheBrave - #884 - Nits - Benchmarks
codequality
contributed by iamcarbon - #885 - Handle incorrect colorspace metadata.
bug
formats:jpeg
contributed by JimBobSquarePants - #887 - Cleanup General Convolution
api
bug
performance
contributed by JimBobSquarePants - #888 - Limit ResizeProcessor memory consumption
enhancement
memory
performance
contributed by antonfirsov - #889 - Bitmap encoder writes V3 header as default
bug
formats:bmp
contributed by brianpopow - #891 - Fix travis builds
build
contributed by antonfirsov - #893 - Pass correct output size source image is smaller than the Target in ResizeMode.Min [
bug
](https://api.github.com/repos/...
1.0.0 beta6
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)
1.0.0 beta5
Breaking changes
- All processing extension methods have been moved to the
SixLabors.ImageSharp.Processing
namespace to improve API discoverability for vanilla VS and VS Code users. (#645) Sub namespaces likeSixLabors.ImageSharp.Processing.Transforms
do no longer exist! You have to remove these using statements from your code:
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing; // The only namespace required for processing extensions!
u̶s̶i̶n̶g̶ ̶S̶i̶x̶L̶a̶b̶o̶r̶s̶.̶I̶m̶a̶g̶e̶S̶h̶a̶r̶p̶.̶P̶r̶o̶c̶e̶s̶s̶i̶n̶g̶.̶T̶r̶a̶n̶s̶f̶o̶r̶m̶s̶;̶ // COMPILATION ERROR!
image.SavePixelData()
APIs have been removed in favour ofimage.GetPixelSpan()
(#628)Configuration.ParallelOptions
has been replaced withConfiguration.MaxDegreeOfParallelism
(#667)
Improvements since beta 4:
- Fixed all remaining issues with .NET Core 2.1
- Jpeg improvements:
- Introduce
PixelResolutionUnit
inImageMetaData
, fix #490 (#649) - PNG improvements
- Optimized font rendering by caching glyphs (#614)
- Improved Gif and Quantization performance when using diffusion by
~600%
(#637) - Cross target .NET Core 2.1 (#604)
- Histogram Equalization (#644)
- Deeper
System.Memory
API integration:- Span overloads for
Image.Load()
andImage.DetectFormat()
(#618) image.GetPixelSpan()
andimage.GetPixelRowSpan()
extension methods for fast pixel data manipulation (#607)Image.WrapMemory(...)
for native interop use-cases (#660)- The
MemoryAllocator
API is now public and shared across all SixLabors projects (#665)
- Span overloads for
NuGet
https://www.nuget.org/packages/SixLabors.ImageSharp/1.0.0-beta0005
https://www.nuget.org/packages/SixLabors.ImageSharp.Drawing/1.0.0-beta0005
1.0.0 beta4
Improvements since beta 3
- Full support for .NET Core 2.1
- Fixed a bug related to drawing large and complex shapes (eg. pages of text)
- Gradient brushes
- Projective non-affine transforms (tilt, perspective)
- Improved the robustness of our Jpeg decoder:
- A large part of the implementation has been replaced, allowing to parse a wider range of incorrectly encoded images
- Better ICC reader
- Basic
System.Memory
API integration: Image.LoadPixelData() and SavePixelData() are now able to consume spans - Improved
.Fill(color)
performance and added a constructor initializing images with a default fill color
Blog post
v1.0.0-beta3
Improvements since beta 2
- Breaking change: Refactored the namespaces to logical groups based on functionality.
- Introduced a full memory management API that allows fine grained control of how ImageSharp manages large buffers.
- For the default pooling memory management implementation we managed to halve the memory footprint of the library without significant loss in speed.
- Made codecs easier to use. The performance of the Jpeg decoder is doubled since the first beta!
- Introduced a new metadata-only decoding API with the help of the community.
- Introduced new affine transform methods that allow the composition of affine transforms.
- Refactored all filters (Hue, Brightness, Saturation etc) to match the behaviour described in the W3C specification.
- Introduced static instances of reusable algorithms for use as method parameters.
- Fixed the resampling processes to correctly blend semi-transparent output.
- Many other performance improvements and bug fixes.
Blog post
1.0.0 beta2
Beta Release
- Added new netstandard 2.0 target to take advantage of performance improvements
- Increased the speed of the Jpeg decoder by
100%-200%
for most images - Normalized and improved animated Gif output
- Revised API for
IImageFrameCollection<T>
(image.Frames
). From now, it is responsible for managing the lifecycle of image frames. AddedCloneFrame(idx)
andExportFrame(idx)
methods to copy/move individual frames into new images. - Various Png performance improvements and fixes
- Expanded range of decodable Bmp types
ref
returning extension methods for low-level/interop scenarios. (Only for advanced users, familiar with pointer arithmetics!)- Many other bug fixes
You can download the packages from nuget
1.0.0 beta1
Merge pull request #299 from SixLabors/beta-1 Beta 1