Add resize_image script function

This commit is contained in:
GenevensiS
2024-10-03 17:51:49 +02:00
parent 6b0d311dc9
commit fa15206ba5
4 changed files with 38 additions and 1 deletions
+13
View File
@@ -304,6 +304,19 @@ bool EnlargeImage::operator == (const GeneratedImage& that) const {
&& border_size == that2->border_size; && border_size == that2->border_size;
} }
// ----------------------------------------------------------------------------- : ResizeImage
Image ResizeImage::generate(const Options& opt) const {
Image img = image->generate(opt);
return resample(img, width, height);
}
bool ResizeImage::operator == (const GeneratedImage& that) const {
const ResizeImage* that2 = dynamic_cast<const ResizeImage*>(&that);
return that2 && *image == *that2->image
&& width == that2->width
&& height == that2->height;
}
// ----------------------------------------------------------------------------- : CropImage // ----------------------------------------------------------------------------- : CropImage
Image CropImage::generate(const Options& opt) const { Image CropImage::generate(const Options& opt) const {
+15
View File
@@ -287,6 +287,21 @@ private:
double border_size; double border_size;
}; };
// ----------------------------------------------------------------------------- : ResizeImage
/// Resize an image by resampling it
class ResizeImage : public SimpleFilterImage {
public:
inline ResizeImage(const GeneratedImageP& image, int width, int height)
: SimpleFilterImage(image), width(max(1, width)), height(max(1, height))
{}
Image generate(const Options& opt) const override;
bool operator == (const GeneratedImage& that) const override;
private:
int width;
int height;
};
// ----------------------------------------------------------------------------- : CropImage // ----------------------------------------------------------------------------- : CropImage
/// Crop an image at a certain point, to a certain size /// Crop an image at a certain point, to a certain size
+8
View File
@@ -134,6 +134,13 @@ SCRIPT_FUNCTION(enlarge) {
return make_intrusive<EnlargeImage>(input, border_size); return make_intrusive<EnlargeImage>(input, border_size);
} }
SCRIPT_FUNCTION(resize_image) {
SCRIPT_PARAM_C(GeneratedImageP, input);
SCRIPT_PARAM(int, width);
SCRIPT_PARAM(int, height);
return make_intrusive<ResizeImage>(input, width, height);
}
SCRIPT_FUNCTION(crop) { SCRIPT_FUNCTION(crop) {
SCRIPT_PARAM_C(GeneratedImageP, input); SCRIPT_PARAM_C(GeneratedImageP, input);
SCRIPT_PARAM(int, width); SCRIPT_PARAM(int, width);
@@ -253,6 +260,7 @@ void init_script_image_functions(Context& ctx) {
ctx.setVariable(_("invert_image"), script_invert_image); ctx.setVariable(_("invert_image"), script_invert_image);
ctx.setVariable(_("recolor_image"), script_recolor_image); ctx.setVariable(_("recolor_image"), script_recolor_image);
ctx.setVariable(_("enlarge"), script_enlarge); ctx.setVariable(_("enlarge"), script_enlarge);
ctx.setVariable(_("resize_image"), script_resize_image);
ctx.setVariable(_("crop"), script_crop); ctx.setVariable(_("crop"), script_crop);
ctx.setVariable(_("flip_horizontal"), script_flip_horizontal); ctx.setVariable(_("flip_horizontal"), script_flip_horizontal);
ctx.setVariable(_("flip_vertical"), script_flip_vertical); ctx.setVariable(_("flip_vertical"), script_flip_vertical);
@@ -71,7 +71,7 @@ $built_in_functions = array(
'exclusive_choice' =>'', 'exclusive_choice' =>'',
'require_exclusive_choice'=>'', 'require_exclusive_choice'=>'',
'remove_choice' =>'', 'remove_choice' =>'',
// images // images
'linear_blend' =>'', 'linear_blend' =>'',
'masked_blend' =>'', 'masked_blend' =>'',
'combine_blend' =>'', 'combine_blend' =>'',
@@ -81,6 +81,7 @@ $built_in_functions = array(
'saturate' =>'', 'saturate' =>'',
'invert_image' =>'', 'invert_image' =>'',
'recolor_image' =>'', 'recolor_image' =>'',
'resize_image' =>'',
'enlarge' =>'', 'enlarge' =>'',
'crop' =>'', 'crop' =>'',
'flip_horizontal' =>'', 'flip_horizontal' =>'',