diff --git a/natives/gamexplain.cc b/natives/gamexplain.cc new file mode 100644 index 0000000..a04fd94 --- /dev/null +++ b/natives/gamexplain.cc @@ -0,0 +1,61 @@ +#include +#include +#include + +using namespace std; +using namespace Magick; + +class GamexplainWorker : public Napi::AsyncWorker { + public: + GamexplainWorker(Napi::Function& callback, string in_path, string type, int delay) + : Napi::AsyncWorker(callback), in_path(in_path), type(type), delay(delay) {} + ~GamexplainWorker() {} + + void Execute() { + list frames; + list coalesced; + list mid; + list result; + Image watermark; + readImages(&frames, in_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); + } + + optimizeImageLayers(&result, mid.begin(), mid.end()); + if (delay != 0) for_each(result.begin(), result.end(), animationDelayImage(delay)); + writeImages(result.begin(), result.end(), &blob); + } + + void OnOK() { + Callback().Call({Env().Undefined(), Napi::Buffer::Copy(Env(), (char *)blob.data(), blob.length())}); + } + + private: + string in_path, type; + int delay, wordlength, i, n; + size_t bytes, type_size; + Blob blob; +}; + +Napi::Value Gamexplain(const Napi::CallbackInfo &info) +{ + Napi::Env env = info.Env(); + + string in_path = info[0].As().Utf8Value(); + string type = info[1].As().Utf8Value(); + int delay = info[2].As().Int32Value(); + Napi::Function cb = info[3].As(); + + GamexplainWorker* blurWorker = new GamexplainWorker(cb, in_path, type, delay); + blurWorker->Queue(); + return env.Undefined(); +} \ No newline at end of file diff --git a/natives/gamexplain.h b/natives/gamexplain.h new file mode 100644 index 0000000..4ed98a9 --- /dev/null +++ b/natives/gamexplain.h @@ -0,0 +1,8 @@ +#ifndef ESMBOT_NATIVES_GAMEXPLAIN_H_ +#define ESMBOT_NATIVES_GAMEXPLAIN_H_ + +#include + +Napi::Value Gamexplain(const Napi::CallbackInfo& info); + +#endif \ No newline at end of file