rszr 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +8 -0
- data/ext/rszr/image.c +58 -9
- data/ext/rszr/image.h +4 -0
- data/lib/rszr/image.rb +11 -0
- data/lib/rszr/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc66aac476d64b18383ef7f619bf6fcf632c00f0bbda3e8e203183886e9caecf
|
4
|
+
data.tar.gz: 4c0132a0e9f845fc5f92535c210ca693b9132d281a88444ab41192425b1cec7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a118a405a2c54998e0236a3b4c34a8b02ac68160a0410f45cf2e2d1e0a0ca78e87a49854e0992fa042ea560f5f64377a28f10e33551308de6ecd6fd767b5ee8d
|
7
|
+
data.tar.gz: 49f0b00262e4cf38ec1aef0309dd6c3e13f2fbc70278a37ace2b651041f6e8323a4ec99dd7169c444492d391688fb0a5c440f57b09415f19583ab56647436712
|
data/README.md
CHANGED
@@ -238,6 +238,14 @@ image.contrast(0.5)
|
|
238
238
|
|
239
239
|
# gamma
|
240
240
|
image.gamma(1.1)
|
241
|
+
|
242
|
+
# convert to grayscale (automatic mode)
|
243
|
+
image.desaturate
|
244
|
+
|
245
|
+
# convert to grayscale with mode
|
246
|
+
image.desaturate(:lightness)
|
247
|
+
image.desaturate(:luminosity)
|
248
|
+
image.desaturate(:average)
|
241
249
|
```
|
242
250
|
|
243
251
|
### Image auto orientation
|
data/ext/rszr/image.c
CHANGED
@@ -394,6 +394,54 @@ static VALUE rszr_image__sharpen_bang(VALUE self, VALUE rb_radius)
|
|
394
394
|
}
|
395
395
|
|
396
396
|
|
397
|
+
static void rszr_desaturate_pixel(rszr_raw_pixel * pixel, int mode)
|
398
|
+
{
|
399
|
+
uint8_t grey;
|
400
|
+
if (mode == 2 || (mode == 0 && (pixel->blue > pixel->red && pixel->blue > pixel->green))) {
|
401
|
+
// lightness
|
402
|
+
grey = (pixel->blue + (pixel->red > pixel->green ? pixel->green : pixel->red)) / 2;
|
403
|
+
} else if (mode == 1 || mode == 0) {
|
404
|
+
// luminosity
|
405
|
+
grey = 0.21 * pixel->red + 0.72 * pixel->green + 0.07 * pixel->blue;
|
406
|
+
} else {
|
407
|
+
// average
|
408
|
+
grey = (pixel->red + pixel->green + pixel->blue) / 3;
|
409
|
+
}
|
410
|
+
pixel->red = grey;
|
411
|
+
pixel->green = grey;
|
412
|
+
pixel->blue = grey;
|
413
|
+
}
|
414
|
+
|
415
|
+
static VALUE rszr_image__desaturate_bang(VALUE self, VALUE rb_mode)
|
416
|
+
{
|
417
|
+
rszr_image_handle * handle;
|
418
|
+
rszr_raw_pixel * pixels;
|
419
|
+
uint64_t size;
|
420
|
+
int mode;
|
421
|
+
|
422
|
+
mode = NUM2INT(rb_mode);
|
423
|
+
|
424
|
+
Data_Get_Struct(self, rszr_image_handle, handle);
|
425
|
+
|
426
|
+
imlib_context_set_image(handle->image);
|
427
|
+
|
428
|
+
pixels = (rszr_raw_pixel *) imlib_image_get_data();
|
429
|
+
if (pixels == NULL) {
|
430
|
+
rb_raise(eRszrTransformationError, "error desaturating image");
|
431
|
+
return Qnil;
|
432
|
+
}
|
433
|
+
|
434
|
+
size = imlib_image_get_width() * imlib_image_get_height();
|
435
|
+
for (uint64_t i = 0; i < size; i++) {
|
436
|
+
rszr_desaturate_pixel(&pixels[i], mode);
|
437
|
+
}
|
438
|
+
|
439
|
+
imlib_image_put_back_data((uint32_t *) pixels);
|
440
|
+
|
441
|
+
return self;
|
442
|
+
}
|
443
|
+
|
444
|
+
|
397
445
|
static Imlib_Image rszr_create_cropped_scaled_image(const Imlib_Image image, VALUE rb_src_x, VALUE rb_src_y, VALUE rb_src_w, VALUE rb_src_h, VALUE rb_dst_w, VALUE rb_dst_h)
|
398
446
|
{
|
399
447
|
Imlib_Image resized_image;
|
@@ -688,15 +736,16 @@ void Init_rszr_image()
|
|
688
736
|
rb_define_protected_method(cImage, "_format", rszr_image__format_get, 0);
|
689
737
|
rb_define_protected_method(cImage, "_format=", rszr_image__format_set, 1);
|
690
738
|
|
691
|
-
rb_define_private_method(cImage, "_initialize",
|
692
|
-
rb_define_private_method(cImage, "_resize",
|
693
|
-
rb_define_private_method(cImage, "_crop",
|
694
|
-
rb_define_private_method(cImage, "_turn!",
|
695
|
-
rb_define_private_method(cImage, "_rotate",
|
696
|
-
rb_define_private_method(cImage, "_sharpen!",
|
697
|
-
rb_define_private_method(cImage, "
|
698
|
-
rb_define_private_method(cImage, "
|
699
|
-
rb_define_private_method(cImage, "
|
739
|
+
rb_define_private_method(cImage, "_initialize", rszr_image__initialize, 2);
|
740
|
+
rb_define_private_method(cImage, "_resize", rszr_image__resize, 7);
|
741
|
+
rb_define_private_method(cImage, "_crop", rszr_image__crop, 5);
|
742
|
+
rb_define_private_method(cImage, "_turn!", rszr_image__turn_bang, 1);
|
743
|
+
rb_define_private_method(cImage, "_rotate", rszr_image__rotate, 2);
|
744
|
+
rb_define_private_method(cImage, "_sharpen!", rszr_image__sharpen_bang, 1);
|
745
|
+
rb_define_private_method(cImage, "_desaturate!", rszr_image__desaturate_bang, 1);
|
746
|
+
rb_define_private_method(cImage, "_pixel", rszr_image__pixel_get, 2);
|
747
|
+
rb_define_private_method(cImage, "_blend", rszr_image__blend, 11);
|
748
|
+
rb_define_private_method(cImage, "_rectangle!", rszr_image__rectangle_bang, 5);
|
700
749
|
|
701
750
|
rb_define_private_method(cImage, "_save", rszr_image__save, 4);
|
702
751
|
}
|
data/ext/rszr/image.h
CHANGED
data/lib/rszr/image.rb
CHANGED
@@ -2,6 +2,7 @@ module Rszr
|
|
2
2
|
class Image
|
3
3
|
GRAVITIES = [true, :center, :n, :nw, :w, :sw, :s, :se, :e, :ne].freeze
|
4
4
|
BLENDING_MODES = %i[copy add subtract reshade].freeze
|
5
|
+
DESATURATION_MODES = %i[dynamic luminosity lightness average].freeze
|
5
6
|
|
6
7
|
extend Identification
|
7
8
|
include Buffered
|
@@ -119,6 +120,16 @@ module Rszr
|
|
119
120
|
_sharpen!(-radius)
|
120
121
|
end
|
121
122
|
|
123
|
+
def desaturate!(mode = :dynamic)
|
124
|
+
_mode = DESATURATION_MODES.index(mode)
|
125
|
+
raise ArgumentError, 'illegal mode' unless _mode
|
126
|
+
_desaturate!(_mode);
|
127
|
+
end
|
128
|
+
|
129
|
+
def desaturate(*args, **opts)
|
130
|
+
dup.desaturate!(*args, **opts)
|
131
|
+
end
|
132
|
+
|
122
133
|
def filter(filter_expr)
|
123
134
|
dup.filter!(filter_expr)
|
124
135
|
end
|
data/lib/rszr/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rszr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthias Grosser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Fast image resizer - do one thing and do it fast.
|
14
14
|
email:
|