From 5d7f02c3e3a12ba45660711e8d0755faf5c1bdc7 Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Wed, 24 Feb 2016 10:57:20 +0100 Subject: [PATCH 01/26] const color space list, Add functions: - copy image - transform color space - sepia --- magick/init.lua | 87 +++++++++++++++++++++++++++++++++++++++++++++ magick/wand/lib.lua | 4 +++ 2 files changed, 91 insertions(+) mode change 100644 => 100755 magick/init.lua mode change 100644 => 100755 magick/wand/lib.lua diff --git a/magick/init.lua b/magick/init.lua old mode 100644 new mode 100755 index ce396cb..3b17773 --- a/magick/init.lua +++ b/magick/init.lua @@ -75,6 +75,45 @@ local composite_op = { ["DarkenIntensityCompositeOp"] = 66, ["LightenIntensityCompositeOp"] = 67 } + +local colorspace = { + ["UndefinedColorspace"] = 0, + ["RGBColorspace"] = 1, + ["GRAYColorspace"] = 2, + ["TransparentColorspace"] = 3, + ["OHTAColorspace"] = 4, + ["LabColorspace"] = 5, + ["XYZColorspace"] = 6, + ["YCbCrColorspace"] = 7, + ["YCCColorspace"] = 8, + ["YIQColorspace"] = 9, + ["YPbPrColorspace"] = 10, + ["YUVColorspace"] = 11, + ["CMYKColorspace"] = 12, + ["sRGBColorspace"] = 13, + ["HSBColorspace"] = 14, + ["HSLColorspace"] = 15, + ["HWBColorspace"] = 16, + ["Rec601LumaColorspace"] = 17, + ["Rec601YCbCrColorspace"] = 18, + ["Rec709LumaColorspace"] = 19, + ["Rec709YCbCrColorspace"] = 20, + ["LogColorspace"] = 21, + ["CMYColorspace"] = 22, + ["LuvColorspace"] = 23, + ["HCLColorspace"] = 24, + ["LCHColorspace"] = 25, + ["LMSColorspace"] = 26, + ["LCHabColorspace"] = 27, + ["LCHuvColorspace"] = 28, + ["scRGBColorspace"] = 29, + ["HSIColorspace"] = 30, + ["HSVColorspace"] = 31, + ["HCLpColorspace"] = 32, + ["YDbDrColorspace"] = 33, + ["xyYColorspace"] = 34 +} + local gravity_str = { "ForgetGravity", "NorthWestGravity", @@ -226,6 +265,13 @@ do end return handle_result(self, lib.MagickSharpenImage(self.wand, radius, sigma)) end, + color_space = function(self, space) + return handle_result(self, lib.MagickTransformImageColorspace(self.wand, colorspace[space])) + end, + sepia = function(self, threshold) + threshold = 65535 * threshold + return handle_result(self, lib.MagickSepiaToneImage(self.wand, threshold)) + end, rotate = function(self, degrees, r, g, b) if r == nil then r = 0 @@ -396,6 +442,7 @@ parse_size_str = function(str, src_w, src_h) center_crop = center_crop } end + local thumb thumb = function(img, size_str, output) if type(img) == "string" then @@ -418,10 +465,50 @@ thumb = function(img, size_str, output) end return ret end + +local color_space +color_space = function(img, space, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:color_space(space) + local ret + ret = img:write(output) + return ret +end + +local sepia +sepia = function(img, threshold, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:sepia(threshold) + local ret + ret = img:write(output) + return ret +end + +local copy_image +copy_image = function(img, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + local ret + if output then + ret = img:write(output) + else + ret = img:get_blob() + end + return ret +end + return { load_image = load_image, load_image_from_blob = load_image_from_blob, thumb = thumb, + copy_image = copy_image, + color_space = color_space, + sepia = sepia, Image = Image, parse_size_str = parse_size_str, VERSION = VERSION diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua old mode 100644 new mode 100755 index 30de4e4..bfcc144 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -7,6 +7,7 @@ ffi.cdef([[ typedef void MagickWand; typedef int ssize_t; typedef int CompositeOperator; typedef int GravityType; + typedef int ColorspaceType; void MagickWandGenesis(); MagickWand* NewMagickWand(); @@ -33,6 +34,9 @@ ffi.cdef([[ typedef void MagickWand; const size_t, const size_t, const ssize_t, const ssize_t); MagickBooleanType MagickBlurImage(MagickWand*, const double, const double); + MagickBooleanType MagickSetImageColorspace(MagickWand* wand, const ColorspaceType colorspace); + MagickBooleanType MagickTransformImageColorspace(MagickWand *wand, const ColorspaceType colorspace); + MagickBooleanType MagickSepiaToneImage(MagickWand* wand, const double threshold); MagickBooleanType MagickSetImageFormat(MagickWand* wand, const char* format); char* MagickGetImageFormat(MagickWand* wand); From 93e1cb74a5becced58a61274449677a80b393ef8 Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Wed, 24 Feb 2016 11:50:29 +0100 Subject: [PATCH 02/26] Return rotate method --- magick/init.lua | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/magick/init.lua b/magick/init.lua index 3b17773..daf1604 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -488,6 +488,17 @@ sepia = function(img, threshold, output) return ret end +local rotate +rotate = function(img, degrees, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:rotate(degrees) + local ret + ret = img:write(output) + return ret +end + local copy_image copy_image = function(img, output) if type(img) == "string" then @@ -509,6 +520,7 @@ return { copy_image = copy_image, color_space = color_space, sepia = sepia, + rotate = rotate, Image = Image, parse_size_str = parse_size_str, VERSION = VERSION From 908ef6df1b24c0677446e6e7945056474e2fac92 Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Wed, 24 Feb 2016 13:59:01 +0100 Subject: [PATCH 03/26] Secure resize --- magick/init.lua | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/magick/init.lua b/magick/init.lua index daf1604..caa939e 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -449,7 +449,14 @@ thumb = function(img, size_str, output) img = assert(load_image(img)) end local src_w, src_h = img:get_width(), img:get_height() + local str_w, str_h, rest = size_str:match("^(%d*%%?)x(%d*%%?)(.*)$") local opts = parse_size_str(size_str, src_w, src_h) + if tonumber(str_w) > src_w or tonumber(str_h) > src_h then + if output then + return img:write(output) + end + return img:get_blob() + end if opts.center_crop then img:resize_and_crop(opts.w, opts.h) elseif opts.crop_x then @@ -457,7 +464,6 @@ thumb = function(img, size_str, output) else img:resize(opts.w, opts.h) end - local ret if output then ret = img:write(output) else From c04422e67500300d6e340e232183f88b8c1ef93f Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Wed, 24 Feb 2016 15:33:08 +0100 Subject: [PATCH 04/26] secure resize --- magick/init.lua | 57 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/magick/init.lua b/magick/init.lua index caa939e..363cd47 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -443,20 +443,71 @@ parse_size_str = function(str, src_w, src_h) } end +local get_dimensions_from_string +get_dimensions_from_string = function(size_str, src_w, src_h) + local str_w, str_h, rest = size_str:match("^(%d*%%?)x(%d*%%?)(.*)$") + local p = str_w:match("(%d+)%%") + if p then + w = tonumber(p) / 100 * src_w + else + w = tonumber(str_w) or 0 + end + local p = str_h:match("(%d+)%%") + if p then + h = tonumber(p) / 100 * src_h + else + h = tonumber(str_h) or 0 + end + + return { + w = w, + h = h + } +end + +function serializeTable(val, name, skipnewlines, depth) + skipnewlines = skipnewlines or false + depth = depth or 0 + + local tmp = string.rep(" ", depth) + + if name then tmp = tmp .. name .. " = " end + + if type(val) == "table" then + tmp = tmp .. "{" .. (not skipnewlines and "\n" or "") + + for k, v in pairs(val) do + tmp = tmp .. serializeTable(v, k, skipnewlines, depth + 1) .. "," .. (not skipnewlines and "\n" or "") + end + + tmp = tmp .. string.rep(" ", depth) .. "}" + elseif type(val) == "number" then + tmp = tmp .. tostring(val) + elseif type(val) == "string" then + tmp = tmp .. string.format("%q", val) + elseif type(val) == "boolean" then + tmp = tmp .. (val and "true" or "false") + else + tmp = tmp .. "\"[inserializeable datatype:" .. type(val) .. "]\"" + end + + return tmp +end + local thumb thumb = function(img, size_str, output) if type(img) == "string" then img = assert(load_image(img)) end local src_w, src_h = img:get_width(), img:get_height() - local str_w, str_h, rest = size_str:match("^(%d*%%?)x(%d*%%?)(.*)$") - local opts = parse_size_str(size_str, src_w, src_h) - if tonumber(str_w) > src_w or tonumber(str_h) > src_h then + dimensions = get_dimensions_from_string(size_str, src_w, src_h) + if dimensions.w > src_w or dimensions.h > src_h then if output then return img:write(output) end return img:get_blob() end + local opts = parse_size_str(size_str, src_w, src_h) if opts.center_crop then img:resize_and_crop(opts.w, opts.h) elseif opts.crop_x then From 899cf6ee6ae4958212223fbd67c0a1e0188743ff Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Wed, 24 Feb 2016 16:04:49 +0100 Subject: [PATCH 05/26] fix png --- magick/init.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/magick/init.lua b/magick/init.lua index 363cd47..990e5b5 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -270,6 +270,7 @@ do end, sepia = function(self, threshold) threshold = 65535 * threshold + handle_result(self, lib.MagickTransformImageColorspace(self.wand, colorspace["TransparentColorspace"])) return handle_result(self, lib.MagickSepiaToneImage(self.wand, threshold)) end, rotate = function(self, degrees, r, g, b) From 1ebef6f12043c1695653a0f4160b72ecace22520 Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Thu, 25 Feb 2016 11:45:47 +0100 Subject: [PATCH 06/26] fix png, brightness_contrast --- magick/init.lua | 17 ++++++++++++++++- magick/wand/lib.lua | 12 +++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/magick/init.lua b/magick/init.lua index 990e5b5..146f43a 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -270,9 +270,12 @@ do end, sepia = function(self, threshold) threshold = 65535 * threshold - handle_result(self, lib.MagickTransformImageColorspace(self.wand, colorspace["TransparentColorspace"])) + handle_result(self, lib.MagickSetImageAlphaChannel(self.wand, 3)) return handle_result(self, lib.MagickSepiaToneImage(self.wand, threshold)) end, + brightness_contrast = function(self, brightness, contrast) + return handle_result(self, lib.MagickBrightnessContrastImage(self.wand, tonumber(brightness), tonumber(contrast))) + end, rotate = function(self, degrees, r, g, b) if r == nil then r = 0 @@ -546,6 +549,17 @@ sepia = function(img, threshold, output) return ret end +local brightness_contrast +brightness_contrast = function(img, brightness, contrast, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:brightness_contrast(brightness, contrast) + local ret + ret = img:write(output) + return ret +end + local rotate rotate = function(img, degrees, output) if type(img) == "string" then @@ -577,6 +591,7 @@ return { thumb = thumb, copy_image = copy_image, color_space = color_space, + brightness_contrast = brightness_contrast, sepia = sepia, rotate = rotate, Image = Image, diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua index bfcc144..14f9124 100755 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -8,6 +8,7 @@ ffi.cdef([[ typedef void MagickWand; typedef int CompositeOperator; typedef int GravityType; typedef int ColorspaceType; + typedef int AlphaChannelOption; void MagickWandGenesis(); MagickWand* NewMagickWand(); @@ -36,7 +37,15 @@ ffi.cdef([[ typedef void MagickWand; MagickBooleanType MagickBlurImage(MagickWand*, const double, const double); MagickBooleanType MagickSetImageColorspace(MagickWand* wand, const ColorspaceType colorspace); MagickBooleanType MagickTransformImageColorspace(MagickWand *wand, const ColorspaceType colorspace); - MagickBooleanType MagickSepiaToneImage(MagickWand* wand, const double threshold); + MagickBooleanType MagickSepiaToneImage(MagickWand* wand, const double threshold); + MagickBooleanType MagickSolarizeImage(MagickWand* wand, const double threshold); + MagickBooleanType MagickSetImageAlpha(MagickWand*, const double); + MagickBooleanType MagickSetImageAlphaChannel(MagickWand*, const AlphaChannelOption); + MagickBooleanType MagickSetImageBackgroundColor(MagickWand *wand, const PixelWand *background); + MagickBooleanType MagickNewImage(MagickWand *wand, const size_t columns,const size_t rows, const PixelWand *background); + MagickBooleanType MagickBrightnessContrastImage(MagickWand *wand, const double brightness,const double contrast); + + MagickBooleanType MagickSetImageFormat(MagickWand* wand, const char* format); char* MagickGetImageFormat(MagickWand* wand); @@ -80,6 +89,7 @@ ffi.cdef([[ typedef void MagickWand; double PixelGetGreen(const PixelWand *); double PixelGetBlue(const PixelWand *); + void PixelSetColor(PixelWand *wand, const char *color); void PixelSetAlpha(PixelWand *wand, const double alpha); void PixelSetRed(PixelWand *wand, const double red); void PixelSetGreen(PixelWand *wand, const double green); From 41426f006ee8fd9dab50a0c0804d7a902240f63a Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Thu, 25 Feb 2016 12:46:32 +0100 Subject: [PATCH 07/26] blur, sharpen --- magick/init.lua | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/magick/init.lua b/magick/init.lua index 146f43a..1f0a8eb 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -274,7 +274,7 @@ do return handle_result(self, lib.MagickSepiaToneImage(self.wand, threshold)) end, brightness_contrast = function(self, brightness, contrast) - return handle_result(self, lib.MagickBrightnessContrastImage(self.wand, tonumber(brightness), tonumber(contrast))) + return handle_result(self, lib.MagickBrightnessContrastImage(self.wand, brightness, contrast)) end, rotate = function(self, degrees, r, g, b) if r == nil then @@ -560,6 +560,28 @@ brightness_contrast = function(img, brightness, contrast, output) return ret end +local sharpen +sharpen = function(img, sigma, radius, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:sharpen(sigma, radius) + local ret + ret = img:write(output) + return ret +end + +local blur +blur = function(img, sigma, radius, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:blur(sigma, radius) + local ret + ret = img:write(output) + return ret +end + local rotate rotate = function(img, degrees, output) if type(img) == "string" then @@ -594,6 +616,8 @@ return { brightness_contrast = brightness_contrast, sepia = sepia, rotate = rotate, + blur = blur, + sharpen = sharpen, Image = Image, parse_size_str = parse_size_str, VERSION = VERSION From 8f10b6a414330e5e676af23bc4dacf05b11c7da5 Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Thu, 25 Feb 2016 13:19:28 +0100 Subject: [PATCH 08/26] sketch --- magick/init.lua | 15 +++++++++++++++ magick/wand/lib.lua | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/magick/init.lua b/magick/init.lua index 1f0a8eb..526d816 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -276,6 +276,9 @@ do brightness_contrast = function(self, brightness, contrast) return handle_result(self, lib.MagickBrightnessContrastImage(self.wand, brightness, contrast)) end, + sketch = function(self, radius, sigma, angle) + return handle_result(self, lib.MagickSketchImage(self.wand, radius, sigma, angle)) + end, rotate = function(self, degrees, r, g, b) if r == nil then r = 0 @@ -593,6 +596,17 @@ rotate = function(img, degrees, output) return ret end +local sketch +sketch = function(img, sigma, radius, angle, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:sketch(sigma, radius, angle) + local ret + ret = img:write(output) + return ret +end + local copy_image copy_image = function(img, output) if type(img) == "string" then @@ -618,6 +632,7 @@ return { rotate = rotate, blur = blur, sharpen = sharpen, + sketch = sketch, Image = Image, parse_size_str = parse_size_str, VERSION = VERSION diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua index 14f9124..b070b31 100755 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -44,7 +44,7 @@ ffi.cdef([[ typedef void MagickWand; MagickBooleanType MagickSetImageBackgroundColor(MagickWand *wand, const PixelWand *background); MagickBooleanType MagickNewImage(MagickWand *wand, const size_t columns,const size_t rows, const PixelWand *background); MagickBooleanType MagickBrightnessContrastImage(MagickWand *wand, const double brightness,const double contrast); - + MagickBooleanType MagickSketchImage(MagickWand *wand, const double radius,const double sigma,const double angle); MagickBooleanType MagickSetImageFormat(MagickWand* wand, const char* format); From 3025f6c1fb85a97066bb32b46997384587fb189f Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Thu, 25 Feb 2016 14:02:32 +0100 Subject: [PATCH 09/26] vignette --- magick/init.lua | 18 ++++++++++++++++++ magick/wand/lib.lua | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/magick/init.lua b/magick/init.lua index 526d816..89bcbab 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -279,6 +279,9 @@ do sketch = function(self, radius, sigma, angle) return handle_result(self, lib.MagickSketchImage(self.wand, radius, sigma, angle)) end, + vignette = function(self, vignette_black_point, vignette_white_point, vignette_x, vignette_y) + return handle_result(self, lib.MagickVignetteImage(self.wand, vignette_black_point, vignette_white_point, vignette_x, vignette_y)) + end, rotate = function(self, degrees, r, g, b) if r == nil then r = 0 @@ -607,6 +610,20 @@ sketch = function(img, sigma, radius, angle, output) return ret end +local vignette +vignette = function(img, vignette_black_point, vignette_white_point, vignette_x, vignette_y, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + file = io.open("/vagrant/lua.log", "w") + file:write(string.format("dest_fname: %s ; black_point: %s ; white_point: %s ; vignette_x: %s ; vignette_y: %s ; dest_fname: %s", img, vignette_black_point, vignette_white_point, vignette_x, vignette_y, output)) + file:close() + img:vignette(vignette_black_point, vignette_white_point, vignette_x, vignette_y) + local ret + ret = img:write(output) + return ret +end + local copy_image copy_image = function(img, output) if type(img) == "string" then @@ -633,6 +650,7 @@ return { blur = blur, sharpen = sharpen, sketch = sketch, + vignette = vignette, Image = Image, parse_size_str = parse_size_str, VERSION = VERSION diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua index b070b31..f1e56fc 100755 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -45,7 +45,7 @@ ffi.cdef([[ typedef void MagickWand; MagickBooleanType MagickNewImage(MagickWand *wand, const size_t columns,const size_t rows, const PixelWand *background); MagickBooleanType MagickBrightnessContrastImage(MagickWand *wand, const double brightness,const double contrast); MagickBooleanType MagickSketchImage(MagickWand *wand, const double radius,const double sigma,const double angle); - + MagickBooleanType MagickVignetteImage(MagickWand *wand, const double black_point,const double white_point,const ssize_t x, const ssize_t y); MagickBooleanType MagickSetImageFormat(MagickWand* wand, const char* format); char* MagickGetImageFormat(MagickWand* wand); From d1fc36bd460b32923055b80ae3a700f2a182aa98 Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Thu, 25 Feb 2016 14:03:25 +0100 Subject: [PATCH 10/26] remove log --- magick/init.lua | 3 --- 1 file changed, 3 deletions(-) diff --git a/magick/init.lua b/magick/init.lua index 89bcbab..5b4a6f8 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -615,9 +615,6 @@ vignette = function(img, vignette_black_point, vignette_white_point, vignette_x, if type(img) == "string" then img = assert(load_image(img)) end - file = io.open("/vagrant/lua.log", "w") - file:write(string.format("dest_fname: %s ; black_point: %s ; white_point: %s ; vignette_x: %s ; vignette_y: %s ; dest_fname: %s", img, vignette_black_point, vignette_white_point, vignette_x, vignette_y, output)) - file:close() img:vignette(vignette_black_point, vignette_white_point, vignette_x, vignette_y) local ret ret = img:write(output) From de5732a0cbd4f7d7637e8d7c24b774110fd89ea5 Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Thu, 25 Feb 2016 14:10:54 +0100 Subject: [PATCH 11/26] fix transparent --- magick/init.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/magick/init.lua b/magick/init.lua index 5b4a6f8..38445d8 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -280,6 +280,9 @@ do return handle_result(self, lib.MagickSketchImage(self.wand, radius, sigma, angle)) end, vignette = function(self, vignette_black_point, vignette_white_point, vignette_x, vignette_y) + local pixel = ffi.gc(lib.NewPixelWand(), lib.DestroyPixelWand) + lib.PixelSetColor(pixel, 'transparent') + lib.MagickSetImageBackgroundColor(self.wand, pixel) return handle_result(self, lib.MagickVignetteImage(self.wand, vignette_black_point, vignette_white_point, vignette_x, vignette_y)) end, rotate = function(self, degrees, r, g, b) From 4a7f7c53bf4c47f5eb80181672b494a5c3ec8156 Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Thu, 25 Feb 2016 15:23:06 +0100 Subject: [PATCH 12/26] flip, flop, oil_paint --- magick/init.lua | 45 +++++++++++++++++++++++++++++++++++++++++++++ magick/wand/lib.lua | 3 +++ 2 files changed, 48 insertions(+) diff --git a/magick/init.lua b/magick/init.lua index 38445d8..52c73e4 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -279,6 +279,15 @@ do sketch = function(self, radius, sigma, angle) return handle_result(self, lib.MagickSketchImage(self.wand, radius, sigma, angle)) end, + flip = function(self) + return handle_result(self, lib.MagickFlipImage(self.wand)) + end, + flop = function(self) + return handle_result(self, lib.MagickFlopImage(self.wand)) + end, + oil_paint = function(self, radius) + return handle_result(self, lib.MagickOilPaintImage(self.wand, radius)) + end, vignette = function(self, vignette_black_point, vignette_white_point, vignette_x, vignette_y) local pixel = ffi.gc(lib.NewPixelWand(), lib.DestroyPixelWand) lib.PixelSetColor(pixel, 'transparent') @@ -624,6 +633,39 @@ vignette = function(img, vignette_black_point, vignette_white_point, vignette_x, return ret end +local flip +flip = function(img, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:flip() + local ret + ret = img:write(output) + return ret +end + +local flop +flop = function(img, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:flop() + local ret + ret = img:write(output) + return ret +end + +local oil_paint +oil_paint = function(img, radius, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:oil_paint(radius) + local ret + ret = img:write(output) + return ret +end + local copy_image copy_image = function(img, output) if type(img) == "string" then @@ -651,6 +693,9 @@ return { sharpen = sharpen, sketch = sketch, vignette = vignette, + flip = flip, + flop = flop, + oil_paint = oil_paint, Image = Image, parse_size_str = parse_size_str, VERSION = VERSION diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua index f1e56fc..4bbb16d 100755 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -46,6 +46,9 @@ ffi.cdef([[ typedef void MagickWand; MagickBooleanType MagickBrightnessContrastImage(MagickWand *wand, const double brightness,const double contrast); MagickBooleanType MagickSketchImage(MagickWand *wand, const double radius,const double sigma,const double angle); MagickBooleanType MagickVignetteImage(MagickWand *wand, const double black_point,const double white_point,const ssize_t x, const ssize_t y); + MagickBooleanType MagickFlipImage(MagickWand *wand); + MagickBooleanType MagickFlopImage(MagickWand *wand); + MagickBooleanType MagickOilPaintImage(MagickWand *wand, const double radius); MagickBooleanType MagickSetImageFormat(MagickWand* wand, const char* format); char* MagickGetImageFormat(MagickWand* wand); From 65972d3de8ce6a57c0a8e1f3d2d1868f4e5c4e5b Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Fri, 26 Feb 2016 15:23:42 +0100 Subject: [PATCH 13/26] fix, brightness_saturation_hue, negate, emboss --- magick/init.lua | 80 +++++++++++++++++++++++++++++---------------- magick/wand/lib.lua | 7 +++- 2 files changed, 57 insertions(+), 30 deletions(-) diff --git a/magick/init.lua b/magick/init.lua index 52c73e4..0f623fc 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -127,6 +127,12 @@ local gravity_str = { "SouthEastGravity", "StaticGravity" } + +local boolean_type = { + ["MagickFalse"] = 0, + ["MagickTrue"] = 1 +} + local gravity_type = { } for i, t in ipairs(gravity_str) do gravity_type[t] = i @@ -276,6 +282,9 @@ do brightness_contrast = function(self, brightness, contrast) return handle_result(self, lib.MagickBrightnessContrastImage(self.wand, brightness, contrast)) end, + brightness_saturation_hue = function(self, brightness, saturation, hue) + return handle_result(self, lib.MagickModulateImage(self.wand, brightness, saturation, hue)) + end, sketch = function(self, radius, sigma, angle) return handle_result(self, lib.MagickSketchImage(self.wand, radius, sigma, angle)) end, @@ -288,6 +297,12 @@ do oil_paint = function(self, radius) return handle_result(self, lib.MagickOilPaintImage(self.wand, radius)) end, + negate = function(self, isgray) + return handle_result(self, lib.MagickNegateImage(self.wand, boolean_type[isgray])) + end, + emboss = function(self, radius, sigma) + return handle_result(self, lib.MagickEmbossImage(self.wand, radius, sigma)) + end, vignette = function(self, vignette_black_point, vignette_white_point, vignette_x, vignette_y) local pixel = ffi.gc(lib.NewPixelWand(), lib.DestroyPixelWand) lib.PixelSetColor(pixel, 'transparent') @@ -487,35 +502,6 @@ get_dimensions_from_string = function(size_str, src_w, src_h) } end -function serializeTable(val, name, skipnewlines, depth) - skipnewlines = skipnewlines or false - depth = depth or 0 - - local tmp = string.rep(" ", depth) - - if name then tmp = tmp .. name .. " = " end - - if type(val) == "table" then - tmp = tmp .. "{" .. (not skipnewlines and "\n" or "") - - for k, v in pairs(val) do - tmp = tmp .. serializeTable(v, k, skipnewlines, depth + 1) .. "," .. (not skipnewlines and "\n" or "") - end - - tmp = tmp .. string.rep(" ", depth) .. "}" - elseif type(val) == "number" then - tmp = tmp .. tostring(val) - elseif type(val) == "string" then - tmp = tmp .. string.format("%q", val) - elseif type(val) == "boolean" then - tmp = tmp .. (val and "true" or "false") - else - tmp = tmp .. "\"[inserializeable datatype:" .. type(val) .. "]\"" - end - - return tmp -end - local thumb thumb = function(img, size_str, output) if type(img) == "string" then @@ -666,6 +652,39 @@ oil_paint = function(img, radius, output) return ret end +local brightness_saturation_hue +brightness_saturation_hue = function(img, brightness, saturation, hue, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:brightness_saturation_hue(brightness, saturation, hue) + local ret + ret = img:write(output) + return ret +end + +local negate +negate = function(img, isgray, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:negate(isgray) + local ret + ret = img:write(output) + return ret +end + +local emboss +emboss = function(img, radius, sigma, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:emboss(radius, sigma) + local ret + ret = img:write(output) + return ret +end + local copy_image copy_image = function(img, output) if type(img) == "string" then @@ -696,6 +715,9 @@ return { flip = flip, flop = flop, oil_paint = oil_paint, + brightness_saturation_hue = brightness_saturation_hue, + negate = negate, + emboss = emboss, Image = Image, parse_size_str = parse_size_str, VERSION = VERSION diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua index 4bbb16d..02c10b5 100755 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -49,10 +49,15 @@ ffi.cdef([[ typedef void MagickWand; MagickBooleanType MagickFlipImage(MagickWand *wand); MagickBooleanType MagickFlopImage(MagickWand *wand); MagickBooleanType MagickOilPaintImage(MagickWand *wand, const double radius); - + MagickBooleanType MagickModulateImage(MagickWand *wand, const double brightness,const double saturation,const double hue); MagickBooleanType MagickSetImageFormat(MagickWand* wand, const char* format); + MagickBooleanType MagickNegateImage(MagickWand *wand, const MagickBooleanType gray); + MagickBooleanType MagickEmbossImage(MagickWand *wand,const double radius, const double sigma); + + char* MagickGetImageFormat(MagickWand* wand); + size_t MagickGetImageCompressionQuality(MagickWand * wand); MagickBooleanType MagickSetImageCompressionQuality(MagickWand *wand, const size_t quality); From 5802f9e552e4f8a15527206ad20a322a0a08d667 Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Fri, 26 Feb 2016 16:13:01 +0100 Subject: [PATCH 14/26] enhance --- magick/init.lua | 15 +++++++++++++++ magick/wand/lib.lua | 1 + 2 files changed, 16 insertions(+) diff --git a/magick/init.lua b/magick/init.lua index 0f623fc..dfd83e0 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -303,6 +303,9 @@ do emboss = function(self, radius, sigma) return handle_result(self, lib.MagickEmbossImage(self.wand, radius, sigma)) end, + enhance = function(self) + return handle_result(self, lib.MagickEnhanceImage(self.wand)) + end, vignette = function(self, vignette_black_point, vignette_white_point, vignette_x, vignette_y) local pixel = ffi.gc(lib.NewPixelWand(), lib.DestroyPixelWand) lib.PixelSetColor(pixel, 'transparent') @@ -685,6 +688,17 @@ emboss = function(img, radius, sigma, output) return ret end +local enhance +enhance = function(img, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:enhance() + local ret + ret = img:write(output) + return ret +end + local copy_image copy_image = function(img, output) if type(img) == "string" then @@ -718,6 +732,7 @@ return { brightness_saturation_hue = brightness_saturation_hue, negate = negate, emboss = emboss, + enhance = enhance, Image = Image, parse_size_str = parse_size_str, VERSION = VERSION diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua index 02c10b5..b2e34ef 100755 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -53,6 +53,7 @@ ffi.cdef([[ typedef void MagickWand; MagickBooleanType MagickSetImageFormat(MagickWand* wand, const char* format); MagickBooleanType MagickNegateImage(MagickWand *wand, const MagickBooleanType gray); MagickBooleanType MagickEmbossImage(MagickWand *wand,const double radius, const double sigma); + MagickBooleanType MagickEnhanceImage(MagickWand *wand); char* MagickGetImageFormat(MagickWand* wand); From f11b46a9fd28b9cd9b703d2c64e23c6c29e38e7e Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Mon, 29 Feb 2016 10:48:23 +0100 Subject: [PATCH 15/26] Tint, Wave --- magick/init.lua | 35 +++++++++++++++++++++++++++++++++++ magick/wand/lib.lua | 4 +++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/magick/init.lua b/magick/init.lua index dfd83e0..a753b47 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -306,12 +306,22 @@ do enhance = function(self) return handle_result(self, lib.MagickEnhanceImage(self.wand)) end, + tint = function(self, color, opacity) + local pixel_color = ffi.gc(lib.NewPixelWand(), lib.DestroyPixelWand) + lib.PixelSetColor(pixel_color, color) + local pixel_opacity = ffi.gc(lib.NewPixelWand(), lib.DestroyPixelWand) + lib.PixelSetColor(pixel_opacity, opacity) + return handle_result(self, lib.MagickTintImage(self.wand, pixel_color, pixel_opacity)) + end, vignette = function(self, vignette_black_point, vignette_white_point, vignette_x, vignette_y) local pixel = ffi.gc(lib.NewPixelWand(), lib.DestroyPixelWand) lib.PixelSetColor(pixel, 'transparent') lib.MagickSetImageBackgroundColor(self.wand, pixel) return handle_result(self, lib.MagickVignetteImage(self.wand, vignette_black_point, vignette_white_point, vignette_x, vignette_y)) end, + wave = function(self, amplitude, wave_length) + return handle_result(self, lib.MagickWaveImage(self.wand, amplitude, wave_length)) + end, rotate = function(self, degrees, r, g, b) if r == nil then r = 0 @@ -688,6 +698,29 @@ emboss = function(img, radius, sigma, output) return ret end +local tint +tint = function(img, color, opacity, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:tint(color, opacity) + local ret + ret = img:write(output) + return ret +end + +local wave +wave = function(img, amplitude, wave_length, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:wave(amplitude, wave_length) + local ret + ret = img:write(output) + return ret +end + + local enhance enhance = function(img, output) if type(img) == "string" then @@ -733,6 +766,8 @@ return { negate = negate, emboss = emboss, enhance = enhance, + tint = tint, + wave = wave, Image = Image, parse_size_str = parse_size_str, VERSION = VERSION diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua index b2e34ef..324d2d1 100755 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -54,7 +54,8 @@ ffi.cdef([[ typedef void MagickWand; MagickBooleanType MagickNegateImage(MagickWand *wand, const MagickBooleanType gray); MagickBooleanType MagickEmbossImage(MagickWand *wand,const double radius, const double sigma); MagickBooleanType MagickEnhanceImage(MagickWand *wand); - + MagickBooleanType MagickTintImage(MagickWand *wand, const PixelWand *tint, const PixelWand *opacity); + MagickBooleanType MagickWaveImage(MagickWand *wand,const double amplitude, const double wave_length); char* MagickGetImageFormat(MagickWand* wand); @@ -103,6 +104,7 @@ ffi.cdef([[ typedef void MagickWand; void PixelSetRed(PixelWand *wand, const double red); void PixelSetGreen(PixelWand *wand, const double green); void PixelSetBlue(PixelWand *wand, const double blue); + void PixelSetOpacity(PixelWand *wand,const double opacity); ]]) local get_flags get_flags = function() From d0cb9027b76fa760459180430690dc8ad6d5038f Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Mon, 29 Feb 2016 11:47:48 +0100 Subject: [PATCH 16/26] Swirl --- magick/init.lua | 16 +++++++++++++++- magick/wand/lib.lua | 2 ++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/magick/init.lua b/magick/init.lua index a753b47..99f51c6 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -322,6 +322,9 @@ do wave = function(self, amplitude, wave_length) return handle_result(self, lib.MagickWaveImage(self.wand, amplitude, wave_length)) end, + swirl = function(self, degrees) + return handle_result(self, lib.MagickSwirlImage(self.wand, degrees)) + end, rotate = function(self, degrees, r, g, b) if r == nil then r = 0 @@ -720,7 +723,6 @@ wave = function(img, amplitude, wave_length, output) return ret end - local enhance enhance = function(img, output) if type(img) == "string" then @@ -732,6 +734,17 @@ enhance = function(img, output) return ret end +local swirl +swirl = function(img, degrees, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:swirl(degrees) + local ret + ret = img:write(output) + return ret +end + local copy_image copy_image = function(img, output) if type(img) == "string" then @@ -768,6 +781,7 @@ return { enhance = enhance, tint = tint, wave = wave, + swirl = swirl, Image = Image, parse_size_str = parse_size_str, VERSION = VERSION diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua index 324d2d1..7a55c3f 100755 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -56,7 +56,9 @@ ffi.cdef([[ typedef void MagickWand; MagickBooleanType MagickEnhanceImage(MagickWand *wand); MagickBooleanType MagickTintImage(MagickWand *wand, const PixelWand *tint, const PixelWand *opacity); MagickBooleanType MagickWaveImage(MagickWand *wand,const double amplitude, const double wave_length); + MagickBooleanType MagickSwirlImage(MagickWand *wand,const double degrees); + char* MagickGetImageFormat(MagickWand* wand); From 00bee6eb5bf30a2e99573c72c4301fc23cac79bf Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Mon, 29 Feb 2016 13:46:47 +0100 Subject: [PATCH 17/26] polaroid --- magick/init.lua | 16 ++++++++++++++++ magick/wand/lib.lua | 7 +++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/magick/init.lua b/magick/init.lua index 99f51c6..9527636 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -325,6 +325,10 @@ do swirl = function(self, degrees) return handle_result(self, lib.MagickSwirlImage(self.wand, degrees)) end, + polaroid_image = function(self) + local drawing_wand = lib.NewDrawingWand() + return handle_result(self, lib.MagickPolaroidImage(self.wand, drawing_wand, 0.0)) + end, rotate = function(self, degrees, r, g, b) if r == nil then r = 0 @@ -745,6 +749,17 @@ swirl = function(img, degrees, output) return ret end +local polaroid_image +polaroid_image = function(img, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:polaroid_image() + local ret + ret = img:write(output) + return ret +end + local copy_image copy_image = function(img, output) if type(img) == "string" then @@ -782,6 +797,7 @@ return { tint = tint, wave = wave, swirl = swirl, + polaroid_image = polaroid_image, Image = Image, parse_size_str = parse_size_str, VERSION = VERSION diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua index 7a55c3f..3278676 100755 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -1,5 +1,7 @@ local ffi = require("ffi") -ffi.cdef([[ typedef void MagickWand; +ffi.cdef([[ + typedef void MagickWand; + typedef void DrawingWand; typedef void PixelWand; typedef int MagickBooleanType; @@ -12,6 +14,7 @@ ffi.cdef([[ typedef void MagickWand; void MagickWandGenesis(); MagickWand* NewMagickWand(); + DrawingWand* NewDrawingWand(); MagickWand* DestroyMagickWand(MagickWand*); MagickBooleanType MagickReadImage(MagickWand*, const char*); MagickBooleanType MagickReadImageBlob(MagickWand*, const void*, const size_t); @@ -57,8 +60,8 @@ ffi.cdef([[ typedef void MagickWand; MagickBooleanType MagickTintImage(MagickWand *wand, const PixelWand *tint, const PixelWand *opacity); MagickBooleanType MagickWaveImage(MagickWand *wand,const double amplitude, const double wave_length); MagickBooleanType MagickSwirlImage(MagickWand *wand,const double degrees); + MagickBooleanType MagickPolaroidImage(MagickWand *wand, const DrawingWand *drawing_wand,const double angle); - char* MagickGetImageFormat(MagickWand* wand); From 858821f2920b4ad2742d308325f65a1592317384 Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Mon, 29 Feb 2016 15:06:36 +0100 Subject: [PATCH 18/26] Border --- magick/init.lua | 18 ++++++++++++++++++ magick/wand/lib.lua | 3 +++ 2 files changed, 21 insertions(+) diff --git a/magick/init.lua b/magick/init.lua index 9527636..d62453d 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -329,6 +329,11 @@ do local drawing_wand = lib.NewDrawingWand() return handle_result(self, lib.MagickPolaroidImage(self.wand, drawing_wand, 0.0)) end, + border = function(self, color, width, height) + local pixel = ffi.gc(lib.NewPixelWand(), lib.DestroyPixelWand) + lib.PixelSetColor(pixel, color) + return handle_result(self, lib.MagickBorderImage(self.wand, pixel, width, height)) + end, rotate = function(self, degrees, r, g, b) if r == nil then r = 0 @@ -760,6 +765,18 @@ polaroid_image = function(img, output) return ret end +local border +border = function(img, color, width, height, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:border(color, width, height) + local ret + ret = img:write(output) + return ret +end + + local copy_image copy_image = function(img, output) if type(img) == "string" then @@ -797,6 +814,7 @@ return { tint = tint, wave = wave, swirl = swirl, + border = border, polaroid_image = polaroid_image, Image = Image, parse_size_str = parse_size_str, diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua index 3278676..31b569e 100755 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -61,6 +61,9 @@ ffi.cdef([[ MagickBooleanType MagickWaveImage(MagickWand *wand,const double amplitude, const double wave_length); MagickBooleanType MagickSwirlImage(MagickWand *wand,const double degrees); MagickBooleanType MagickPolaroidImage(MagickWand *wand, const DrawingWand *drawing_wand,const double angle); + MagickBooleanType MagickBorderImage(MagickWand *wand, const PixelWand *bordercolor,const size_t width, const size_t height); + + char* MagickGetImageFormat(MagickWand* wand); From fb6d5073c5867f6360c1294f64985c923f2fb9f4 Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Mon, 29 Feb 2016 15:35:59 +0100 Subject: [PATCH 19/26] charcoal --- magick/init.lua | 14 ++++++++++++++ magick/wand/lib.lua | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/magick/init.lua b/magick/init.lua index d62453d..fa36269 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -334,6 +334,9 @@ do lib.PixelSetColor(pixel, color) return handle_result(self, lib.MagickBorderImage(self.wand, pixel, width, height)) end, + charcoal = function(self, radius, sigma) + return handle_result(self, lib.MagickCharcoalImage(self.wand, radius, sigma)) + end, rotate = function(self, degrees, r, g, b) if r == nil then r = 0 @@ -776,6 +779,16 @@ border = function(img, color, width, height, output) return ret end +local charcoal +charcoal = function(img, radius, sigma, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:charcoal(radius, sigma) + local ret + ret = img:write(output) + return ret +end local copy_image copy_image = function(img, output) @@ -816,6 +829,7 @@ return { swirl = swirl, border = border, polaroid_image = polaroid_image, + charcoal = charcoal, Image = Image, parse_size_str = parse_size_str, VERSION = VERSION diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua index 31b569e..3f75907 100755 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -62,7 +62,7 @@ ffi.cdef([[ MagickBooleanType MagickSwirlImage(MagickWand *wand,const double degrees); MagickBooleanType MagickPolaroidImage(MagickWand *wand, const DrawingWand *drawing_wand,const double angle); MagickBooleanType MagickBorderImage(MagickWand *wand, const PixelWand *bordercolor,const size_t width, const size_t height); - + MagickBooleanType MagickCharcoalImage(MagickWand *wand, const double radius,const double sigma); char* MagickGetImageFormat(MagickWand* wand); From 4c32d17cabe9e954048770f50ed27cd0cfb957d1 Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Mon, 29 Feb 2016 15:53:51 +0100 Subject: [PATCH 20/26] Colorize --- magick/init.lua | 19 +++++++++++++++++++ magick/wand/lib.lua | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/magick/init.lua b/magick/init.lua index fa36269..c0a9cb9 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -337,6 +337,13 @@ do charcoal = function(self, radius, sigma) return handle_result(self, lib.MagickCharcoalImage(self.wand, radius, sigma)) end, + colorize = function(self, color, opacity) + local pixel = ffi.gc(lib.NewPixelWand(), lib.DestroyPixelWand) + lib.PixelSetColor(pixel, color) + local pixel_opacity = ffi.gc(lib.NewPixelWand(), lib.DestroyPixelWand) + lib.PixelSetColor(pixel_opacity, opacity) + return handle_result(self, lib.MagickColorizeImage(self.wand, pixel, pixel_opacity)) + end, rotate = function(self, degrees, r, g, b) if r == nil then r = 0 @@ -790,6 +797,17 @@ charcoal = function(img, radius, sigma, output) return ret end +local colorize +colorize = function(img, color, opacity, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:colorize(color, opacity) + local ret + ret = img:write(output) + return ret +end + local copy_image copy_image = function(img, output) if type(img) == "string" then @@ -830,6 +848,7 @@ return { border = border, polaroid_image = polaroid_image, charcoal = charcoal, + colorize = colorize, Image = Image, parse_size_str = parse_size_str, VERSION = VERSION diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua index 3f75907..7755901 100755 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -63,7 +63,7 @@ ffi.cdef([[ MagickBooleanType MagickPolaroidImage(MagickWand *wand, const DrawingWand *drawing_wand,const double angle); MagickBooleanType MagickBorderImage(MagickWand *wand, const PixelWand *bordercolor,const size_t width, const size_t height); MagickBooleanType MagickCharcoalImage(MagickWand *wand, const double radius,const double sigma); - + MagickBooleanType MagickColorizeImage(MagickWand *wand, const PixelWand *colorize,const PixelWand *opacity); char* MagickGetImageFormat(MagickWand* wand); From 6551b967aa96c57410ce5a795ff7e71b31b97048 Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Tue, 1 Mar 2016 09:31:27 +0100 Subject: [PATCH 21/26] Threshold, add Noise --- magick/init.lua | 39 +++++++++++++++++++++++++++++++++++++++ magick/wand/lib.lua | 3 +++ 2 files changed, 42 insertions(+) diff --git a/magick/init.lua b/magick/init.lua index c0a9cb9..5272bb1 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -128,6 +128,15 @@ local gravity_str = { "StaticGravity" } +local noise_type = { + ["UniformNoise"] = 0, + ["GaussianNoise"] = 1, + ["MultiplicativeGaussianNoise"] = 2, + ["ImpulseNoise"] = 3, + ["LaplacianNoise"] = 4, + ["PoissonNoise"] = 5 +} + local boolean_type = { ["MagickFalse"] = 0, ["MagickTrue"] = 1 @@ -344,6 +353,12 @@ do lib.PixelSetColor(pixel_opacity, opacity) return handle_result(self, lib.MagickColorizeImage(self.wand, pixel, pixel_opacity)) end, + threshold = function(self, width, height, offset) + return handle_result(self, lib.MagickAdaptiveThresholdImage(self.wand, width, height, offset)) + end, + noise = function(self, type) + return handle_result(self, lib.MagickAddNoiseImage(self.wand, noise_type[type])) + end, rotate = function(self, degrees, r, g, b) if r == nil then r = 0 @@ -808,6 +823,28 @@ colorize = function(img, color, opacity, output) return ret end +local threshold +threshold = function(img, width, height, offset, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:threshold(width, height, offset) + local ret + ret = img:write(output) + return ret +end + +local noise +noise = function(img, ntype, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:noise(ntype) + local ret + ret = img:write(output) + return ret +end + local copy_image copy_image = function(img, output) if type(img) == "string" then @@ -849,6 +886,8 @@ return { polaroid_image = polaroid_image, charcoal = charcoal, colorize = colorize, + threshold = threshold, + noise = noise, Image = Image, parse_size_str = parse_size_str, VERSION = VERSION diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua index 7755901..7027067 100755 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -11,6 +11,7 @@ ffi.cdef([[ typedef int GravityType; typedef int ColorspaceType; typedef int AlphaChannelOption; + typedef int NoiseType; void MagickWandGenesis(); MagickWand* NewMagickWand(); @@ -64,6 +65,8 @@ ffi.cdef([[ MagickBooleanType MagickBorderImage(MagickWand *wand, const PixelWand *bordercolor,const size_t width, const size_t height); MagickBooleanType MagickCharcoalImage(MagickWand *wand, const double radius,const double sigma); MagickBooleanType MagickColorizeImage(MagickWand *wand, const PixelWand *colorize,const PixelWand *opacity); + MagickBooleanType MagickAdaptiveThresholdImage(MagickWand *wand, const size_t width,const size_t height,const ssize_t offset); + MagickBooleanType MagickAddNoiseImage(MagickWand *wand, const NoiseType noise_type); char* MagickGetImageFormat(MagickWand* wand); From c84dc5480e28345dd636f22158651690e6fd6e8f Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Tue, 1 Mar 2016 09:39:07 +0100 Subject: [PATCH 22/26] Auto Gamma --- magick/init.lua | 21 ++++++++++++++++++--- magick/wand/lib.lua | 1 + 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/magick/init.lua b/magick/init.lua index 5272bb1..416671c 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -359,6 +359,9 @@ do noise = function(self, type) return handle_result(self, lib.MagickAddNoiseImage(self.wand, noise_type[type])) end, + auto_gamma = function(self, type) + return handle_result(self, lib.MagickAutoGammaImage(self.wand)) + end, rotate = function(self, degrees, r, g, b) if r == nil then r = 0 @@ -834,12 +837,23 @@ threshold = function(img, width, height, offset, output) return ret end -local noise -noise = function(img, ntype, output) +local threshold +threshold = function(img, width, height, offset, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:threshold(width, height, offset) + local ret + ret = img:write(output) + return ret +end + +local auto_gamma +auto_gamma = function(img, output) if type(img) == "string" then img = assert(load_image(img)) end - img:noise(ntype) + img:auto_gamma() local ret ret = img:write(output) return ret @@ -888,6 +902,7 @@ return { colorize = colorize, threshold = threshold, noise = noise, + auto_gamma = auto_gamma, Image = Image, parse_size_str = parse_size_str, VERSION = VERSION diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua index 7027067..d022643 100755 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -67,6 +67,7 @@ ffi.cdef([[ MagickBooleanType MagickColorizeImage(MagickWand *wand, const PixelWand *colorize,const PixelWand *opacity); MagickBooleanType MagickAdaptiveThresholdImage(MagickWand *wand, const size_t width,const size_t height,const ssize_t offset); MagickBooleanType MagickAddNoiseImage(MagickWand *wand, const NoiseType noise_type); + MagickBooleanType MagickAutoGammaImage(MagickWand *wand); char* MagickGetImageFormat(MagickWand* wand); From e56dc00e4722f678dd899c273d7cabdc8143714a Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Tue, 1 Mar 2016 12:48:49 +0100 Subject: [PATCH 23/26] auto_level, blue_shift, cycle_colormap, edge, evaluate, auto_gamma --- magick/init.lua | 113 +++++++++++++++++++++++++++++++++++++++++++- magick/wand/lib.lua | 8 ++++ 2 files changed, 120 insertions(+), 1 deletion(-) diff --git a/magick/init.lua b/magick/init.lua index 416671c..352671e 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -137,6 +137,42 @@ local noise_type = { ["PoissonNoise"] = 5 } +local evaluate_operator = { + ["UndefinedEvaluateOperator"] = 0, + ["AddEvaluateOperator"] = 1, + ["AndEvaluateOperator"] = 2, + ["DivideEvaluateOperator"] = 3, + ["LeftShiftEvaluateOperator"] = 4, + ["MaxEvaluateOperator"] = 5, + ["MinEvaluateOperator"] = 6, + ["MultiplyEvaluateOperator"] = 7, + ["OrEvaluateOperator"] = 8, + ["RightShiftEvaluateOperator"] = 9, + ["SetEvaluateOperator"] = 10, + ["SubtractEvaluateOperator"] = 11, + ["XorEvaluateOperator"] = 12, + ["PowEvaluateOperator"] = 13, + ["LogEvaluateOperator"] = 14, + ["ThresholdEvaluateOperator"] = 15, + ["ThresholdBlackEvaluateOperator"] = 16, + ["ThresholdWhiteEvaluateOperator"] = 17, + ["GaussianNoiseEvaluateOperator"] = 18, + ["ImpulseNoiseEvaluateOperator"] = 19, + ["LaplacianNoiseEvaluateOperator"] = 20, + ["MultiplicativeNoiseEvaluateOperator"] = 21, + ["PoissonNoiseEvaluateOperator"] = 22, + ["UniformNoiseEvaluateOperator"] = 23, + ["CosineEvaluateOperator"] = 24, + ["SineEvaluateOperator"] = 25, + ["AddModulusEvaluateOperator"] = 26, + ["MeanEvaluateOperator"] = 27, + ["AbsEvaluateOperator"] = 28, + ["ExponentialEvaluateOperator"] = 29, + ["MedianEvaluateOperator"] = 30, + ["SumEvaluateOperator"] = 31, + ["RootMeanSquareEvaluateOperator"] = 32 +} + local boolean_type = { ["MagickFalse"] = 0, ["MagickTrue"] = 1 @@ -359,9 +395,24 @@ do noise = function(self, type) return handle_result(self, lib.MagickAddNoiseImage(self.wand, noise_type[type])) end, - auto_gamma = function(self, type) + auto_gamma = function(self) return handle_result(self, lib.MagickAutoGammaImage(self.wand)) end, + auto_level = function(self) + return handle_result(self, lib.MagickAutoLevelImage(self.wand)) + end, + blue_shift = function(self, factor) + return handle_result(self, lib.MagickBlueShiftImage(self.wand, factor)) + end, + cycle_colormap = function(self, displace) + return handle_result(self, lib.MagickCycleColormapImage(self.wand, displace)) + end, + edge = function(self, radius) + return handle_result(self, lib.MagickEdgeImage(self.wand, radius)) + end, + evaluate = function(self, op, value) + return handle_result(self, lib.MagickEvaluateImage(self.wand, evaluate_operator[op], value)) + end, rotate = function(self, degrees, r, g, b) if r == nil then r = 0 @@ -859,6 +910,61 @@ auto_gamma = function(img, output) return ret end +local auto_level +auto_level = function(img, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:auto_level() + local ret + ret = img:write(output) + return ret +end + +local blue_shift +blue_shift = function(img, factor, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:blue_shift(factor) + local ret + ret = img:write(output) + return ret +end + +local edge +edge = function(img, radius, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:edge(radius) + local ret + ret = img:write(output) + return ret +end + +local cycle_colormap +cycle_colormap = function(img, displace, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:cycle_colormap(displace) + local ret + ret = img:write(output) + return ret +end + +local evaluate +evaluate = function(img, op, value, output) + if type(img) == "string" then + img = assert(load_image(img)) + end + img:evaluate(op, value) + local ret + ret = img:write(output) + return ret +end + local copy_image copy_image = function(img, output) if type(img) == "string" then @@ -903,6 +1009,11 @@ return { threshold = threshold, noise = noise, auto_gamma = auto_gamma, + auto_level = auto_level, + blue_shift = blue_shift, + cycle_colormap = cycle_colormap, + edge = edge, + evaluate = evaluate, Image = Image, parse_size_str = parse_size_str, VERSION = VERSION diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua index d022643..49b7c8f 100755 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -12,6 +12,7 @@ ffi.cdef([[ typedef int ColorspaceType; typedef int AlphaChannelOption; typedef int NoiseType; + typedef int MagickEvaluateOperator; void MagickWandGenesis(); MagickWand* NewMagickWand(); @@ -68,6 +69,13 @@ ffi.cdef([[ MagickBooleanType MagickAdaptiveThresholdImage(MagickWand *wand, const size_t width,const size_t height,const ssize_t offset); MagickBooleanType MagickAddNoiseImage(MagickWand *wand, const NoiseType noise_type); MagickBooleanType MagickAutoGammaImage(MagickWand *wand); + MagickBooleanType MagickAutoLevelImage(MagickWand *wand); + MagickBooleanType MagickBlueShiftImage(MagickWand *wand, const double factor); + MagickBooleanType MagickCommentImage(MagickWand *wand, const char *comment); + MagickBooleanType MagickCycleColormapImage(MagickWand *wand, const ssize_t displace); + MagickBooleanType MagickEdgeImage(MagickWand *wand,const double radius); + MagickBooleanType MagickEvaluateImage(MagickWand *wand, const MagickEvaluateOperator operator,const double value); + char* MagickGetImageFormat(MagickWand* wand); From 2d4ffe6c77371ea6df665b14ed313d32fe82539c Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Tue, 1 Mar 2016 14:13:08 +0100 Subject: [PATCH 24/26] Moonscript --- magick/init.lua | 478 ++++++++++++++++------------------------------- magick/init.moon | 475 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 626 insertions(+), 327 deletions(-) diff --git a/magick/init.lua b/magick/init.lua index 352671e..70cbc7b 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -75,7 +75,19 @@ local composite_op = { ["DarkenIntensityCompositeOp"] = 66, ["LightenIntensityCompositeOp"] = 67 } - +local gravity_str = { + "ForgetGravity", + "NorthWestGravity", + "NorthGravity", + "NorthEastGravity", + "WestGravity", + "CenterGravity", + "EastGravity", + "SouthWestGravity", + "SouthGravity", + "SouthEastGravity", + "StaticGravity" +} local colorspace = { ["UndefinedColorspace"] = 0, ["RGBColorspace"] = 1, @@ -113,21 +125,6 @@ local colorspace = { ["YDbDrColorspace"] = 33, ["xyYColorspace"] = 34 } - -local gravity_str = { - "ForgetGravity", - "NorthWestGravity", - "NorthGravity", - "NorthEastGravity", - "WestGravity", - "CenterGravity", - "EastGravity", - "SouthWestGravity", - "SouthGravity", - "SouthEastGravity", - "StaticGravity" -} - local noise_type = { ["UniformNoise"] = 0, ["GaussianNoise"] = 1, @@ -136,48 +133,47 @@ local noise_type = { ["LaplacianNoise"] = 4, ["PoissonNoise"] = 5 } - -local evaluate_operator = { - ["UndefinedEvaluateOperator"] = 0, - ["AddEvaluateOperator"] = 1, - ["AndEvaluateOperator"] = 2, - ["DivideEvaluateOperator"] = 3, - ["LeftShiftEvaluateOperator"] = 4, - ["MaxEvaluateOperator"] = 5, - ["MinEvaluateOperator"] = 6, - ["MultiplyEvaluateOperator"] = 7, - ["OrEvaluateOperator"] = 8, - ["RightShiftEvaluateOperator"] = 9, - ["SetEvaluateOperator"] = 10, - ["SubtractEvaluateOperator"] = 11, - ["XorEvaluateOperator"] = 12, - ["PowEvaluateOperator"] = 13, - ["LogEvaluateOperator"] = 14, - ["ThresholdEvaluateOperator"] = 15, - ["ThresholdBlackEvaluateOperator"] = 16, - ["ThresholdWhiteEvaluateOperator"] = 17, - ["GaussianNoiseEvaluateOperator"] = 18, - ["ImpulseNoiseEvaluateOperator"] = 19, - ["LaplacianNoiseEvaluateOperator"] = 20, - ["MultiplicativeNoiseEvaluateOperator"] = 21, - ["PoissonNoiseEvaluateOperator"] = 22, - ["UniformNoiseEvaluateOperator"] = 23, - ["CosineEvaluateOperator"] = 24, - ["SineEvaluateOperator"] = 25, - ["AddModulusEvaluateOperator"] = 26, - ["MeanEvaluateOperator"] = 27, - ["AbsEvaluateOperator"] = 28, - ["ExponentialEvaluateOperator"] = 29, - ["MedianEvaluateOperator"] = 30, - ["SumEvaluateOperator"] = 31, - ["RootMeanSquareEvaluateOperator"] = 32 +local _ = { + evaluate_operator = { + ["UndefinedEvaluateOperator"] = 0, + ["AddEvaluateOperator"] = 1, + ["AndEvaluateOperator"] = 2, + ["DivideEvaluateOperator"] = 3, + ["LeftShiftEvaluateOperator"] = 4, + ["MaxEvaluateOperator"] = 5, + ["MinEvaluateOperator"] = 6, + ["MultiplyEvaluateOperator"] = 7, + ["OrEvaluateOperator"] = 8, + ["RightShiftEvaluateOperator"] = 9, + ["SetEvaluateOperator"] = 10, + ["SubtractEvaluateOperator"] = 11, + ["XorEvaluateOperator"] = 12, + ["PowEvaluateOperator"] = 13, + ["LogEvaluateOperator"] = 14, + ["ThresholdEvaluateOperator"] = 15, + ["ThresholdBlackEvaluateOperator"] = 16, + ["ThresholdWhiteEvaluateOperator"] = 17, + ["GaussianNoiseEvaluateOperator"] = 18, + ["ImpulseNoiseEvaluateOperator"] = 19, + ["LaplacianNoiseEvaluateOperator"] = 20, + ["MultiplicativeNoiseEvaluateOperator"] = 21, + ["PoissonNoiseEvaluateOperator"] = 22, + ["UniformNoiseEvaluateOperator"] = 23, + ["CosineEvaluateOperator"] = 24, + ["SineEvaluateOperator"] = 25, + ["AddModulusEvaluateOperator"] = 26, + ["MeanEvaluateOperator"] = 27, + ["AbsEvaluateOperator"] = 28, + ["ExponentialEvaluateOperator"] = 29, + ["MedianEvaluateOperator"] = 30, + ["SumEvaluateOperator"] = 31, + ["RootMeanSquareEvaluateOperator"] = 32 + } } - local boolean_type = { ["MagickFalse"] = 0, ["MagickTrue"] = 1 } - local gravity_type = { } for i, t in ipairs(gravity_str) do gravity_type[t] = i @@ -321,7 +317,7 @@ do end, sepia = function(self, threshold) threshold = 65535 * threshold - handle_result(self, lib.MagickSetImageAlphaChannel(self.wand, 3)) + lib.MagickSetImageAlphaChannel(self.wand, 3) return handle_result(self, lib.MagickSepiaToneImage(self.wand, threshold)) end, brightness_contrast = function(self, brightness, contrast) @@ -371,7 +367,7 @@ do return handle_result(self, lib.MagickSwirlImage(self.wand, degrees)) end, polaroid_image = function(self) - local drawing_wand = lib.NewDrawingWand() + local drawing_wand = ffi.gc(lib.NewPixelWand(), lib.DestroyPixelWand) return handle_result(self, lib.MagickPolaroidImage(self.wand, drawing_wand, 0.0)) end, border = function(self, color, width, height) @@ -392,8 +388,8 @@ do threshold = function(self, width, height, offset) return handle_result(self, lib.MagickAdaptiveThresholdImage(self.wand, width, height, offset)) end, - noise = function(self, type) - return handle_result(self, lib.MagickAddNoiseImage(self.wand, noise_type[type])) + noise = function(self, ntype) + return handle_result(self, lib.MagickAddNoiseImage(self.wand, noise_type[ntype])) end, auto_gamma = function(self) return handle_result(self, lib.MagickAutoGammaImage(self.wand)) @@ -583,36 +579,56 @@ parse_size_str = function(str, src_w, src_h) center_crop = center_crop } end - +local save_or_get_image +save_or_get_image = function(img, output) + local ret + if output then + ret = img:write(output) + else + ret = img:get_blob() + end + return ret +end +local load_image_from_path +load_image_from_path = function(img_path) + local img = nil + if type(img_path) == "string" then + img = assert(load_image(img_path)) + end + if not (img) then + error("invalid image path") + end + return img +end local get_dimensions_from_string get_dimensions_from_string = function(size_str, src_w, src_h) local str_w, str_h, rest = size_str:match("^(%d*%%?)x(%d*%%?)(.*)$") - local p = str_w:match("(%d+)%%") - if p then - w = tonumber(p) / 100 * src_w - else - w = tonumber(str_w) or 0 + do + local p = str_w:match("(%d+)%%") + if p then + local w = tonumber(p) / 100 * src_w + else + local w = tonumber(str_w) or 0 + end end - local p = str_h:match("(%d+)%%") - if p then - h = tonumber(p) / 100 * src_h - else - h = tonumber(str_h) or 0 + do + local p = str_h:match("(%d+)%%") + if p then + local h = tonumber(p) / 100 * src_h + else + local h = tonumber(str_h) or 0 + end end - return { w = w, h = h } end - local thumb thumb = function(img, size_str, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) local src_w, src_h = img:get_width(), img:get_height() - dimensions = get_dimensions_from_string(size_str, src_w, src_h) + local dimensions = get_dimensions_from_string(size_str, src_w, src_h) if dimensions.w > src_w or dimensions.h > src_h then if output then return img:write(output) @@ -627,369 +643,198 @@ thumb = function(img, size_str, output) else img:resize(opts.w, opts.h) end - if output then - ret = img:write(output) - else - ret = img:get_blob() - end - return ret + return save_or_get_image(img, output) +end +local copy_image +copy_image = function(img, output) + img = load_image_from_path(img) + return save_or_get_image(img, output) end - local color_space color_space = function(img, space, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:color_space(space) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local sepia sepia = function(img, threshold, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:sepia(threshold) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local brightness_contrast brightness_contrast = function(img, brightness, contrast, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:brightness_contrast(brightness, contrast) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local sharpen sharpen = function(img, sigma, radius, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:sharpen(sigma, radius) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local blur blur = function(img, sigma, radius, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:blur(sigma, radius) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local rotate rotate = function(img, degrees, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:rotate(degrees) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local sketch sketch = function(img, sigma, radius, angle, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:sketch(sigma, radius, angle) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local vignette vignette = function(img, vignette_black_point, vignette_white_point, vignette_x, vignette_y, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:vignette(vignette_black_point, vignette_white_point, vignette_x, vignette_y) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local flip flip = function(img, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:flip() - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local flop flop = function(img, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:flop() - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local oil_paint oil_paint = function(img, radius, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:oil_paint(radius) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local brightness_saturation_hue brightness_saturation_hue = function(img, brightness, saturation, hue, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:brightness_saturation_hue(brightness, saturation, hue) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local negate negate = function(img, isgray, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:negate(isgray) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local emboss emboss = function(img, radius, sigma, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:emboss(radius, sigma) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local tint tint = function(img, color, opacity, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:tint(color, opacity) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local wave wave = function(img, amplitude, wave_length, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:wave(amplitude, wave_length) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local enhance enhance = function(img, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:enhance() - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local swirl swirl = function(img, degrees, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:swirl(degrees) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local polaroid_image polaroid_image = function(img, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:polaroid_image() - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local border border = function(img, color, width, height, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:border(color, width, height) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local charcoal charcoal = function(img, radius, sigma, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:charcoal(radius, sigma) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local colorize colorize = function(img, color, opacity, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:colorize(color, opacity) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local threshold threshold = function(img, width, height, offset, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:threshold(width, height, offset) - local ret - ret = img:write(output) - return ret -end - -local threshold -threshold = function(img, width, height, offset, output) - if type(img) == "string" then - img = assert(load_image(img)) - end - img:threshold(width, height, offset) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local auto_gamma auto_gamma = function(img, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:auto_gamma() - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local auto_level auto_level = function(img, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:auto_level() - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local blue_shift blue_shift = function(img, factor, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:blue_shift(factor) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local edge edge = function(img, radius, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:edge(radius) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local cycle_colormap cycle_colormap = function(img, displace, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:cycle_colormap(displace) - local ret - ret = img:write(output) - return ret + return save_or_get_image(img, output) end - local evaluate evaluate = function(img, op, value, output) - if type(img) == "string" then - img = assert(load_image(img)) - end + img = load_image_from_path(img) img:evaluate(op, value) - local ret - ret = img:write(output) - return ret -end - -local copy_image -copy_image = function(img, output) - if type(img) == "string" then - img = assert(load_image(img)) - end - local ret - if output then - ret = img:write(output) - else - ret = img:get_blob() - end - return ret + return save_or_get_image(img, output) end - return { load_image = load_image, load_image_from_blob = load_image_from_blob, - thumb = thumb, copy_image = copy_image, + thumb = thumb, color_space = color_space, - brightness_contrast = brightness_contrast, sepia = sepia, - rotate = rotate, - blur = blur, + brightness_contrast = brightness_contrast, sharpen = sharpen, + blur = blur, + rotate = rotate, sketch = sketch, vignette = vignette, flip = flip, @@ -998,21 +843,20 @@ return { brightness_saturation_hue = brightness_saturation_hue, negate = negate, emboss = emboss, - enhance = enhance, tint = tint, wave = wave, + enhance = enhance, swirl = swirl, - border = border, polaroid_image = polaroid_image, + border = border, charcoal = charcoal, colorize = colorize, threshold = threshold, - noise = noise, auto_gamma = auto_gamma, auto_level = auto_level, blue_shift = blue_shift, - cycle_colormap = cycle_colormap, edge = edge, + cycle_colormap = cycle_colormap, evaluate = evaluate, Image = Image, parse_size_str = parse_size_str, diff --git a/magick/init.moon b/magick/init.moon index 6ab63e0..c58989f 100644 --- a/magick/init.moon +++ b/magick/init.moon @@ -89,6 +89,94 @@ gravity_str = { "StaticGravity" } +colorspace = { + ["UndefinedColorspace"]: 0, + ["RGBColorspace"]: 1, + ["GRAYColorspace"]: 2, + ["TransparentColorspace"]: 3, + ["OHTAColorspace"]: 4, + ["LabColorspace"]: 5, + ["XYZColorspace"]: 6, + ["YCbCrColorspace"]: 7, + ["YCCColorspace"]: 8, + ["YIQColorspace"]: 9, + ["YPbPrColorspace"]: 10, + ["YUVColorspace"]: 11, + ["CMYKColorspace"]: 12, + ["sRGBColorspace"]: 13, + ["HSBColorspace"]: 14, + ["HSLColorspace"]: 15, + ["HWBColorspace"]: 16, + ["Rec601LumaColorspace"]: 17, + ["Rec601YCbCrColorspace"]: 18, + ["Rec709LumaColorspace"]:19, + ["Rec709YCbCrColorspace"]:20, + ["LogColorspace"]: 21, + ["CMYColorspace"]: 22, + ["LuvColorspace"]: 23, + ["HCLColorspace"]: 24, + ["LCHColorspace"]: 25, + ["LMSColorspace"]: 26, + ["LCHabColorspace"]: 27, + ["LCHuvColorspace"]: 28, + ["scRGBColorspace"]: 29, + ["HSIColorspace"]: 30, + ["HSVColorspace"]: 31, + ["HCLpColorspace"]:32, + ["YDbDrColorspace"]: 33, + ["xyYColorspace"]: 34 +} + +noise_type = { + ["UniformNoise"]: 0, + ["GaussianNoise"]: 1, + ["MultiplicativeGaussianNoise"]: 2, + ["ImpulseNoise"]: 3, + ["LaplacianNoise"]: 4, + ["PoissonNoise"]: 5 +} + +evaluate_operator: { + ["UndefinedEvaluateOperator"]: 0, + ["AddEvaluateOperator"]: 1, + ["AndEvaluateOperator"]: 2, + ["DivideEvaluateOperator"]: 3, + ["LeftShiftEvaluateOperator"]: 4, + ["MaxEvaluateOperator"]: 5, + ["MinEvaluateOperator"]: 6, + ["MultiplyEvaluateOperator"]: 7, + ["OrEvaluateOperator"]: 8, + ["RightShiftEvaluateOperator"]: 9, + ["SetEvaluateOperator"]: 10, + ["SubtractEvaluateOperator"]: 11, + ["XorEvaluateOperator"]: 12, + ["PowEvaluateOperator"]: 13, + ["LogEvaluateOperator"]: 14, + ["ThresholdEvaluateOperator"]: 15, + ["ThresholdBlackEvaluateOperator"]: 16, + ["ThresholdWhiteEvaluateOperator"]: 17, + ["GaussianNoiseEvaluateOperator"]: 18, + ["ImpulseNoiseEvaluateOperator"]: 19, + ["LaplacianNoiseEvaluateOperator"]: 20, + ["MultiplicativeNoiseEvaluateOperator"]: 21, + ["PoissonNoiseEvaluateOperator"]: 22, + ["UniformNoiseEvaluateOperator"]: 23, + ["CosineEvaluateOperator"]: 24, + ["SineEvaluateOperator"]: 25, + ["AddModulusEvaluateOperator"]: 26, + ["MeanEvaluateOperator"]: 27, + ["AbsEvaluateOperator"]: 28, + ["ExponentialEvaluateOperator"]: 29, + ["MedianEvaluateOperator"]: 30, + ["SumEvaluateOperator"]: 31, + ["RootMeanSquareEvaluateOperator"]: 32 +} + +boolean_type = { + ["MagickFalse"]: 0, + ["MagickTrue"]: 1 +} + gravity_type = {} for i, t in ipairs gravity_str @@ -196,7 +284,131 @@ class Image sharpen: (sigma, radius=0) => handle_result @, lib.MagickSharpenImage @wand, radius, sigma +-- + color_space: (space) => + handle_result @, + lib.MagickTransformImageColorspace @wand, colorspace[space] + + sepia: (threshold) => + threshold = 65535 * threshold + lib.MagickSetImageAlphaChannel @wand, 3 + handle_result @, + lib.MagickSepiaToneImage @wand, threshold + + brightness_contrast: (brightness, contrast) => + handle_result @, + lib.MagickBrightnessContrastImage @wand, brightness, contrast + + brightness_saturation_hue: (brightness, saturation, hue) => + handle_result @, + lib.MagickModulateImage @wand, brightness, saturation, hue + + sketch: (radius, sigma, angle) => + handle_result @, + lib.MagickSketchImage @wand, radius, sigma, angle + + flip: => + handle_result @, + lib.MagickFlipImage @wand + flop: => + handle_result @, + lib.MagickFlopImage @wand + + oil_paint: (radius) => + handle_result @, + lib.MagickOilPaintImage @wand, radius + + negate: (isgray) => + handle_result @, + lib.MagickNegateImage @wand, boolean_type[isgray] + + emboss: (radius, sigma) => + handle_result @, + lib.MagickEmbossImage @wand, radius, sigma + + enhance: => + handle_result @, + lib.MagickEnhanceImage @wand + + tint:(color, opacity) => + pixel_color = ffi.gc lib.NewPixelWand!, lib.DestroyPixelWand + lib.PixelSetColor pixel_color, color + pixel_opacity = ffi.gc lib.NewPixelWand!, lib.DestroyPixelWand + lib.PixelSetColor pixel_opacity, opacity + handle_result @, + lib.MagickTintImage @wand, pixel_color, pixel_opacity + + vignette: (vignette_black_point, vignette_white_point, vignette_x, vignette_y) => + pixel = ffi.gc lib.NewPixelWand!, lib.DestroyPixelWand + lib.PixelSetColor pixel, 'transparent' + lib.MagickSetImageBackgroundColor self.wand, pixel + handle_result @, + lib.MagickVignetteImage @wand, vignette_black_point, vignette_white_point, vignette_x, vignette_y + + wave: (amplitude, wave_length) => + handle_result @, + lib.MagickWaveImage @wand, amplitude, wave_length + + swirl: (degrees) => + handle_result @, + lib.MagickSwirlImage @wand, degrees + + polaroid_image: => + drawing_wand = ffi.gc lib.NewPixelWand!, lib.DestroyPixelWand + handle_result @, + lib.MagickPolaroidImage @wand, drawing_wand, 0.0 + + border: (color, width, height) => + pixel = ffi.gc lib.NewPixelWand!, lib.DestroyPixelWand + lib.PixelSetColor pixel, color + handle_result @, + lib.MagickBorderImage @wand, pixel, width, height + + charcoal: (radius, sigma) => + handle_result @, + lib.MagickCharcoalImage @wand, radius, sigma + + colorize: (color, opacity) => + pixel = ffi.gc lib.NewPixelWand!, lib.DestroyPixelWand + lib.PixelSetColor pixel, color + pixel_opacity = ffi.gc lib.NewPixelWand!, lib.DestroyPixelWand + lib.PixelSetColor pixel_opacity, opacity + handle_result@, + lib.MagickColorizeImage @wand, pixel, pixel_opacity + + threshold: (width, height, offset) => + handle_result @, + lib.MagickAdaptiveThresholdImage @wand, width, height, offset + + noise: (ntype) => + handle_result @, + lib.MagickAddNoiseImage @wand, noise_type[ntype] + + auto_gamma: => + handle_result @, + lib.MagickAutoGammaImage @wand + + auto_level: => + handle_result @, + lib.MagickAutoLevelImage @wand + + blue_shift: (factor) => + handle_result @, + lib.MagickBlueShiftImage @wand, factor + + cycle_colormap: (displace) => + handle_result @, + lib.MagickCycleColormapImage @wand, displace + + edge: (radius) => + handle_result @, + lib.MagickEdgeImage @wand, radius + + evaluate: (op, value) => + handle_result @, + lib.MagickEvaluateImage @wand, evaluate_operator[op], value +-- rotate: (degrees, r=0, g=0, b=0) => pixel = ffi.gc lib.NewPixelWand!, lib.DestroyPixelWand @@ -328,13 +540,46 @@ parse_size_str = (str, src_w, src_h) -> :center_crop } -thumb = (img, size_str, output) -> - if type(img) == "string" - img = assert load_image img +save_or_get_image = (img, output) -> + ret = if output + img\write output + else + img\get_blob! + + ret +load_image_from_path = (img_path) -> + img = nil + if type(img_path) == "string" + img = assert load_image img_path + error "invalid image path" unless img + + img + +get_dimensions_from_string = (size_str, src_w, src_h) -> + str_w, str_h, rest = size_str\match "^(%d*%%?)x(%d*%%?)(.*)$" + if p = str_w\match "(%d+)%%" + w = tonumber(p) / 100 * src_w + else + w = tonumber(str_w) or 0 + + if p = str_h\match "(%d+)%%" + h = tonumber(p) / 100 * src_h + else + h = tonumber(str_h) or 0 + + {:w, :h} + +thumb = (img, size_str, output) -> + img = load_image_from_path(img) src_w, src_h = img\get_width!, img\get_height! - opts = parse_size_str size_str, src_w, src_h + dimensions = get_dimensions_from_string size_str, src_w, src_h + if dimensions.w > src_w or dimensions.h > src_h + if output + return img\write output + return img\get_blob! + opts = parse_size_str size_str, src_w, src_h if opts.center_crop img\resize_and_crop opts.w, opts.h elseif opts.crop_x @@ -342,12 +587,222 @@ thumb = (img, size_str, output) -> else img\resize opts.w, opts.h - ret = if output - img\write output - else - img\get_blob! + return save_or_get_image img, output - ret +copy_image = (img, output) -> + img = load_image_from_path(img) + + return save_or_get_image img, output + +color_space = (img, space, output) -> + img = load_image_from_path(img) + img\color_space space + + return save_or_get_image img, output + +sepia = (img, threshold, output) -> + img = load_image_from_path(img) + img\sepia threshold + + return save_or_get_image img, output + +brightness_contrast = (img, brightness, contrast, output) -> + img = load_image_from_path(img) + img\brightness_contrast brightness, contrast + + return save_or_get_image img, output + +sharpen = (img, sigma, radius, output) -> + img = load_image_from_path(img) + img\sharpen sigma, radius + + return save_or_get_image img, output + +blur = (img, sigma, radius, output) -> + img = load_image_from_path(img) + img\blur sigma, radius + + return save_or_get_image img, output + +rotate = (img, degrees, output) -> + img = load_image_from_path(img) + img\rotate degrees + + return save_or_get_image img, output + +sketch = (img, sigma, radius, angle, output) -> + img = load_image_from_path(img) + img\sketch sigma, radius, angle + + return save_or_get_image img, output + +vignette = (img, vignette_black_point, vignette_white_point, vignette_x, vignette_y, output) -> + img = load_image_from_path(img) + img\vignette vignette_black_point, vignette_white_point, vignette_x, vignette_y + + return save_or_get_image img, output + +flip = (img, output) -> + img = load_image_from_path(img) + img\flip! + + return save_or_get_image img, output + +flop = (img, output) -> + img = load_image_from_path(img) + img\flop! + + return save_or_get_image img, output + +oil_paint = (img, radius, output) -> + img = load_image_from_path(img) + img\oil_paint radius + + return save_or_get_image img, output -{ :load_image, :load_image_from_blob, :thumb, :Image, :parse_size_str, :VERSION } +brightness_saturation_hue = (img, brightness, saturation, hue, output) -> + img = load_image_from_path(img) + img\brightness_saturation_hue brightness, saturation, hue + return save_or_get_image img, output + +negate = (img, isgray, output) -> + img = load_image_from_path(img) + img\negate isgray + + return save_or_get_image img, output + +emboss = (img, radius, sigma, output) -> + img = load_image_from_path(img) + img\emboss radius, sigma + + return save_or_get_image img, output + +tint = (img, color, opacity, output) -> + img = load_image_from_path(img) + img\tint color, opacity + + return save_or_get_image img, output + +wave = (img, amplitude, wave_length, output) -> + img = load_image_from_path(img) + img\wave amplitude, wave_length + + return save_or_get_image img, output + +enhance = (img, output) -> + img = load_image_from_path(img) + img\enhance! + + return save_or_get_image img, output + +swirl = (img, degrees, output) -> + img = load_image_from_path(img) + img\swirl degrees + + return save_or_get_image img, output + +polaroid_image = (img, output) -> + img = load_image_from_path(img) + img\polaroid_image! + + return save_or_get_image img, output + +border = (img, color, width, height, output) -> + img = load_image_from_path(img) + img\border color, width, height + + return save_or_get_image img, output + +charcoal = (img, radius, sigma, output) -> + img = load_image_from_path(img) + img\charcoal radius, sigma + + return save_or_get_image img, output + +colorize = (img, color, opacity, output) -> + img = load_image_from_path(img) + img\colorize color, opacity + + return save_or_get_image img, output + +threshold = (img, width, height, offset, output) -> + img = load_image_from_path(img) + img\threshold width, height, offset + + return save_or_get_image img, output + +auto_gamma = (img, output) -> + img = load_image_from_path(img) + img\auto_gamma! + + return save_or_get_image img, output + +auto_level = (img, output) -> + img = load_image_from_path(img) + img\auto_level! + + return save_or_get_image img, output + +blue_shift = (img, factor, output) -> + img = load_image_from_path(img) + img\blue_shift factor + + return save_or_get_image img, output + +edge = (img, radius, output) -> + img = load_image_from_path(img) + img\edge radius + + return save_or_get_image img, output + +cycle_colormap = (img, displace, output) -> + img = load_image_from_path(img) + img\cycle_colormap displace + + return save_or_get_image img, output + +evaluate = (img, op, value, output) -> + img = load_image_from_path(img) + img\evaluate op, value + + return save_or_get_image img, output + +{ + :load_image, + :load_image_from_blob, + :copy_image, + :thumb, + :color_space, + :sepia, + :brightness_contrast, + :sharpen, + :blur, + :rotate, + :sketch, + :vignette, + :flip, + :flop, + :oil_paint, + :brightness_saturation_hue, + :negate, + :emboss, + :tint, + :wave, + :enhance, + :swirl, + :polaroid_image, + :border, + :charcoal, + :colorize, + :threshold, + :auto_gamma, + :auto_level, + :blue_shift, + :edge, + :cycle_colormap, + :evaluate, + :Image, + :parse_size_str, + :VERSION +} From 23b5f8b9a3fd1e6ed2a45a529f9e0036a8cfdb54 Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Tue, 1 Mar 2016 15:48:21 +0100 Subject: [PATCH 25/26] fix --- magick/init.lua | 10 ++++++---- magick/init.moon | 3 +++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/magick/init.lua b/magick/init.lua index 70cbc7b..cc0cc81 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -603,20 +603,22 @@ end local get_dimensions_from_string get_dimensions_from_string = function(size_str, src_w, src_h) local str_w, str_h, rest = size_str:match("^(%d*%%?)x(%d*%%?)(.*)$") + local w = nil + local h = nil do local p = str_w:match("(%d+)%%") if p then - local w = tonumber(p) / 100 * src_w + w = tonumber(p) / 100 * src_w else - local w = tonumber(str_w) or 0 + w = tonumber(str_w) or 0 end end do local p = str_h:match("(%d+)%%") if p then - local h = tonumber(p) / 100 * src_h + h = tonumber(p) / 100 * src_h else - local h = tonumber(str_h) or 0 + h = tonumber(str_h) or 0 end end return { diff --git a/magick/init.moon b/magick/init.moon index c58989f..99aec98 100644 --- a/magick/init.moon +++ b/magick/init.moon @@ -558,6 +558,9 @@ load_image_from_path = (img_path) -> get_dimensions_from_string = (size_str, src_w, src_h) -> str_w, str_h, rest = size_str\match "^(%d*%%?)x(%d*%%?)(.*)$" + w = nil + h = nil + if p = str_w\match "(%d+)%%" w = tonumber(p) / 100 * src_w else From 23ed0240bd0f77f819999300f3edfc08e82bce19 Mon Sep 17 00:00:00 2001 From: Patryk Antkowiak Date: Wed, 22 Jun 2016 14:39:23 +0200 Subject: [PATCH 26/26] Allow oversize when parameter true --- magick/init.lua | 10 +++++++-- magick/init.moon | 4 ++-- magick/wand/lib.lua | 49 ++------------------------------------------- 3 files changed, 12 insertions(+), 51 deletions(-) diff --git a/magick/init.lua b/magick/init.lua index cc0cc81..f0d98d4 100755 --- a/magick/init.lua +++ b/magick/init.lua @@ -627,11 +627,17 @@ get_dimensions_from_string = function(size_str, src_w, src_h) } end local thumb -thumb = function(img, size_str, output) +thumb = function(img, size_str, output, allow_oversize, oversize_limit) + if allow_oversize == nil then + allow_oversize = false + end + if oversize_limit == nil then + oversize_limit = 5000 + end img = load_image_from_path(img) local src_w, src_h = img:get_width(), img:get_height() local dimensions = get_dimensions_from_string(size_str, src_w, src_h) - if dimensions.w > src_w or dimensions.h > src_h then + if (allow_oversize and (dimensions.w > oversize_limit or dimensions.h > oversize_limit)) or (not allow_oversize and (dimensions.w > src_w or dimensions.h > src_h)) then if output then return img:write(output) end diff --git a/magick/init.moon b/magick/init.moon index 99aec98..22d9379 100644 --- a/magick/init.moon +++ b/magick/init.moon @@ -573,11 +573,11 @@ get_dimensions_from_string = (size_str, src_w, src_h) -> {:w, :h} -thumb = (img, size_str, output) -> +thumb = (img, size_str, output, allow_oversize=false, oversize_limit=5000) -> img = load_image_from_path(img) src_w, src_h = img\get_width!, img\get_height! dimensions = get_dimensions_from_string size_str, src_w, src_h - if dimensions.w > src_w or dimensions.h > src_h + if (allow_oversize and (dimensions.w > oversize_limit or dimensions.h > oversize_limit)) or (not allow_oversize and (dimensions.w > src_w or dimensions.h > src_h)) if output return img\write output return img\get_blob! diff --git a/magick/wand/lib.lua b/magick/wand/lib.lua index 49b7c8f..30de4e4 100755 --- a/magick/wand/lib.lua +++ b/magick/wand/lib.lua @@ -1,7 +1,5 @@ local ffi = require("ffi") -ffi.cdef([[ - typedef void MagickWand; - typedef void DrawingWand; +ffi.cdef([[ typedef void MagickWand; typedef void PixelWand; typedef int MagickBooleanType; @@ -9,14 +7,9 @@ ffi.cdef([[ typedef int ssize_t; typedef int CompositeOperator; typedef int GravityType; - typedef int ColorspaceType; - typedef int AlphaChannelOption; - typedef int NoiseType; - typedef int MagickEvaluateOperator; void MagickWandGenesis(); MagickWand* NewMagickWand(); - DrawingWand* NewDrawingWand(); MagickWand* DestroyMagickWand(MagickWand*); MagickBooleanType MagickReadImage(MagickWand*, const char*); MagickBooleanType MagickReadImageBlob(MagickWand*, const void*, const size_t); @@ -40,46 +33,10 @@ ffi.cdef([[ const size_t, const size_t, const ssize_t, const ssize_t); MagickBooleanType MagickBlurImage(MagickWand*, const double, const double); - MagickBooleanType MagickSetImageColorspace(MagickWand* wand, const ColorspaceType colorspace); - MagickBooleanType MagickTransformImageColorspace(MagickWand *wand, const ColorspaceType colorspace); - MagickBooleanType MagickSepiaToneImage(MagickWand* wand, const double threshold); - MagickBooleanType MagickSolarizeImage(MagickWand* wand, const double threshold); - MagickBooleanType MagickSetImageAlpha(MagickWand*, const double); - MagickBooleanType MagickSetImageAlphaChannel(MagickWand*, const AlphaChannelOption); - MagickBooleanType MagickSetImageBackgroundColor(MagickWand *wand, const PixelWand *background); - MagickBooleanType MagickNewImage(MagickWand *wand, const size_t columns,const size_t rows, const PixelWand *background); - MagickBooleanType MagickBrightnessContrastImage(MagickWand *wand, const double brightness,const double contrast); - MagickBooleanType MagickSketchImage(MagickWand *wand, const double radius,const double sigma,const double angle); - MagickBooleanType MagickVignetteImage(MagickWand *wand, const double black_point,const double white_point,const ssize_t x, const ssize_t y); - MagickBooleanType MagickFlipImage(MagickWand *wand); - MagickBooleanType MagickFlopImage(MagickWand *wand); - MagickBooleanType MagickOilPaintImage(MagickWand *wand, const double radius); - MagickBooleanType MagickModulateImage(MagickWand *wand, const double brightness,const double saturation,const double hue); - MagickBooleanType MagickSetImageFormat(MagickWand* wand, const char* format); - MagickBooleanType MagickNegateImage(MagickWand *wand, const MagickBooleanType gray); - MagickBooleanType MagickEmbossImage(MagickWand *wand,const double radius, const double sigma); - MagickBooleanType MagickEnhanceImage(MagickWand *wand); - MagickBooleanType MagickTintImage(MagickWand *wand, const PixelWand *tint, const PixelWand *opacity); - MagickBooleanType MagickWaveImage(MagickWand *wand,const double amplitude, const double wave_length); - MagickBooleanType MagickSwirlImage(MagickWand *wand,const double degrees); - MagickBooleanType MagickPolaroidImage(MagickWand *wand, const DrawingWand *drawing_wand,const double angle); - MagickBooleanType MagickBorderImage(MagickWand *wand, const PixelWand *bordercolor,const size_t width, const size_t height); - MagickBooleanType MagickCharcoalImage(MagickWand *wand, const double radius,const double sigma); - MagickBooleanType MagickColorizeImage(MagickWand *wand, const PixelWand *colorize,const PixelWand *opacity); - MagickBooleanType MagickAdaptiveThresholdImage(MagickWand *wand, const size_t width,const size_t height,const ssize_t offset); - MagickBooleanType MagickAddNoiseImage(MagickWand *wand, const NoiseType noise_type); - MagickBooleanType MagickAutoGammaImage(MagickWand *wand); - MagickBooleanType MagickAutoLevelImage(MagickWand *wand); - MagickBooleanType MagickBlueShiftImage(MagickWand *wand, const double factor); - MagickBooleanType MagickCommentImage(MagickWand *wand, const char *comment); - MagickBooleanType MagickCycleColormapImage(MagickWand *wand, const ssize_t displace); - MagickBooleanType MagickEdgeImage(MagickWand *wand,const double radius); - MagickBooleanType MagickEvaluateImage(MagickWand *wand, const MagickEvaluateOperator operator,const double value); - + MagickBooleanType MagickSetImageFormat(MagickWand* wand, const char* format); char* MagickGetImageFormat(MagickWand* wand); - size_t MagickGetImageCompressionQuality(MagickWand * wand); MagickBooleanType MagickSetImageCompressionQuality(MagickWand *wand, const size_t quality); @@ -119,12 +76,10 @@ ffi.cdef([[ double PixelGetGreen(const PixelWand *); double PixelGetBlue(const PixelWand *); - void PixelSetColor(PixelWand *wand, const char *color); void PixelSetAlpha(PixelWand *wand, const double alpha); void PixelSetRed(PixelWand *wand, const double red); void PixelSetGreen(PixelWand *wand, const double green); void PixelSetBlue(PixelWand *wand, const double blue); - void PixelSetOpacity(PixelWand *wand,const double opacity); ]]) local get_flags get_flags = function()