From b7fe04c82b59c008e7c36cd2bcd03a9413d91839 Mon Sep 17 00:00:00 2001 From: TheEssem Date: Mon, 26 Apr 2021 09:47:03 -0500 Subject: [PATCH] Added reddit, catch any errors in native functions --- Dockerfile.api | 1 + Dockerfile.bot | 1 + assets/images/reddit.png | Bin 0 -> 20135 bytes assets/reddit.ttf | Bin 0 -> 292752 bytes commands/image-editing/reddit.js | 19 ++++ natives/blur.cc | 72 ++++++++------- natives/blurple.cc | 70 ++++++++------- natives/caption.cc | 106 +++++++++++----------- natives/caption2.cc | 102 +++++++++++---------- natives/circle.cc | 68 +++++++------- natives/crop.cc | 84 ++++++++--------- natives/explode.cc | 70 ++++++++------- natives/flag.cc | 86 +++++++++--------- natives/flip.cc | 72 ++++++++------- natives/freeze.cc | 63 +++++++------ natives/gamexplain.cc | 78 ++++++++-------- natives/globe.cc | 111 ++++++++++++----------- natives/homebrew.cc | 40 +++++---- natives/image.cc | 2 + natives/invert.cc | 72 ++++++++------- natives/jpeg.cc | 30 ++++--- natives/leak.cc | 80 +++++++++-------- natives/magik.cc | 72 ++++++++------- natives/meme.cc | 143 +++++++++++++++-------------- natives/mirror.cc | 138 ++++++++++++++-------------- natives/motivate.cc | 150 ++++++++++++++++--------------- natives/reddit.cc | 74 +++++++++++++++ natives/reddit.h | 8 ++ natives/resize.cc | 88 +++++++++--------- natives/retro.cc | 136 ++++++++++++++-------------- natives/reverse.cc | 74 +++++++-------- natives/scott.cc | 90 ++++++++++--------- natives/sonic.cc | 46 +++++----- natives/speed.cc | 118 ++++++++++++------------ natives/spin.cc | 104 ++++++++++----------- natives/swirl.cc | 68 +++++++------- natives/tile.cc | 94 +++++++++---------- natives/trump.cc | 90 ++++++++++--------- natives/wall.cc | 84 ++++++++--------- natives/watermark.cc | 134 ++++++++++++++------------- natives/wdt.cc | 78 ++++++++-------- 41 files changed, 1630 insertions(+), 1386 deletions(-) create mode 100644 assets/images/reddit.png create mode 100644 assets/reddit.ttf create mode 100644 commands/image-editing/reddit.js create mode 100644 natives/reddit.cc create mode 100644 natives/reddit.h diff --git a/Dockerfile.api b/Dockerfile.api index 650f803..5927ef8 100644 --- a/Dockerfile.api +++ b/Dockerfile.api @@ -46,6 +46,7 @@ WORKDIR /home/esmBot/.internal COPY ./assets/caption.otf /usr/share/fonts/caption.otf COPY ./assets/caption2.ttf /usr/share/fonts/caption2.ttf COPY ./assets/hbc.ttf /usr/share/fonts/hbc.ttf +COPY ./assets/reddit.ttf /usr/share/fonts/reddit.ttf RUN fc-cache -fv COPY --chown=node:node ./package.json package.json diff --git a/Dockerfile.bot b/Dockerfile.bot index b36bb98..3818dff 100644 --- a/Dockerfile.bot +++ b/Dockerfile.bot @@ -46,6 +46,7 @@ WORKDIR /home/esmBot/.internal COPY ./assets/caption.otf /usr/share/fonts/caption.otf COPY ./assets/caption2.ttf /usr/share/fonts/caption2.ttf COPY ./assets/hbc.ttf /usr/share/fonts/hbc.ttf +COPY ./assets/reddit.ttf /usr/share/fonts/reddit.ttf RUN fc-cache -fv COPY --chown=node:node ./package.json package.json diff --git a/assets/images/reddit.png b/assets/images/reddit.png new file mode 100644 index 0000000000000000000000000000000000000000..f4e1e7a6ccc1845fec79f1195b0a68462e7cf0ea GIT binary patch literal 20135 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 literal 0 HcmV?d00001 diff --git a/commands/image-editing/reddit.js b/commands/image-editing/reddit.js new file mode 100644 index 0000000..8e85752 --- /dev/null +++ b/commands/image-editing/reddit.js @@ -0,0 +1,19 @@ +const ImageCommand = require("../../classes/imageCommand.js"); +const { random } = require("../../utils/misc.js"); +const names = ["esmBot", "me_irl", "dankmemes", "hmmm", "gaming", "wholesome", "chonkers", "memes", "funny", "pcmasterrace", "bellybros"]; + +class RedditCommand extends ImageCommand { + params(args) { + return { + caption: args.length === 0 ? random(names) : args.join(" ").replaceAll("\n", "").replaceAll(" ", "") + }; + } + + static description = "Adds a Reddit watermark to an image"; + static arguments = ["{text}"]; + + static noText = "you need to provide some text to add a Reddit watermark!"; + static command = "reddit"; +} + +module.exports = RedditCommand; \ No newline at end of file diff --git a/natives/blur.cc b/natives/blur.cc index a61ed8b..c1ca441 100644 --- a/natives/blur.cc +++ b/natives/blur.cc @@ -9,43 +9,47 @@ using namespace Magick; Napi::Value Blur(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - bool sharp = obj.Get("sharp").As().Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + bool sharp = obj.Get("sharp").As().Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); - if (sharp) { - for_each(coalesced.begin(), coalesced.end(), sharpenImage(10, 3)); - } else { - for_each(coalesced.begin(), coalesced.end(), blurImage(15)); - } - - for_each(coalesced.begin(), coalesced.end(), magickImage(type)); - - optimizeTransparency(coalesced.begin(), coalesced.end()); - - if (type == "gif") { - for (Image &image : coalesced) { - image.quantizeDitherMethod(FloydSteinbergDitherMethod); - image.quantize(); - if (delay != 0) image.animationDelay(delay); + if (sharp) { + for_each(coalesced.begin(), coalesced.end(), sharpenImage(10, 3)); + } else { + for_each(coalesced.begin(), coalesced.end(), blurImage(15)); } + + for_each(coalesced.begin(), coalesced.end(), magickImage(type)); + + optimizeTransparency(coalesced.begin(), coalesced.end()); + + if (type == "gif") { + for (Image &image : coalesced) { + image.quantizeDitherMethod(FloydSteinbergDitherMethod); + image.quantize(); + if (delay != 0) image.animationDelay(delay); + } + } + + writeImages(coalesced.begin(), coalesced.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(coalesced.begin(), coalesced.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/blurple.cc b/natives/blurple.cc index 4d666ec..7711675 100644 --- a/natives/blurple.cc +++ b/natives/blurple.cc @@ -9,42 +9,46 @@ using namespace Magick; Napi::Value Blurple(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list blurpled; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list blurpled; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - image.threshold(49151.25); - image.levelColors("#7289DA", "white"); - image.magick(type); - image.animationDelay(delay == 0 ? image.animationDelay() : delay); - blurpled.push_back(image); - } - - optimizeTransparency(blurpled.begin(), blurpled.end()); - - if (type == "gif") { - for (Image &image : blurpled) { - image.quantizeDitherMethod(FloydSteinbergDitherMethod); - image.quantize(); + for (Image &image : coalesced) { + image.threshold(49151.25); + image.levelColors("#7289DA", "white"); + image.magick(type); + image.animationDelay(delay == 0 ? image.animationDelay() : delay); + blurpled.push_back(image); } + + optimizeTransparency(blurpled.begin(), blurpled.end()); + + if (type == "gif") { + for (Image &image : blurpled) { + image.quantizeDitherMethod(FloydSteinbergDitherMethod); + image.quantize(); + } + } + + writeImages(blurpled.begin(), blurpled.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(blurpled.begin(), blurpled.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/caption.cc b/natives/caption.cc index c234e37..72a5c47 100644 --- a/natives/caption.cc +++ b/natives/caption.cc @@ -9,62 +9,66 @@ using namespace Magick; Napi::Value Caption(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string caption = obj.Get("caption").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string caption = obj.Get("caption").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list captioned; - readImages(&frames, path); + list frames; + list coalesced; + list captioned; + readImages(&frames, path); - size_t width = frames.front().baseColumns(); - string query(to_string(width - ((width / 25) * 2)) + "x"); - Image caption_image(Geometry(query), Color("white")); - caption_image.fillColor("black"); - caption_image.alpha(true); - caption_image.font("Futura"); - caption_image.fontPointsize(width / 13); - caption_image.textGravity(Magick::CenterGravity); - caption_image.read("pango:" + caption); - caption_image.extent(Geometry(width, caption_image.rows() + (width / 13)), - Magick::CenterGravity); + size_t width = frames.front().baseColumns(); + string query(to_string(width - ((width / 25) * 2)) + "x"); + Image caption_image(Geometry(query), Color("white")); + caption_image.fillColor("black"); + caption_image.alpha(true); + caption_image.font("Futura"); + caption_image.fontPointsize(width / 13); + caption_image.textGravity(Magick::CenterGravity); + caption_image.read("pango:" + caption); + caption_image.extent(Geometry(width, caption_image.rows() + (width / 13)), + Magick::CenterGravity); - coalesceImages(&coalesced, frames.begin(), frames.end()); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - Image appended; - list images; - image.backgroundColor("white"); - images.push_back(caption_image); - images.push_back(image); - appendImages(&appended, images.begin(), images.end(), true); - appended.repage(); - appended.magick(type); - appended.animationDelay(delay == 0 ? image.animationDelay() : delay); - appended.gifDisposeMethod(Magick::BackgroundDispose); - captioned.push_back(appended); - } - - optimizeTransparency(captioned.begin(), captioned.end()); - - if (type == "gif") { - for (Image &image : captioned) { - image.quantizeDither(false); - image.quantize(); + for (Image &image : coalesced) { + Image appended; + list images; + image.backgroundColor("white"); + images.push_back(caption_image); + images.push_back(image); + appendImages(&appended, images.begin(), images.end(), true); + appended.repage(); + appended.magick(type); + appended.animationDelay(delay == 0 ? image.animationDelay() : delay); + appended.gifDisposeMethod(Magick::BackgroundDispose); + captioned.push_back(appended); } + + optimizeTransparency(captioned.begin(), captioned.end()); + + if (type == "gif") { + for (Image &image : captioned) { + image.quantizeDither(false); + image.quantize(); + } + } + + writeImages(captioned.begin(), captioned.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(captioned.begin(), captioned.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/caption2.cc b/natives/caption2.cc index 27acf61..c384adb 100644 --- a/natives/caption2.cc +++ b/natives/caption2.cc @@ -9,60 +9,64 @@ using namespace Magick; Napi::Value CaptionTwo(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string caption = obj.Get("caption").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string caption = obj.Get("caption").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list captioned; - Blob caption_blob; - readImages(&frames, path); + list frames; + list coalesced; + list captioned; + Blob caption_blob; + readImages(&frames, path); - size_t width = frames.front().baseColumns(); - string query(to_string(width - ((width / 25) * 2)) + "x"); - Image caption_image(Geometry(query), Color("white")); - caption_image.fillColor("black"); - caption_image.font("Helvetica Neue"); - caption_image.fontPointsize(width / 17); - caption_image.read("pango:" + caption); - caption_image.extent(Geometry(width, caption_image.rows() + (width / 25)), - Magick::CenterGravity); + size_t width = frames.front().baseColumns(); + string query(to_string(width - ((width / 25) * 2)) + "x"); + Image caption_image(Geometry(query), Color("white")); + caption_image.fillColor("black"); + caption_image.font("Helvetica Neue"); + caption_image.fontPointsize(width / 17); + caption_image.read("pango:" + caption); + caption_image.extent(Geometry(width, caption_image.rows() + (width / 25)), + Magick::CenterGravity); - coalesceImages(&coalesced, frames.begin(), frames.end()); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - Image appended; - list images; - image.backgroundColor("white"); - images.push_back(image); - images.push_back(caption_image); - appendImages(&appended, images.begin(), images.end(), true); - appended.repage(); - appended.magick(type); - appended.animationDelay(delay == 0 ? image.animationDelay() : delay); - captioned.push_back(appended); - } - - optimizeTransparency(captioned.begin(), captioned.end()); - - if (type == "gif") { - for (Image &image : captioned) { - image.quantizeDither(false); - image.quantize(); + for (Image &image : coalesced) { + Image appended; + list images; + image.backgroundColor("white"); + images.push_back(image); + images.push_back(caption_image); + appendImages(&appended, images.begin(), images.end(), true); + appended.repage(); + appended.magick(type); + appended.animationDelay(delay == 0 ? image.animationDelay() : delay); + captioned.push_back(appended); } + + optimizeTransparency(captioned.begin(), captioned.end()); + + if (type == "gif") { + for (Image &image : captioned) { + image.quantizeDither(false); + image.quantize(); + } + } + + writeImages(captioned.begin(), captioned.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(captioned.begin(), captioned.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/circle.cc b/natives/circle.cc index def9f5d..0f9f1fc 100644 --- a/natives/circle.cc +++ b/natives/circle.cc @@ -9,41 +9,45 @@ using namespace Magick; Napi::Value Circle(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list blurred; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list blurred; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - image.rotationalBlur(10); - image.magick(type); - blurred.push_back(image); - } - - optimizeTransparency(blurred.begin(), blurred.end()); - - if (type == "gif") { - for (Image &image : blurred) { - image.quantizeDitherMethod(FloydSteinbergDitherMethod); - image.quantize(); - if (delay != 0) image.animationDelay(delay); + for (Image &image : coalesced) { + image.rotationalBlur(10); + image.magick(type); + blurred.push_back(image); } + + optimizeTransparency(blurred.begin(), blurred.end()); + + if (type == "gif") { + for (Image &image : blurred) { + image.quantizeDitherMethod(FloydSteinbergDitherMethod); + image.quantize(); + if (delay != 0) image.animationDelay(delay); + } + } + + writeImages(blurred.begin(), blurred.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(blurred.begin(), blurred.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/crop.cc b/natives/crop.cc index f348793..1bbfccf 100644 --- a/natives/crop.cc +++ b/natives/crop.cc @@ -9,49 +9,53 @@ using namespace Magick; Napi::Value Crop(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list mid; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - image.extent(Geometry(to_string(image.columns() / image.rows() >= 1 - ? image.rows() - : image.columns()) + - "x"), - Magick::CenterGravity); - image.extent(Geometry("x" + to_string(image.columns() / image.rows() <= 1 - ? image.columns() - : image.rows())), - Magick::CenterGravity); - image.magick(type); - mid.push_back(image); - } - - optimizeTransparency(mid.begin(), mid.end()); - - if (type == "gif") { - for (Image &image : mid) { - image.quantizeDither(false); - image.quantize(); - if (delay != 0) image.animationDelay(delay); + for (Image &image : coalesced) { + image.extent(Geometry(to_string(image.columns() / image.rows() >= 1 + ? image.rows() + : image.columns()) + + "x"), + Magick::CenterGravity); + image.extent(Geometry("x" + to_string(image.columns() / image.rows() <= 1 + ? image.columns() + : image.rows())), + Magick::CenterGravity); + image.magick(type); + mid.push_back(image); } + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDither(false); + image.quantize(); + if (delay != 0) image.animationDelay(delay); + } + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/explode.cc b/natives/explode.cc index 7d5a83c..ecbc2c3 100644 --- a/natives/explode.cc +++ b/natives/explode.cc @@ -9,42 +9,46 @@ using namespace Magick; Napi::Value Explode(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - int amount = obj.Get("amount").As().Int32Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + int amount = obj.Get("amount").As().Int32Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list blurred; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list blurred; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - image.implode(amount); - image.magick(type); - blurred.push_back(image); - } - - optimizeTransparency(blurred.begin(), blurred.end()); - - if (type == "gif") { - for (Image &image : blurred) { - image.quantizeDither(false); - image.quantize(); - if (delay != 0) image.animationDelay(delay); + for (Image &image : coalesced) { + image.implode(amount); + image.magick(type); + blurred.push_back(image); } + + optimizeTransparency(blurred.begin(), blurred.end()); + + if (type == "gif") { + for (Image &image : blurred) { + image.quantizeDither(false); + image.quantize(); + if (delay != 0) image.animationDelay(delay); + } + } + + writeImages(blurred.begin(), blurred.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(blurred.begin(), blurred.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/flag.cc b/natives/flag.cc index 4c47898..031e204 100644 --- a/natives/flag.cc +++ b/natives/flag.cc @@ -9,50 +9,54 @@ using namespace Magick; Napi::Value Flag(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string overlay = obj.Get("overlay").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string overlay = obj.Get("overlay").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - Image watermark; - readImages(&frames, path); - watermark.read(overlay); - watermark.alphaChannel(Magick::SetAlphaChannel); - watermark.evaluate(Magick::AlphaChannel, Magick::MultiplyEvaluateOperator, - 0.5); - string query(to_string(frames.front().baseColumns()) + "x" + - to_string(frames.front().baseRows()) + "!"); - watermark.scale(Geometry(query)); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list mid; + Image watermark; + readImages(&frames, path); + watermark.read(overlay); + watermark.alphaChannel(Magick::SetAlphaChannel); + watermark.evaluate(Magick::AlphaChannel, Magick::MultiplyEvaluateOperator, + 0.5); + string query(to_string(frames.front().baseColumns()) + "x" + + to_string(frames.front().baseRows()) + "!"); + watermark.scale(Geometry(query)); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - image.composite(watermark, Magick::NorthGravity, Magick::OverCompositeOp); - image.magick(type); - mid.push_back(image); - } - - optimizeTransparency(mid.begin(), mid.end()); - - if (type == "gif") { - for (Image &image : mid) { - image.quantizeDither(false); - image.quantize(); - if (delay != 0) image.animationDelay(delay); + for (Image &image : coalesced) { + image.composite(watermark, Magick::NorthGravity, Magick::OverCompositeOp); + image.magick(type); + mid.push_back(image); } + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDither(false); + image.quantize(); + if (delay != 0) image.animationDelay(delay); + } + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/flip.cc b/natives/flip.cc index 82a25d4..33a9a93 100644 --- a/natives/flip.cc +++ b/natives/flip.cc @@ -9,43 +9,47 @@ using namespace Magick; Napi::Value Flip(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - bool flop = - obj.Has("flop") ? obj.Get("flop").As().Value() : false; - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + bool flop = + obj.Has("flop") ? obj.Get("flop").As().Value() : false; + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list mid; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - flop ? image.flop() : image.flip(); - image.magick(type); - mid.push_back(image); - } - - optimizeTransparency(mid.begin(), mid.end()); - - if (type == "gif") { - for (Image &image : mid) { - image.quantizeDither(false); - image.quantize(); - if (delay != 0) image.animationDelay(delay); + for (Image &image : coalesced) { + flop ? image.flop() : image.flip(); + image.magick(type); + mid.push_back(image); } + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDither(false); + image.quantize(); + if (delay != 0) image.animationDelay(delay); + } + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/freeze.cc b/natives/freeze.cc index 375ec38..5a429d3 100644 --- a/natives/freeze.cc +++ b/natives/freeze.cc @@ -9,37 +9,42 @@ using namespace Magick; Napi::Value Freeze(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - bool loop = - obj.Has("loop") ? obj.Get("loop").As().Value() : false; - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - int frame = - obj.Has("frame") ? obj.Get("frame").As().Int32Value() : -1; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + bool loop = + obj.Has("loop") ? obj.Get("loop").As().Value() : false; + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + int frame = obj.Has("frame") + ? obj.Get("frame").As().Int32Value() + : -1; - Blob blob; + Blob blob; - list frames; - readImages(&frames, path); + list frames; + readImages(&frames, path); - if (frame >= 0 && !loop) { - size_t frameSize = frames.size(); - int framePos = clamp(frame, 0, (int)frameSize); - frames.resize(framePos + 1); + if (frame >= 0 && !loop) { + size_t frameSize = frames.size(); + int framePos = clamp(frame, 0, (int)frameSize); + frames.resize(framePos + 1); + } + for_each(frames.begin(), frames.end(), + animationIterationsImage(loop ? 0 : 1)); + for_each(frames.begin(), frames.end(), magickImage(type)); + + if (delay != 0) + for_each(frames.begin(), frames.end(), animationDelayImage(delay)); + writeImages(frames.begin(), frames.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - for_each(frames.begin(), frames.end(), - animationIterationsImage(loop ? 0 : 1)); - for_each(frames.begin(), frames.end(), magickImage(type)); - - if (delay != 0) - for_each(frames.begin(), frames.end(), animationDelayImage(delay)); - writeImages(frames.begin(), frames.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/gamexplain.cc b/natives/gamexplain.cc index 883134a..15ec2fe 100644 --- a/natives/gamexplain.cc +++ b/natives/gamexplain.cc @@ -9,46 +9,50 @@ using namespace Magick; Napi::Value Gamexplain(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - Image watermark; - readImages(&frames, path); - watermark.read("./assets/images/gamexplain.png"); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list mid; + Image watermark; + readImages(&frames, path); + watermark.read("./assets/images/gamexplain.png"); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - image.backgroundColor("white"); - image.scale(Geometry("1181x571!")); - image.extent(Geometry("1200x675-10-92")); - image.composite(watermark, Geometry("+0+0"), Magick::OverCompositeOp); - image.magick(type); - mid.push_back(image); - } - - optimizeTransparency(mid.begin(), mid.end()); - - if (type == "gif") { - for (Image &image : mid) { - image.quantizeDither(false); - image.quantize(); - if (delay != 0) image.animationDelay(delay); + for (Image &image : coalesced) { + image.backgroundColor("white"); + image.scale(Geometry("1181x571!")); + image.extent(Geometry("1200x675-10-92")); + image.composite(watermark, Geometry("+0+0"), Magick::OverCompositeOp); + image.magick(type); + mid.push_back(image); } + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDither(false); + image.quantize(); + if (delay != 0) image.animationDelay(delay); + } + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/globe.cc b/natives/globe.cc index 52fa98b..1912687 100644 --- a/natives/globe.cc +++ b/natives/globe.cc @@ -9,62 +9,67 @@ using namespace Magick; Napi::Value Globe(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - Image distort; - Image overlay; - readImages(&frames, path); - distort.read("./assets/images/spheremap.png"); - overlay.read("./assets/images/sphere_overlay.png"); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list mid; + Image distort; + Image overlay; + readImages(&frames, path); + distort.read("./assets/images/spheremap.png"); + overlay.read("./assets/images/sphere_overlay.png"); + coalesceImages(&coalesced, frames.begin(), frames.end()); - if (type != "gif") { - list::iterator it = coalesced.begin(); - for (int i = 0; i < 29; ++i) { - coalesced.push_back(*it); + if (type != "gif") { + list::iterator it = coalesced.begin(); + for (int i = 0; i < 29; ++i) { + coalesced.push_back(*it); + } } + + int i = 0; + for (Image &image : coalesced) { + image.scale(Geometry("500x500!")); + image.alphaChannel(Magick::SetAlphaChannel); + size_t width = image.columns(); + image.roll(Geometry("+" + to_string(width * i / coalesced.size()))); + image.composite(overlay, Magick::CenterGravity, + Magick::HardLightCompositeOp); + image.composite(distort, Magick::CenterGravity, + Magick::DistortCompositeOp); + image.magick("GIF"); + mid.push_back(image); + i++; + } + + optimizeTransparency(mid.begin(), mid.end()); + if (delay != 0) { + for_each(mid.begin(), mid.end(), animationDelayImage(delay)); + } else if (type != "gif") { + for_each(mid.begin(), mid.end(), animationDelayImage(5)); + } + + for (Image &image : mid) { + image.quantizeDitherMethod(FloydSteinbergDitherMethod); + image.quantize(); + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - int i = 0; - for (Image &image : coalesced) { - image.scale(Geometry("500x500!")); - image.alphaChannel(Magick::SetAlphaChannel); - size_t width = image.columns(); - image.roll(Geometry("+" + to_string(width * i / coalesced.size()))); - image.composite(overlay, Magick::CenterGravity, - Magick::HardLightCompositeOp); - image.composite(distort, Magick::CenterGravity, Magick::DistortCompositeOp); - image.magick("GIF"); - mid.push_back(image); - i++; - } - - optimizeTransparency(mid.begin(), mid.end()); - if (delay != 0) { - for_each(mid.begin(), mid.end(), animationDelayImage(delay)); - } else if (type != "gif") { - for_each(mid.begin(), mid.end(), animationDelayImage(5)); - } - - for (Image &image : mid) { - image.quantizeDitherMethod(FloydSteinbergDitherMethod); - image.quantize(); - } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/homebrew.cc b/natives/homebrew.cc index 2986d78..bd63133 100644 --- a/natives/homebrew.cc +++ b/natives/homebrew.cc @@ -9,25 +9,29 @@ using namespace Magick; Napi::Value Homebrew(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string caption = obj.Get("caption").As().Utf8Value(); + try { + Napi::Object obj = info[0].As(); + string caption = obj.Get("caption").As().Utf8Value(); - Blob blob; + Blob blob; - Image image; - image.read("./assets/images/hbc.png"); - image.textGravity(Magick::CenterGravity); - image.font("./assets/hbc.ttf"); - image.textKerning(-5); - image.fillColor("white"); - image.fontPointsize(96); - image.draw(DrawableText(0, 0, caption)); - image.magick("PNG"); - image.write(&blob); + Image image; + image.read("./assets/images/hbc.png"); + image.textGravity(Magick::CenterGravity); + image.font("./assets/hbc.ttf"); + image.textKerning(-5); + image.fillColor("white"); + image.fontPointsize(96); + image.draw(DrawableText(0, 0, caption)); + image.magick("PNG"); + image.write(&blob); - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", "png"); - return result; + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", "png"); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); + } } \ No newline at end of file diff --git a/natives/image.cc b/natives/image.cc index aba1ede..0461b7f 100644 --- a/natives/image.cc +++ b/natives/image.cc @@ -21,6 +21,7 @@ #include "mirror.h" #include "swirl.h" #include "motivate.h" +#include "reddit.h" #include "resize.h" #include "retro.h" #include "reverse.h" @@ -56,6 +57,7 @@ Napi::Object Init(Napi::Env env, Napi::Object exports) exports.Set(Napi::String::New(env, "meme"), Napi::Function::New(env, Meme)); exports.Set(Napi::String::New(env, "mirror"), Napi::Function::New(env, Mirror)); exports.Set(Napi::String::New(env, "motivate"), Napi::Function::New(env, Motivate)); + exports.Set(Napi::String::New(env, "reddit"), Napi::Function::New(env, Reddit)); exports.Set(Napi::String::New(env, "resize"), Napi::Function::New(env, Resize)); exports.Set(Napi::String::New(env, "retro"), Napi::Function::New(env, Retro)); exports.Set(Napi::String::New(env, "reverse"), Napi::Function::New(env, Reverse)); diff --git a/natives/invert.cc b/natives/invert.cc index 9941216..0ee546c 100644 --- a/natives/invert.cc +++ b/natives/invert.cc @@ -9,43 +9,47 @@ using namespace Magick; Napi::Value Invert(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list mid; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for_each(coalesced.begin(), coalesced.end(), negateImage()); - for (Image &image : coalesced) { - image.negateChannel(Magick::AlphaChannel); - mid.push_back(image); - } - // Magick::ChannelType(Magick::CompositeChannels ^ Magick::AlphaChannel) - for_each(mid.begin(), mid.end(), magickImage(type)); - - optimizeTransparency(mid.begin(), mid.end()); - - if (type == "gif") { - for (Image &image : mid) { - image.quantizeDitherMethod(FloydSteinbergDitherMethod); - image.quantize(); - if (delay != 0) image.animationDelay(delay); + for_each(coalesced.begin(), coalesced.end(), negateImage()); + for (Image &image : coalesced) { + image.negateChannel(Magick::AlphaChannel); + mid.push_back(image); } + // Magick::ChannelType(Magick::CompositeChannels ^ Magick::AlphaChannel) + for_each(mid.begin(), mid.end(), magickImage(type)); + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDitherMethod(FloydSteinbergDitherMethod); + image.quantize(); + if (delay != 0) image.animationDelay(delay); + } + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/jpeg.cc b/natives/jpeg.cc index 05a906c..9c9114f 100644 --- a/natives/jpeg.cc +++ b/natives/jpeg.cc @@ -9,20 +9,24 @@ using namespace Magick; Napi::Value Jpeg(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); - Blob blob; + Blob blob; - Image image; - image.read(path); - image.quality(1); - image.magick("JPEG"); - image.write(&blob); + Image image; + image.read(path); + image.quality(1); + image.magick("JPEG"); + image.write(&blob); - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", "jpg"); - return result; + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", "jpg"); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); + } } \ No newline at end of file diff --git a/natives/leak.cc b/natives/leak.cc index 055fa81..3c65a20 100644 --- a/natives/leak.cc +++ b/natives/leak.cc @@ -9,47 +9,51 @@ using namespace Magick; Napi::Value Leak(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - Image watermark; - readImages(&frames, path); - watermark.read("./assets/images/leak.png"); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list mid; + Image watermark; + readImages(&frames, path); + watermark.read("./assets/images/leak.png"); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - image.backgroundColor("white"); - image.scale(Geometry("640x360!")); - image.rotate(15); - image.extent(Geometry("1280x720-700+100")); - image.composite(watermark, Geometry("+0+0"), Magick::OverCompositeOp); - image.magick(type); - mid.push_back(image); - } - - optimizeTransparency(mid.begin(), mid.end()); - - if (type == "gif") { - for (Image &image : mid) { - image.quantizeDither(false); - image.quantize(); - if (delay != 0) image.animationDelay(delay); + for (Image &image : coalesced) { + image.backgroundColor("white"); + image.scale(Geometry("640x360!")); + image.rotate(15); + image.extent(Geometry("1280x720-700+100")); + image.composite(watermark, Geometry("+0+0"), Magick::OverCompositeOp); + image.magick(type); + mid.push_back(image); } + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDither(false); + image.quantize(); + if (delay != 0) image.animationDelay(delay); + } + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/magik.cc b/natives/magik.cc index a81986d..108f698 100644 --- a/natives/magik.cc +++ b/natives/magik.cc @@ -9,43 +9,47 @@ using namespace Magick; Napi::Value Magik(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list blurred; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list blurred; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - image.scale(Geometry("350x350")); - image.liquidRescale(Geometry("175x175")); - image.liquidRescale(Geometry("350x350")); - image.magick(type); - blurred.push_back(image); - } - - optimizeTransparency(blurred.begin(), blurred.end()); - - if (type == "gif") { - for (Image &image : blurred) { - image.quantizeDitherMethod(FloydSteinbergDitherMethod); - image.quantize(); - if (delay != 0) image.animationDelay(delay); + for (Image &image : coalesced) { + image.scale(Geometry("350x350")); + image.liquidRescale(Geometry("175x175")); + image.liquidRescale(Geometry("350x350")); + image.magick(type); + blurred.push_back(image); } + + optimizeTransparency(blurred.begin(), blurred.end()); + + if (type == "gif") { + for (Image &image : blurred) { + image.quantizeDitherMethod(FloydSteinbergDitherMethod); + image.quantize(); + if (delay != 0) image.animationDelay(delay); + } + } + + writeImages(blurred.begin(), blurred.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(blurred.begin(), blurred.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/meme.cc b/natives/meme.cc index 77d61ef..c23b6a3 100644 --- a/natives/meme.cc +++ b/natives/meme.cc @@ -9,79 +9,84 @@ using namespace Magick; Napi::Value Meme(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string top = obj.Get("top").As().Utf8Value(); - string bottom = obj.Get("bottom").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string top = obj.Get("top").As().Utf8Value(); + string bottom = obj.Get("bottom").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - Image top_text; - Image bottom_text; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); - for_each(coalesced.begin(), coalesced.end(), scaleImage(Geometry(600, 600))); + list frames; + list coalesced; + list mid; + Image top_text; + Image bottom_text; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); + for_each(coalesced.begin(), coalesced.end(), + scaleImage(Geometry(600, 600))); - top_text.size(Geometry(to_string(coalesced.front().columns()))); - top_text.backgroundColor("none"); - top_text.font("Impact"); - top_text.fontPointsize(40); - top_text.textGravity(Magick::CenterGravity); - top_text.read("pango:" + top + ""); - Image top_text_fill = top_text; - top_text_fill.channel(Magick::AlphaChannel); - top_text_fill.morphology(Magick::EdgeOutMorphology, "Octagon"); - top_text_fill.backgroundColor("black"); - top_text_fill.alphaChannel(Magick::ShapeAlphaChannel); - top_text.composite(top_text_fill, Magick::CenterGravity, - Magick::DstOverCompositeOp); + top_text.size(Geometry(to_string(coalesced.front().columns()))); + top_text.backgroundColor("none"); + top_text.font("Impact"); + top_text.fontPointsize(40); + top_text.textGravity(Magick::CenterGravity); + top_text.read("pango:" + top + ""); + Image top_text_fill = top_text; + top_text_fill.channel(Magick::AlphaChannel); + top_text_fill.morphology(Magick::EdgeOutMorphology, "Octagon"); + top_text_fill.backgroundColor("black"); + top_text_fill.alphaChannel(Magick::ShapeAlphaChannel); + top_text.composite(top_text_fill, Magick::CenterGravity, + Magick::DstOverCompositeOp); - if (bottom != "") { - bottom_text.size(Geometry(to_string(coalesced.front().columns()))); - bottom_text.backgroundColor("none"); - bottom_text.font("Impact"); - bottom_text.fontPointsize(40); - bottom_text.textGravity(Magick::CenterGravity); - bottom_text.read("pango:" + bottom + ""); - Image bottom_text_fill = bottom_text; - bottom_text_fill.channel(Magick::AlphaChannel); - bottom_text_fill.morphology(Magick::EdgeOutMorphology, "Octagon"); - bottom_text_fill.backgroundColor("black"); - bottom_text_fill.alphaChannel(Magick::ShapeAlphaChannel); - bottom_text.composite(bottom_text_fill, Magick::CenterGravity, - Magick::DstOverCompositeOp); - } - - for (Image &image : coalesced) { - image.composite(top_text, Magick::NorthGravity, Magick::OverCompositeOp); - if (bottom != "") - image.composite(bottom_text, Magick::SouthGravity, - Magick::OverCompositeOp); - image.magick(type); - mid.push_back(image); - } - - optimizeTransparency(mid.begin(), mid.end()); - - if (type == "gif") { - for (Image &image : mid) { - image.quantizeDither(false); - image.quantize(); - if (delay != 0) image.animationDelay(delay); + if (bottom != "") { + bottom_text.size(Geometry(to_string(coalesced.front().columns()))); + bottom_text.backgroundColor("none"); + bottom_text.font("Impact"); + bottom_text.fontPointsize(40); + bottom_text.textGravity(Magick::CenterGravity); + bottom_text.read("pango:" + bottom + ""); + Image bottom_text_fill = bottom_text; + bottom_text_fill.channel(Magick::AlphaChannel); + bottom_text_fill.morphology(Magick::EdgeOutMorphology, "Octagon"); + bottom_text_fill.backgroundColor("black"); + bottom_text_fill.alphaChannel(Magick::ShapeAlphaChannel); + bottom_text.composite(bottom_text_fill, Magick::CenterGravity, + Magick::DstOverCompositeOp); } + + for (Image &image : coalesced) { + image.composite(top_text, Magick::NorthGravity, Magick::OverCompositeOp); + if (bottom != "") + image.composite(bottom_text, Magick::SouthGravity, + Magick::OverCompositeOp); + image.magick(type); + mid.push_back(image); + } + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDither(false); + image.quantize(); + if (delay != 0) image.animationDelay(delay); + } + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/mirror.cc b/natives/mirror.cc index a8c1ede..ac0ae7e 100644 --- a/natives/mirror.cc +++ b/natives/mirror.cc @@ -9,78 +9,82 @@ using namespace Magick; Napi::Value Mirror(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - bool vertical = obj.Has("vertical") - ? obj.Get("vertical").As().Value() - : false; - bool first = - obj.Has("first") ? obj.Get("first").As().Value() : false; - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + bool vertical = obj.Has("vertical") + ? obj.Get("vertical").As().Value() + : false; + bool first = + obj.Has("first") ? obj.Get("first").As().Value() : false; + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - MagickCore::GravityType gravity; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list mid; + MagickCore::GravityType gravity; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); - if (vertical && first) { - gravity = Magick::NorthGravity; - } else if (!vertical && first) { - gravity = Magick::WestGravity; - } else if (vertical && !first) { - gravity = Magick::SouthGravity; - } else { - gravity = Magick::EastGravity; - } - - for (Image &image : coalesced) { - list mirrored; - Image final; - image.extent( - Geometry(to_string(vertical ? image.baseColumns() - : image.baseColumns() / 2) + - "x" + - to_string(vertical ? image.baseRows() / 2 : image.baseRows())), - gravity); - mirrored.push_back(image); - Image mirror = image; - if (vertical) { - mirror.flip(); + if (vertical && first) { + gravity = Magick::NorthGravity; + } else if (!vertical && first) { + gravity = Magick::WestGravity; + } else if (vertical && !first) { + gravity = Magick::SouthGravity; } else { - mirror.flop(); + gravity = Magick::EastGravity; } - if (first) { - mirrored.push_back(mirror); - } else { - mirrored.push_front(mirror); + + for (Image &image : coalesced) { + list mirrored; + Image final; + image.extent(Geometry(to_string(vertical ? image.baseColumns() + : image.baseColumns() / 2) + + "x" + + to_string(vertical ? image.baseRows() / 2 + : image.baseRows())), + gravity); + mirrored.push_back(image); + Image mirror = image; + if (vertical) { + mirror.flip(); + } else { + mirror.flop(); + } + if (first) { + mirrored.push_back(mirror); + } else { + mirrored.push_front(mirror); + } + appendImages(&final, mirrored.begin(), mirrored.end(), vertical); + final.repage(); + final.magick(type); + final.animationDelay(delay == 0 ? image.animationDelay() : delay); + mid.push_back(final); } - appendImages(&final, mirrored.begin(), mirrored.end(), vertical); - final.repage(); - final.magick(type); - final.animationDelay(delay == 0 ? image.animationDelay() : delay); - mid.push_back(final); + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDither(false); + image.quantize(); + } + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - optimizeTransparency(mid.begin(), mid.end()); - - if (type == "gif") { - for (Image &image : mid) { - image.quantizeDither(false); - image.quantize(); - } - } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/motivate.cc b/natives/motivate.cc index f2e3efc..a3bee70 100644 --- a/natives/motivate.cc +++ b/natives/motivate.cc @@ -9,83 +9,87 @@ using namespace Magick; Napi::Value Motivate(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string top_text = obj.Get("top").As().Utf8Value(); - string bottom_text = obj.Get("bottom").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string top_text = obj.Get("top").As().Utf8Value(); + string bottom_text = obj.Get("bottom").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - Image top; - Image bottom; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list mid; + Image top; + Image bottom; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); - top.size(Geometry("600")); - top.backgroundColor("black"); - top.font("Times"); - top.textGravity(Magick::CenterGravity); - top.fontPointsize(56); - top.read("pango:" + top_text + ""); - top.extent(Geometry(bottom_text != "" ? to_string(top.columns()) + "x" + - to_string(top.rows()) - : to_string(top.columns()) + "x" + - to_string(top.rows() + 20)), - "black", Magick::NorthGravity); + top.size(Geometry("600")); + top.backgroundColor("black"); + top.font("Times"); + top.textGravity(Magick::CenterGravity); + top.fontPointsize(56); + top.read("pango:" + top_text + ""); + top.extent(Geometry(bottom_text != "" ? to_string(top.columns()) + "x" + + to_string(top.rows()) + : to_string(top.columns()) + "x" + + to_string(top.rows() + 20)), + "black", Magick::NorthGravity); - if (bottom_text != "") { - bottom.size(Geometry("600")); - bottom.backgroundColor("black"); - bottom.font("Times"); - bottom.textGravity(Magick::CenterGravity); - bottom.fontPointsize(28); - bottom.read("pango:" + bottom_text + ""); - bottom.extent(Geometry(to_string(bottom.columns()) + "x" + - to_string(bottom.rows() + 20)), - "black", Magick::NorthGravity); - } - - for (Image &image : coalesced) { - Image final; - image.scale(Geometry(500, 500)); - image.borderColor("black"); - image.border(Geometry(5, 5)); - image.borderColor("white"); - image.border(Geometry(3, 3)); - image.backgroundColor("black"); - image.extent(Geometry(600, image.rows() + 50), Magick::CenterGravity); - - list to_append; - to_append.push_back(image); - to_append.push_back(top); - if (bottom_text != "") to_append.push_back(bottom); - appendImages(&final, to_append.begin(), to_append.end(), true); - final.repage(); - final.magick(type); - final.animationDelay(delay == 0 ? image.animationDelay() : delay); - mid.push_back(final); - } - - optimizeTransparency(mid.begin(), mid.end()); - - if (type == "gif") { - for (Image &image : mid) { - image.quantizeDither(false); - image.quantize(); + if (bottom_text != "") { + bottom.size(Geometry("600")); + bottom.backgroundColor("black"); + bottom.font("Times"); + bottom.textGravity(Magick::CenterGravity); + bottom.fontPointsize(28); + bottom.read("pango:" + bottom_text + ""); + bottom.extent(Geometry(to_string(bottom.columns()) + "x" + + to_string(bottom.rows() + 20)), + "black", Magick::NorthGravity); } + + for (Image &image : coalesced) { + Image final; + image.scale(Geometry(500, 500)); + image.borderColor("black"); + image.border(Geometry(5, 5)); + image.borderColor("white"); + image.border(Geometry(3, 3)); + image.backgroundColor("black"); + image.extent(Geometry(600, image.rows() + 50), Magick::CenterGravity); + + list to_append; + to_append.push_back(image); + to_append.push_back(top); + if (bottom_text != "") to_append.push_back(bottom); + appendImages(&final, to_append.begin(), to_append.end(), true); + final.repage(); + final.magick(type); + final.animationDelay(delay == 0 ? image.animationDelay() : delay); + mid.push_back(final); + } + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDither(false); + image.quantize(); + } + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/reddit.cc b/natives/reddit.cc new file mode 100644 index 0000000..387eead --- /dev/null +++ b/natives/reddit.cc @@ -0,0 +1,74 @@ +#include +#include + +#include + +using namespace std; +using namespace Magick; + +Napi::Value Reddit(const Napi::CallbackInfo &info) { + Napi::Env env = info.Env(); + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string text = obj.Get("caption").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + + Blob blob; + + list frames; + list coalesced; + list mid; + Image watermark; + Image text_image; + readImages(&frames, path); + + watermark.read("./assets/images/reddit.png"); + text_image.textGravity(Magick::WestGravity); + text_image.font("Roboto"); + text_image.fontPointsize(47); + text_image.backgroundColor("none"); + text_image.read("pango:" + text + ""); + + watermark.composite(text_image, Geometry("+375+46"), + Magick::OverCompositeOp); + + string query(to_string(frames.front().baseColumns()) + "x"); + watermark.scale(Geometry(query)); + + coalesceImages(&coalesced, frames.begin(), frames.end()); + + for (Image &image : coalesced) { + Image final; + list to_append; + to_append.push_back(image); + to_append.push_back(watermark); + appendImages(&final, to_append.begin(), to_append.end(), true); + final.repage(); + image.magick(type); + final.animationDelay(delay == 0 ? image.animationDelay() : delay); + mid.push_back(final); + } + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDitherMethod(FloydSteinbergDitherMethod); + image.quantize(); + } + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); + } +} \ No newline at end of file diff --git a/natives/reddit.h b/natives/reddit.h new file mode 100644 index 0000000..af9d1e5 --- /dev/null +++ b/natives/reddit.h @@ -0,0 +1,8 @@ +#ifndef ESMBOT_NATIVES_REDDIT_H_ +#define ESMBOT_NATIVES_REDDIT_H_ + +#include + +Napi::Value Reddit(const Napi::CallbackInfo& info); + +#endif \ No newline at end of file diff --git a/natives/resize.cc b/natives/resize.cc index d3ecc4b..344b447 100644 --- a/natives/resize.cc +++ b/natives/resize.cc @@ -9,54 +9,58 @@ using namespace Magick; Napi::Value Resize(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - bool stretch = obj.Has("stretch") - ? obj.Get("stretch").As().Value() - : false; - bool wide = - obj.Has("wide") ? obj.Get("wide").As().Value() : false; - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + bool stretch = obj.Has("stretch") + ? obj.Get("stretch").As().Value() + : false; + bool wide = + obj.Has("wide") ? obj.Get("wide").As().Value() : false; + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list blurred; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list blurred; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - if (stretch) { - image.resize(Geometry("512x512!")); - } else if (wide) { - image.resize(Geometry(to_string((image.baseColumns() * 19) / 2) + "x" + - to_string(image.baseRows() / 2) + "!")); - } else { - image.scale(Geometry("10%")); - image.scale(Geometry("1000%")); + for (Image &image : coalesced) { + if (stretch) { + image.resize(Geometry("512x512!")); + } else if (wide) { + image.resize(Geometry(to_string((image.baseColumns() * 19) / 2) + "x" + + to_string(image.baseRows() / 2) + "!")); + } else { + image.scale(Geometry("10%")); + image.scale(Geometry("1000%")); + } + image.magick(type); + blurred.push_back(image); } - image.magick(type); - blurred.push_back(image); - } - optimizeTransparency(blurred.begin(), blurred.end()); + optimizeTransparency(blurred.begin(), blurred.end()); - if (type == "gif") { - for (Image &image : blurred) { - image.quantizeDitherMethod(FloydSteinbergDitherMethod); - image.quantize(); - if (delay != 0) image.animationDelay(delay); + if (type == "gif") { + for (Image &image : blurred) { + image.quantizeDitherMethod(FloydSteinbergDitherMethod); + image.quantize(); + if (delay != 0) image.animationDelay(delay); + } } + + writeImages(blurred.begin(), blurred.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(blurred.begin(), blurred.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/retro.cc b/natives/retro.cc index 737bd97..69aea26 100644 --- a/natives/retro.cc +++ b/natives/retro.cc @@ -9,76 +9,80 @@ using namespace Magick; Napi::Value Retro(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string line1 = obj.Get("line1").As().Utf8Value(); - string line2 = obj.Get("line2").As().Utf8Value(); - string line3 = obj.Get("line3").As().Utf8Value(); + try { + Napi::Object obj = info[0].As(); + string line1 = obj.Get("line1").As().Utf8Value(); + string line2 = obj.Get("line2").As().Utf8Value(); + string line3 = obj.Get("line3").As().Utf8Value(); - Blob blob; + Blob blob; - Image image; - Image line1_text; - Image line2_text; - Image line3_text; + Image image; + Image line1_text; + Image line2_text; + Image line3_text; - image.read("./assets/images/retro.png"); + image.read("./assets/images/retro.png"); - line2_text.backgroundColor("none"); - line2_text.fontPointsize(128); - line2_text.textGravity(Magick::CenterGravity); - line2_text.font("Comic Sans MS"); - line2_text.read("pango:" + - (line2 == "" ? line1 : line2) + ""); - line2_text.extent(Geometry("1260x859+0+0"), Magick::CenterGravity); - Image line2_text_fill = line2_text; - line2_text_fill.channel(Magick::AlphaChannel); - line2_text_fill.morphology(Magick::EdgeOutMorphology, "Octagon:10"); - line2_text_fill.backgroundColor("gray"); - line2_text_fill.alphaChannel(Magick::ShapeAlphaChannel); - line2_text.composite(line2_text_fill, Magick::CenterGravity, - Magick::DstOverCompositeOp); - image.composite(line2_text, Geometry("+0-100"), Magick::OverCompositeOp); - - if (line2 != "") { - line1_text.backgroundColor("none"); - line1_text.fontPointsize(64); - line1_text.textGravity(Magick::CenterGravity); - line1_text.font("Comic Sans MS"); - line1_text.read("pango:" + line1 + ""); - line1_text.extent(Geometry("1260x859+0+0"), Magick::CenterGravity); - Image line1_text_fill = line1_text; - line1_text_fill.channel(Magick::AlphaChannel); - line1_text_fill.morphology(Magick::EdgeOutMorphology, "Octagon:10"); - line1_text_fill.backgroundColor("gray"); - line1_text_fill.alphaChannel(Magick::ShapeAlphaChannel); - line1_text.composite(line1_text_fill, Magick::CenterGravity, + line2_text.backgroundColor("none"); + line2_text.fontPointsize(128); + line2_text.textGravity(Magick::CenterGravity); + line2_text.font("Comic Sans MS"); + line2_text.read("pango:" + + (line2 == "" ? line1 : line2) + ""); + line2_text.extent(Geometry("1260x859+0+0"), Magick::CenterGravity); + Image line2_text_fill = line2_text; + line2_text_fill.channel(Magick::AlphaChannel); + line2_text_fill.morphology(Magick::EdgeOutMorphology, "Octagon:10"); + line2_text_fill.backgroundColor("gray"); + line2_text_fill.alphaChannel(Magick::ShapeAlphaChannel); + line2_text.composite(line2_text_fill, Magick::CenterGravity, Magick::DstOverCompositeOp); - image.composite(line1_text, Geometry("+0-250"), Magick::OverCompositeOp); + image.composite(line2_text, Geometry("+0-100"), Magick::OverCompositeOp); + + if (line2 != "") { + line1_text.backgroundColor("none"); + line1_text.fontPointsize(64); + line1_text.textGravity(Magick::CenterGravity); + line1_text.font("Comic Sans MS"); + line1_text.read("pango:" + line1 + ""); + line1_text.extent(Geometry("1260x859+0+0"), Magick::CenterGravity); + Image line1_text_fill = line1_text; + line1_text_fill.channel(Magick::AlphaChannel); + line1_text_fill.morphology(Magick::EdgeOutMorphology, "Octagon:10"); + line1_text_fill.backgroundColor("gray"); + line1_text_fill.alphaChannel(Magick::ShapeAlphaChannel); + line1_text.composite(line1_text_fill, Magick::CenterGravity, + Magick::DstOverCompositeOp); + image.composite(line1_text, Geometry("+0-250"), Magick::OverCompositeOp); + } + + if (line3 != "") { + line3_text.backgroundColor("none"); + line3_text.fontPointsize(64); + line3_text.textGravity(Magick::CenterGravity); + line3_text.font("Comic Sans MS"); + line3_text.read("pango:" + line3 + ""); + line3_text.extent(Geometry("1260x859+0+0"), Magick::CenterGravity); + Image line3_text_fill = line3_text; + line3_text_fill.channel(Magick::AlphaChannel); + line3_text_fill.morphology(Magick::EdgeOutMorphology, "Octagon:10"); + line3_text_fill.backgroundColor("gray"); + line3_text_fill.alphaChannel(Magick::ShapeAlphaChannel); + line3_text.composite(line3_text_fill, Magick::CenterGravity, + Magick::DstOverCompositeOp); + image.composite(line3_text, Geometry("+0+50"), Magick::OverCompositeOp); + } + + image.magick("PNG"); + image.write(&blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", "png"); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - if (line3 != "") { - line3_text.backgroundColor("none"); - line3_text.fontPointsize(64); - line3_text.textGravity(Magick::CenterGravity); - line3_text.font("Comic Sans MS"); - line3_text.read("pango:" + line3 + ""); - line3_text.extent(Geometry("1260x859+0+0"), Magick::CenterGravity); - Image line3_text_fill = line3_text; - line3_text_fill.channel(Magick::AlphaChannel); - line3_text_fill.morphology(Magick::EdgeOutMorphology, "Octagon:10"); - line3_text_fill.backgroundColor("gray"); - line3_text_fill.alphaChannel(Magick::ShapeAlphaChannel); - line3_text.composite(line3_text_fill, Magick::CenterGravity, - Magick::DstOverCompositeOp); - image.composite(line3_text, Geometry("+0+50"), Magick::OverCompositeOp); - } - - image.magick("PNG"); - image.write(&blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", "png"); - return result; } \ No newline at end of file diff --git a/natives/reverse.cc b/natives/reverse.cc index f569ae7..1ace38b 100644 --- a/natives/reverse.cc +++ b/natives/reverse.cc @@ -9,43 +9,47 @@ using namespace Magick; Napi::Value Reverse(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - bool soos = - obj.Has("soos") ? obj.Get("soos").As().Value() : false; - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + bool soos = + obj.Has("soos") ? obj.Get("soos").As().Value() : false; + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); - if (soos) { - list copy = coalesced; - copy.reverse(); - coalesced.insert(coalesced.end(), copy.begin(), copy.end()); - } else { - coalesced.reverse(); + if (soos) { + list copy = coalesced; + copy.reverse(); + coalesced.insert(coalesced.end(), copy.begin(), copy.end()); + } else { + coalesced.reverse(); + } + + for_each(coalesced.begin(), coalesced.end(), magickImage("GIF")); + + optimizeTransparency(coalesced.begin(), coalesced.end()); + + for (Image &image : coalesced) { + image.quantizeDither(false); + image.quantize(); + if (delay != 0) image.animationDelay(delay); + } + + writeImages(coalesced.begin(), coalesced.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", "gif"); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - for_each(coalesced.begin(), coalesced.end(), magickImage("GIF")); - - optimizeTransparency(coalesced.begin(), coalesced.end()); - - for (Image &image : coalesced) { - image.quantizeDither(false); - image.quantize(); - if (delay != 0) image.animationDelay(delay); - } - - writeImages(coalesced.begin(), coalesced.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", "gif"); - return result; } \ No newline at end of file diff --git a/natives/scott.cc b/natives/scott.cc index cca5f37..978a7d5 100644 --- a/natives/scott.cc +++ b/natives/scott.cc @@ -9,52 +9,56 @@ using namespace Magick; Napi::Value Scott(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - Image watermark; - readImages(&frames, path); - watermark.read("./assets/images/scott.png"); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list mid; + Image watermark; + readImages(&frames, path); + watermark.read("./assets/images/scott.png"); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - Image watermark_new = watermark; - image.virtualPixelMethod(Magick::TransparentVirtualPixelMethod); - image.backgroundColor("none"); - image.scale(Geometry("415x234!")); - double arguments[16] = {0, 0, 129, 187, 415, 0, 517, 182, - 415, 234, 517, 465, 0, 234, 132, 418}; - image.distort(Magick::PerspectiveDistortion, 16, arguments, true); - image.extent(Geometry("864x481"), Magick::CenterGravity); - watermark_new.composite(image, Geometry("-110+83"), - Magick::OverCompositeOp); - watermark_new.magick(type); - watermark_new.animationDelay(delay == 0 ? image.animationDelay() : delay); - mid.push_back(watermark_new); - } - - optimizeTransparency(mid.begin(), mid.end()); - - if (type == "gif") { - for (Image &image : mid) { - image.quantizeDitherMethod(FloydSteinbergDitherMethod); - image.quantize(); + for (Image &image : coalesced) { + Image watermark_new = watermark; + image.virtualPixelMethod(Magick::TransparentVirtualPixelMethod); + image.backgroundColor("none"); + image.scale(Geometry("415x234!")); + double arguments[16] = {0, 0, 129, 187, 415, 0, 517, 182, + 415, 234, 517, 465, 0, 234, 132, 418}; + image.distort(Magick::PerspectiveDistortion, 16, arguments, true); + image.extent(Geometry("864x481"), Magick::CenterGravity); + watermark_new.composite(image, Geometry("-110+83"), + Magick::OverCompositeOp); + watermark_new.magick(type); + watermark_new.animationDelay(delay == 0 ? image.animationDelay() : delay); + mid.push_back(watermark_new); } + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDitherMethod(FloydSteinbergDitherMethod); + image.quantize(); + } + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/sonic.cc b/natives/sonic.cc index 4253786..c867ebe 100644 --- a/natives/sonic.cc +++ b/natives/sonic.cc @@ -9,28 +9,32 @@ using namespace Magick; Napi::Value Sonic(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string text = obj.Get("text").As().Utf8Value(); + try { + Napi::Object obj = info[0].As(); + string text = obj.Get("text").As().Utf8Value(); - Blob blob; + Blob blob; - Image image; - Image text_image; - text_image.backgroundColor("none"); - text_image.fontPointsize(72); - text_image.textGravity(Magick::CenterGravity); - text_image.font("Bitstream Vera Sans"); - text_image.read("pango:" + text + ""); - text_image.resize(Geometry(474, 332)); - text_image.extent(Geometry("1024x538-435-145"), Magick::CenterGravity); - image.read("./assets/images/sonic.jpg"); - image.composite(text_image, Geometry("+160+10"), Magick::OverCompositeOp); - image.magick("PNG"); - image.write(&blob); + Image image; + Image text_image; + text_image.backgroundColor("none"); + text_image.fontPointsize(72); + text_image.textGravity(Magick::CenterGravity); + text_image.font("Bitstream Vera Sans"); + text_image.read("pango:" + text + ""); + text_image.resize(Geometry(474, 332)); + text_image.extent(Geometry("1024x538-435-145"), Magick::CenterGravity); + image.read("./assets/images/sonic.jpg"); + image.composite(text_image, Geometry("+160+10"), Magick::OverCompositeOp); + image.magick("PNG"); + image.write(&blob); - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", "png"); - return result; + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", "png"); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); + } } \ No newline at end of file diff --git a/natives/speed.cc b/natives/speed.cc index b0a28f3..8581e05 100644 --- a/natives/speed.cc +++ b/natives/speed.cc @@ -9,70 +9,76 @@ using namespace Magick; Napi::Value Speed(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - bool slow = - obj.Has("slow") ? obj.Get("slow").As().Value() : false; - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - int speed = - obj.Has("speed") ? obj.Get("speed").As().Int32Value() : 2; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + bool slow = + obj.Has("slow") ? obj.Get("slow").As().Value() : false; + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + int speed = + obj.Has("speed") ? obj.Get("speed").As().Int32Value() : 2; - Blob blob; + Blob blob; - list frames; - readImages(&frames, path); + list frames; + readImages(&frames, path); - // if passed a delay, use that. otherwise use the average frame delay. - if (delay == 0) { - vector old_delays; - bool removeFrames = false; - for (Image &image : frames) { - int animation_delay = image.animationDelay(); - old_delays.push_back(animation_delay); - } - - for (Image &image : frames) { - int old_delay = image.animationDelay(); - int new_delay = slow ? old_delay * speed : old_delay / speed; - if (!slow && new_delay <= 1) { - removeFrames = true; - break; - } - image.animationDelay(new_delay); - } - - if (removeFrames) { - for (list::iterator i = frames.begin(); i != frames.end(); ++i) { - int index = distance(frames.begin(), i); - i->animationDelay(old_delays[index]); + // if passed a delay, use that. otherwise use the average frame delay. + if (delay == 0) { + vector old_delays; + bool removeFrames = false; + for (Image &image : frames) { + int animation_delay = image.animationDelay(); + old_delays.push_back(animation_delay); } - for (int i = 0; i < speed - 1; ++i) { - frames.remove_if( - [counter = 0](const auto x) mutable { return ++counter % 2 == 0; }); + for (Image &image : frames) { + int old_delay = image.animationDelay(); + int new_delay = slow ? old_delay * speed : old_delay / speed; + if (!slow && new_delay <= 1) { + removeFrames = true; + break; + } + image.animationDelay(new_delay); } - } - } else { - int new_delay = slow ? delay * speed : delay / speed; - if (!slow && new_delay <= 1) { - for (int i = 0; i < speed - 1; ++i) { - frames.remove_if( - [counter = 0](const auto x) mutable { return ++counter % 2 == 0; }); + + if (removeFrames) { + for (list::iterator i = frames.begin(); i != frames.end(); ++i) { + int index = distance(frames.begin(), i); + i->animationDelay(old_delays[index]); + } + + for (int i = 0; i < speed - 1; ++i) { + frames.remove_if([counter = 0](const auto x) mutable { + return ++counter % 2 == 0; + }); + } } } else { - for_each(frames.begin(), frames.end(), animationDelayImage(new_delay)); + int new_delay = slow ? delay * speed : delay / speed; + if (!slow && new_delay <= 1) { + for (int i = 0; i < speed - 1; ++i) { + frames.remove_if([counter = 0](const auto x) mutable { + return ++counter % 2 == 0; + }); + } + } else { + for_each(frames.begin(), frames.end(), animationDelayImage(new_delay)); + } } + + for_each(frames.begin(), frames.end(), magickImage(type)); + + writeImages(frames.begin(), frames.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - for_each(frames.begin(), frames.end(), magickImage(type)); - - writeImages(frames.begin(), frames.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/spin.cc b/natives/spin.cc index b356536..caf6854 100644 --- a/natives/spin.cc +++ b/natives/spin.cc @@ -9,59 +9,63 @@ using namespace Magick; Napi::Value Spin(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list mid; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); - if (type != "gif") { - list::iterator it = coalesced.begin(); - for (int i = 0; i < 29; ++i) { - coalesced.push_back(*it); + if (type != "gif") { + list::iterator it = coalesced.begin(); + for (int i = 0; i < 29; ++i) { + coalesced.push_back(*it); + } } + + int i = 0; + for (Image &image : coalesced) { + image.virtualPixelMethod(Magick::TransparentVirtualPixelMethod); + image.scale(Geometry("256x256")); + image.alphaChannel(Magick::SetAlphaChannel); + double rotation[1] = {360 * i / coalesced.size()}; + image.distort(Magick::ScaleRotateTranslateDistortion, 1, rotation); + image.magick("GIF"); + mid.push_back(image); + i++; + } + + for_each(mid.begin(), mid.end(), + gifDisposeMethodImage(Magick::BackgroundDispose)); + + optimizeTransparency(mid.begin(), mid.end()); + if (delay != 0) { + for_each(mid.begin(), mid.end(), animationDelayImage(delay)); + } else if (type != "gif") { + for_each(mid.begin(), mid.end(), animationDelayImage(5)); + } + + for (Image &image : mid) { + image.quantizeDitherMethod(FloydSteinbergDitherMethod); + image.quantize(); + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", "gif"); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - int i = 0; - for (Image &image : coalesced) { - image.virtualPixelMethod(Magick::TransparentVirtualPixelMethod); - image.scale(Geometry("256x256")); - image.alphaChannel(Magick::SetAlphaChannel); - double rotation[1] = {360 * i / coalesced.size()}; - image.distort(Magick::ScaleRotateTranslateDistortion, 1, rotation); - image.magick("GIF"); - mid.push_back(image); - i++; - } - - for_each(mid.begin(), mid.end(), - gifDisposeMethodImage(Magick::BackgroundDispose)); - - optimizeTransparency(mid.begin(), mid.end()); - if (delay != 0) { - for_each(mid.begin(), mid.end(), animationDelayImage(delay)); - } else if (type != "gif") { - for_each(mid.begin(), mid.end(), animationDelayImage(5)); - } - - for (Image &image : mid) { - image.quantizeDitherMethod(FloydSteinbergDitherMethod); - image.quantize(); - } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", "gif"); - return result; } \ No newline at end of file diff --git a/natives/swirl.cc b/natives/swirl.cc index edbf559..e575813 100644 --- a/natives/swirl.cc +++ b/natives/swirl.cc @@ -9,41 +9,45 @@ using namespace Magick; Napi::Value Swirl(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list mid; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - image.swirl(180); - image.magick(type); - mid.push_back(image); - } - - optimizeTransparency(mid.begin(), mid.end()); - - if (type == "gif") { - for (Image &image : mid) { - image.quantizeDither(false); - image.quantize(); - if (delay != 0) image.animationDelay(delay); + for (Image &image : coalesced) { + image.swirl(180); + image.magick(type); + mid.push_back(image); } + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDither(false); + image.quantize(); + if (delay != 0) image.animationDelay(delay); + } + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/tile.cc b/natives/tile.cc index 63a839b..24c03ec 100644 --- a/natives/tile.cc +++ b/natives/tile.cc @@ -9,55 +9,59 @@ using namespace Magick; Napi::Value Tile(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list mid; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - list duplicated; - Image appended; - list montage; - Image frame; - image.magick(type); - for (int i = 0; i < 5; ++i) { - duplicated.push_back(image); + for (Image &image : coalesced) { + list duplicated; + Image appended; + list montage; + Image frame; + image.magick(type); + for (int i = 0; i < 5; ++i) { + duplicated.push_back(image); + } + appendImages(&appended, duplicated.begin(), duplicated.end()); + appended.repage(); + for (int i = 0; i < 5; ++i) { + montage.push_back(appended); + } + appendImages(&frame, montage.begin(), montage.end(), true); + frame.repage(); + frame.scale(Geometry("800x800>")); + frame.animationDelay(delay == 0 ? image.animationDelay() : delay); + mid.push_back(frame); } - appendImages(&appended, duplicated.begin(), duplicated.end()); - appended.repage(); - for (int i = 0; i < 5; ++i) { - montage.push_back(appended); + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDitherMethod(FloydSteinbergDitherMethod); + image.quantize(); + } } - appendImages(&frame, montage.begin(), montage.end(), true); - frame.repage(); - frame.scale(Geometry("800x800>")); - frame.animationDelay(delay == 0 ? image.animationDelay() : delay); - mid.push_back(frame); + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - optimizeTransparency(mid.begin(), mid.end()); - - if (type == "gif") { - for (Image &image : mid) { - image.quantizeDitherMethod(FloydSteinbergDitherMethod); - image.quantize(); - } - } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/trump.cc b/natives/trump.cc index 59c6694..73febe6 100644 --- a/natives/trump.cc +++ b/natives/trump.cc @@ -9,52 +9,56 @@ using namespace Magick; Napi::Value Trump(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - Image watermark; - readImages(&frames, path); - watermark.read("./assets/images/trump.png"); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list mid; + Image watermark; + readImages(&frames, path); + watermark.read("./assets/images/trump.png"); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - Image watermark_new = watermark; - image.virtualPixelMethod(Magick::TransparentVirtualPixelMethod); - image.backgroundColor("none"); - image.scale(Geometry("365x179!")); - double arguments[16] = {0, 0, 207, 268, 365, 0, 548, 271, - 365, 179, 558, 450, 0, 179, 193, 450}; - image.distort(Magick::PerspectiveDistortion, 16, arguments, true); - image.extent(Geometry("800x450"), Magick::CenterGravity); - watermark_new.composite(image, Geometry("-25+134"), - Magick::DstOverCompositeOp); - watermark_new.magick(type); - watermark_new.animationDelay(delay == 0 ? image.animationDelay() : delay); - mid.push_back(watermark_new); - } - - optimizeTransparency(mid.begin(), mid.end()); - - if (type == "gif") { - for (Image &image : mid) { - image.quantizeDitherMethod(FloydSteinbergDitherMethod); - image.quantize(); + for (Image &image : coalesced) { + Image watermark_new = watermark; + image.virtualPixelMethod(Magick::TransparentVirtualPixelMethod); + image.backgroundColor("none"); + image.scale(Geometry("365x179!")); + double arguments[16] = {0, 0, 207, 268, 365, 0, 548, 271, + 365, 179, 558, 450, 0, 179, 193, 450}; + image.distort(Magick::PerspectiveDistortion, 16, arguments, true); + image.extent(Geometry("800x450"), Magick::CenterGravity); + watermark_new.composite(image, Geometry("-25+134"), + Magick::DstOverCompositeOp); + watermark_new.magick(type); + watermark_new.animationDelay(delay == 0 ? image.animationDelay() : delay); + mid.push_back(watermark_new); } + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDitherMethod(FloydSteinbergDitherMethod); + image.quantize(); + } + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/wall.cc b/natives/wall.cc index 2c45d47..66bb13a 100644 --- a/natives/wall.cc +++ b/natives/wall.cc @@ -9,49 +9,53 @@ using namespace Magick; Napi::Value Wall(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - readImages(&frames, path); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list mid; + readImages(&frames, path); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - image.resize(Geometry("128x128")); - image.virtualPixelMethod(Magick::TileVirtualPixelMethod); - image.matteColor("none"); - image.backgroundColor("none"); - image.scale(Geometry("512x512")); - double arguments[16] = {0, 0, 57, 42, 0, 128, 63, 130, - 128, 0, 140, 60, 128, 128, 140, 140}; - image.distort(Magick::PerspectiveDistortion, 16, arguments); - image.scale(Geometry("800x800>")); - image.magick(type); - mid.push_back(image); - } - - optimizeTransparency(mid.begin(), mid.end()); - - if (type == "gif") { - for (Image &image : mid) { - image.quantizeDitherMethod(FloydSteinbergDitherMethod); - image.quantize(); - if (delay != 0) image.animationDelay(delay); + for (Image &image : coalesced) { + image.resize(Geometry("128x128")); + image.virtualPixelMethod(Magick::TileVirtualPixelMethod); + image.matteColor("none"); + image.backgroundColor("none"); + image.scale(Geometry("512x512")); + double arguments[16] = {0, 0, 57, 42, 0, 128, 63, 130, + 128, 0, 140, 60, 128, 128, 140, 140}; + image.distort(Magick::PerspectiveDistortion, 16, arguments); + image.scale(Geometry("800x800>")); + image.magick(type); + mid.push_back(image); } + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDitherMethod(FloydSteinbergDitherMethod); + image.quantize(); + if (delay != 0) image.animationDelay(delay); + } + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/watermark.cc b/natives/watermark.cc index 84ca1d1..d86ad2a 100644 --- a/natives/watermark.cc +++ b/natives/watermark.cc @@ -10,74 +10,80 @@ using namespace Magick; Napi::Value Watermark(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string water = obj.Get("water").As().Utf8Value(); - int gravity = obj.Get("gravity").As().Int32Value(); - bool resize = - obj.Has("resize") ? obj.Get("resize").As().Value() : false; - bool append = - obj.Has("append") ? obj.Get("append").As().Value() : false; - bool mc = obj.Has("mc") ? obj.Get("mc").As().Value() : false; - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string water = obj.Get("water").As().Utf8Value(); + int gravity = obj.Get("gravity").As().Int32Value(); + bool resize = obj.Has("resize") + ? obj.Get("resize").As().Value() + : false; + bool append = obj.Has("append") + ? obj.Get("append").As().Value() + : false; + bool mc = obj.Has("mc") ? obj.Get("mc").As().Value() : false; + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - Image watermark; - readImages(&frames, path); - watermark.read(water); - if (resize && append) { - string query(to_string(frames.front().baseColumns()) + "x"); - watermark.scale(Geometry(query)); - } else if (resize) { - string query("x" + to_string(frames.front().baseRows())); - watermark.scale(Geometry(query)); - } - coalesceImages(&coalesced, frames.begin(), frames.end()); - - for (Image &image : coalesced) { - Image final; - if (append) { - list to_append; - to_append.push_back(image); - to_append.push_back(watermark); - appendImages(&final, to_append.begin(), to_append.end(), true); - final.repage(); - } else if (mc) { - image.backgroundColor("white"); - image.extent(Geometry(image.columns(), image.rows() + 15)); - image.composite(watermark, Magick::GravityType(gravity), - Magick::OverCompositeOp); - final = image; - } else { - image.composite(watermark, Magick::GravityType(gravity), - Magick::OverCompositeOp); - final = image; + list frames; + list coalesced; + list mid; + Image watermark; + readImages(&frames, path); + watermark.read(water); + if (resize && append) { + string query(to_string(frames.front().baseColumns()) + "x"); + watermark.scale(Geometry(query)); + } else if (resize) { + string query("x" + to_string(frames.front().baseRows())); + watermark.scale(Geometry(query)); } - image.magick(type); - final.animationDelay(delay == 0 ? image.animationDelay() : delay); - mid.push_back(final); - } + coalesceImages(&coalesced, frames.begin(), frames.end()); - optimizeTransparency(mid.begin(), mid.end()); - - if (type == "gif") { - for (Image &image : mid) { - image.quantizeDitherMethod(FloydSteinbergDitherMethod); - image.quantize(); + for (Image &image : coalesced) { + Image final; + if (append) { + list to_append; + to_append.push_back(image); + to_append.push_back(watermark); + appendImages(&final, to_append.begin(), to_append.end(), true); + final.repage(); + } else if (mc) { + image.backgroundColor("white"); + image.extent(Geometry(image.columns(), image.rows() + 15)); + image.composite(watermark, Magick::GravityType(gravity), + Magick::OverCompositeOp); + final = image; + } else { + image.composite(watermark, Magick::GravityType(gravity), + Magick::OverCompositeOp); + final = image; + } + image.magick(type); + final.animationDelay(delay == 0 ? image.animationDelay() : delay); + mid.push_back(final); } + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDitherMethod(FloydSteinbergDitherMethod); + image.quantize(); + } + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file diff --git a/natives/wdt.cc b/natives/wdt.cc index 0bde2fa..7474537 100644 --- a/natives/wdt.cc +++ b/natives/wdt.cc @@ -9,46 +9,50 @@ using namespace Magick; Napi::Value Wdt(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); - Napi::Object obj = info[0].As(); - string path = obj.Get("path").As().Utf8Value(); - string type = obj.Get("type").As().Utf8Value(); - int delay = - obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; + try { + Napi::Object obj = info[0].As(); + string path = obj.Get("path").As().Utf8Value(); + string type = obj.Get("type").As().Utf8Value(); + int delay = + obj.Has("delay") ? obj.Get("delay").As().Int32Value() : 0; - Blob blob; + Blob blob; - list frames; - list coalesced; - list mid; - Image watermark; - readImages(&frames, path); - watermark.read("./assets/images/whodidthis.png"); - coalesceImages(&coalesced, frames.begin(), frames.end()); + list frames; + list coalesced; + list mid; + Image watermark; + readImages(&frames, path); + watermark.read("./assets/images/whodidthis.png"); + coalesceImages(&coalesced, frames.begin(), frames.end()); - for (Image &image : coalesced) { - Image watermark_new = watermark; - image.scale(Geometry("374x374>")); - watermark_new.composite(image, Magick::CenterGravity, - Magick::OverCompositeOp); - watermark_new.magick(type); - watermark_new.animationDelay(delay == 0 ? image.animationDelay() : delay); - mid.push_back(watermark_new); - } - - optimizeTransparency(mid.begin(), mid.end()); - - if (type == "gif") { - for (Image &image : mid) { - image.quantizeDitherMethod(FloydSteinbergDitherMethod); - image.quantize(); + for (Image &image : coalesced) { + Image watermark_new = watermark; + image.scale(Geometry("374x374>")); + watermark_new.composite(image, Magick::CenterGravity, + Magick::OverCompositeOp); + watermark_new.magick(type); + watermark_new.animationDelay(delay == 0 ? image.animationDelay() : delay); + mid.push_back(watermark_new); } + + optimizeTransparency(mid.begin(), mid.end()); + + if (type == "gif") { + for (Image &image : mid) { + image.quantizeDitherMethod(FloydSteinbergDitherMethod); + image.quantize(); + } + } + + writeImages(mid.begin(), mid.end(), &blob); + + Napi::Object result = Napi::Object::New(env); + result.Set("data", Napi::Buffer::Copy(env, (char *)blob.data(), + blob.length())); + result.Set("type", type); + return result; + } catch (std::exception const &err) { + throw Napi::Error::New(env, err.what()); } - - writeImages(mid.begin(), mid.end(), &blob); - - Napi::Object result = Napi::Object::New(env); - result.Set("data", - Napi::Buffer::Copy(env, (char *)blob.data(), blob.length())); - result.Set("type", type); - return result; } \ No newline at end of file

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