Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork41
kleisauke/net-vips
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
This NuGet package provides a .NET binding for thelibvips image processing library.
This binding passes the vips test suite cleanly with no leaks on Windows, macOS and Linux.
We have formatted docs online here:
https://kleisauke.github.io/net-vips/
Programs that useNetVips don't manipulate images directly, insteadthey create pipelines of image processing operations building on a sourceimage. When the end of the pipe is connected to a destination, the wholepipeline executes at once, streaming the image in parallel from source todestination a section at a time.
BecauseNetVips is parallel, it's quick, and because it doesn't need tokeep entire images in memory, it's light. For example, theNetVips benchmark:
Loads a large image, shrinks by 10%, sharpens, and saves again. On this testNetVips is around 31 times faster than Magick.NET and 6 times faster than ImageSharp.
Thelibvips documentationhas achapter explaining how libvips opens fileswhich gives some more background.
- .NET Framework 4.6.2 and higher
- .NET 6.0 and higher
You need the libvips shared library on your library search path, version 8.2 orlater. There are separate NuGet packages that will contain the pre-compiledlibvips binaries for the most common platforms (seethis repo for details):
| NuGet Package1 | |
|---|---|
| Windows 64-bit | |
| Windows 32-bit | |
| Windows ARM64 | |
| Linux x64 glibc2 | |
| Linux x64 musl3 | |
| Linux ARM64v8 glibc2 | |
| Linux ARM64v8 musl3 | |
| Linux ARMv7 | |
| macOS x64 | |
| macOS ARM64 |
These binaries provides support for the JPEG, PNG, WebP, AVIF (limited to 8-bit depth), TIFF, GIF and SVG (input) image formats.
Then just install this package, perhaps:
Install-Package NetVipsTo test your install, try this test program:
if(ModuleInitializer.VipsInitialized){Console.WriteLine($"Inited libvips{NetVips.Version(0)}.{NetVips.Version(1)}.{NetVips.Version(2)}");}else{Console.WriteLine(ModuleInitializer.Exception.Message);}Console.ReadLine();
If NetVips was able to find the libvips shared library, you should see:
Inited libvips [VERSION_NUMBER]However, if you see something else, NetVips was unable to initialize libvips.This can happen for a variety of reasons, even though most of the times it's because NetVipswas not able to find libvips or due to x86/x64 architecture problems:
| Inner exception | HRESULT | Solution |
|---|---|---|
| DllNotFoundException | 0x8007007E | Make sure to add thebin folder of the libvips Windows build to yourPATH environment variable (if you wish to not use the separate NuGet packages). |
| BadImageFormatException | 0x8007000B | Make sure when you target theAnyCPU platform thePrefer 32-bit option is unchecked. Or try to targetx64 instead. |
usingNetVips;usingvarim=Image.NewFromFile("image.jpg");// put im at position (100, 100) in a 3000 x 3000 pixel image,// make the other pixels in the image by mirroring im up / down /// left / right, see// https://www.libvips.org/API/current/method.Image.embed.htmlusingvarembed=im.Embed(100,100,3000,3000,extend:Enums.Extend.Mirror);// multiply the green (middle) band by 2, leave the other two aloneusingvarmultiply=embed*new[]{1,2,1};// make an image from an array constant, convolve with itusingvarmask=Image.NewFromArray(new[,]{{-1,-1,-1},{-1,16,-1},{-1,-1,-1}},8);usingvarconvolve=multiply.Conv(mask,precision:Enums.Precision.Integer);// finally, write the result back to a file on diskconvolve.WriteToFile("output.jpg");
Footnotes
About
.NET binding for libvips.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Contributors6
Uh oh!
There was an error while loading.Please reload this page.