mirror of
https://github.com/Cykooz/fast_image_resize.git
synced 2026-10-08 01:11:09 +00:00
- Added benchmarks for resizing with target-cpu=native.
This commit is contained in:
@@ -37,10 +37,20 @@ Resize algorithms:
|
||||
|------------|:-------:|:--------:|:----------:|:--------:|
|
||||
| image | 105.38 | 204.21 | 301.58 | 399.52 |
|
||||
| resize | 16.223 | 72.447 | 132.64 | 193.26 |
|
||||
| fir native | 0.476 | 57.003 | 87.564 | 120.65 |
|
||||
| fir rust | 0.476 | 57.003 | 87.564 | 120.65 |
|
||||
| fir sse4.1 | - | 12.143 | 18.662 | 26.334 |
|
||||
| fir avx2 | - | 9.346 | 13.342 | 18.934 |
|
||||
|
||||
`rustflags = ["-C", "target-cpu=native"]`
|
||||
|
||||
| | Nearest | Bilinear | CatmullRom | Lanczos3 |
|
||||
|------------|:-------:|:--------:|:----------:|:--------:|
|
||||
| image | 91.498 | 183.47 | 282.34 | 386.74 |
|
||||
| resize | 15.752 | 63.137 | 116.45 | 169.73 |
|
||||
| fir rust | 0.467 | 58.133 | 65.575 | 89.721 |
|
||||
| fir sse4.1 | - | 11.567 | 16.566 | 23.859 |
|
||||
| fir avx2 | - | 8.746 | 11.818 | 17.253 |
|
||||
|
||||
### Resize RGBA image 4928x3279 => 852x567
|
||||
|
||||
- Source image [nasa-4928x3279.png](https://github.com/Cykooz/fast_image_resize/blob/main/data/nasa-4928x3279.png)
|
||||
@@ -50,10 +60,19 @@ Resize algorithms:
|
||||
|------------|:-------:|:--------:|:----------:|:--------:|
|
||||
| image | 110.45 | 264.84 | 421.25 | 596.17 |
|
||||
| resize | 23.919 | 100.38 | 173.62 | 247.39 |
|
||||
| fir native | 13.832 | 70.448 | 100.87 | 133.84 |
|
||||
| fir rust | 13.832 | 70.448 | 100.87 | 133.84 |
|
||||
| fir sse4.1 | 12.03 | 23.721 | 30.266 | 37.874 |
|
||||
| fir avx2 | 6.949 | 15.873 | 19.956 | 25.527 |
|
||||
|
||||
`rustflags = ["-C", "target-cpu=native"]`
|
||||
|
||||
| | Nearest | Bilinear | CatmullRom | Lanczos3 |
|
||||
|------------|:-------:|:--------:|:----------:|:--------:|
|
||||
| image | 97.782 | 246.27 | 403.20 | 568.91 |
|
||||
| resize | 24.282 | 86.244 | 151.41 | 217.74 |
|
||||
| fir rust | 9.968 | 67.628 | 74.96 | 99.376 |
|
||||
| fir sse4.1 | 7.926 | 19.017 | 24.06 | 31.323 |
|
||||
| fir avx2 | 6.924 | 15.312 | 18.266 | 23.703 |
|
||||
|
||||
## Examples of code
|
||||
|
||||
@@ -65,21 +84,21 @@ use fast_image_resize::{
|
||||
};
|
||||
|
||||
fn resize_lanczos3(src_pixels: &[u8], width: NonZeroU32, height: NonZeroU32) -> Vec<u8> {
|
||||
let mut resizer = Resizer::new(ResizeAlg::Convolution(FilterType::Lanczos3));
|
||||
let src_image = ImageData::new(width, height, src_pixels, PixelType::U8x4).unwrap();
|
||||
let src_view = src_image.src_view();
|
||||
|
||||
let dst_width = NonZeroU32::new(1024).unwrap();
|
||||
let dst_height = NonZeroU32::new(768).unwrap();
|
||||
let mut dst_image = ImageData::new_owned(dst_width, dst_height, src_image.pixel_type());
|
||||
|
||||
let src_view = src_image.src_view();
|
||||
let mut dst_view = dst_image.dst_view();
|
||||
|
||||
let mut resizer = Resizer::new(ResizeAlg::Convolution(FilterType::Lanczos3));
|
||||
resizer.resize(&src_view, &mut dst_view);
|
||||
|
||||
dst_image.get_buffer().to_owned()
|
||||
}
|
||||
|
||||
fn crop_and_resize_image(mut src_view: SrcImageView) -> ImageData<Vec<u8>> {
|
||||
let mut resizer = Resizer::new(ResizeAlg::Convolution(FilterType::Lanczos3));
|
||||
src_view
|
||||
.set_crop_box(CropBox {
|
||||
left: 10,
|
||||
@@ -91,8 +110,9 @@ fn crop_and_resize_image(mut src_view: SrcImageView) -> ImageData<Vec<u8>> {
|
||||
let dst_width = NonZeroU32::new(1024).unwrap();
|
||||
let dst_height = NonZeroU32::new(768).unwrap();
|
||||
let mut dst_image = ImageData::new_owned(dst_width, dst_height, src_view.pixel_type());
|
||||
|
||||
let mut dst_view = dst_image.dst_view();
|
||||
|
||||
let mut resizer = Resizer::new(ResizeAlg::Convolution(FilterType::Lanczos3));
|
||||
resizer.resize(&src_view, &mut dst_view);
|
||||
|
||||
dst_image
|
||||
|
||||
@@ -5,21 +5,21 @@ use fast_image_resize::{
|
||||
};
|
||||
|
||||
fn resize_lanczos3(src_pixels: &[u8], width: NonZeroU32, height: NonZeroU32) -> Vec<u8> {
|
||||
let mut resizer = Resizer::new(ResizeAlg::Convolution(FilterType::Lanczos3));
|
||||
let src_image = ImageData::new(width, height, src_pixels, PixelType::U8x4).unwrap();
|
||||
let src_view = src_image.src_view();
|
||||
|
||||
let dst_width = NonZeroU32::new(1024).unwrap();
|
||||
let dst_height = NonZeroU32::new(768).unwrap();
|
||||
let mut dst_image = ImageData::new_owned(dst_width, dst_height, src_image.pixel_type());
|
||||
|
||||
let src_view = src_image.src_view();
|
||||
let mut dst_view = dst_image.dst_view();
|
||||
|
||||
let mut resizer = Resizer::new(ResizeAlg::Convolution(FilterType::Lanczos3));
|
||||
resizer.resize(&src_view, &mut dst_view);
|
||||
|
||||
dst_image.get_buffer().to_owned()
|
||||
}
|
||||
|
||||
fn crop_and_resize_image(mut src_view: SrcImageView) -> ImageData<Vec<u8>> {
|
||||
let mut resizer = Resizer::new(ResizeAlg::Convolution(FilterType::Lanczos3));
|
||||
src_view
|
||||
.set_crop_box(CropBox {
|
||||
left: 10,
|
||||
@@ -31,8 +31,9 @@ fn crop_and_resize_image(mut src_view: SrcImageView) -> ImageData<Vec<u8>> {
|
||||
let dst_width = NonZeroU32::new(1024).unwrap();
|
||||
let dst_height = NonZeroU32::new(768).unwrap();
|
||||
let mut dst_image = ImageData::new_owned(dst_width, dst_height, src_view.pixel_type());
|
||||
|
||||
let mut dst_view = dst_image.dst_view();
|
||||
|
||||
let mut resizer = Resizer::new(ResizeAlg::Convolution(FilterType::Lanczos3));
|
||||
resizer.resize(&src_view, &mut dst_view);
|
||||
|
||||
dst_image
|
||||
|
||||
Reference in New Issue
Block a user