Pass an image buffer into the native functions instead of a URL

This commit is contained in:
TheEssem 2021-05-11 14:25:02 -05:00
parent 666f9b9912
commit 61758fa3bb
No known key found for this signature in database
GPG key ID: A3F9F02129092FCA
33 changed files with 81 additions and 75 deletions

View file

@ -11,7 +11,7 @@ Napi::Value Blur(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
bool sharp = obj.Get("sharp").As<Napi::Boolean>().Value(); bool sharp = obj.Get("sharp").As<Napi::Boolean>().Value();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
@ -21,7 +21,7 @@ Napi::Value Blur(const Napi::CallbackInfo &info) {
list<Image> frames; list<Image> frames;
list<Image> coalesced; list<Image> coalesced;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
if (sharp) { if (sharp) {

View file

@ -11,7 +11,7 @@ Napi::Value Blurple(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0; obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0;
@ -21,7 +21,7 @@ Napi::Value Blurple(const Napi::CallbackInfo &info) {
list<Image> frames; list<Image> frames;
list<Image> coalesced; list<Image> coalesced;
list<Image> blurpled; list<Image> blurpled;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
for (Image &image : coalesced) { for (Image &image : coalesced) {

View file

@ -11,7 +11,7 @@ Napi::Value Caption(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string caption = obj.Get("caption").As<Napi::String>().Utf8Value(); string caption = obj.Get("caption").As<Napi::String>().Utf8Value();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
@ -22,7 +22,7 @@ Napi::Value Caption(const Napi::CallbackInfo &info) {
list<Image> frames; list<Image> frames;
list<Image> coalesced; list<Image> coalesced;
list<Image> captioned; list<Image> captioned;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
size_t width = frames.front().baseColumns(); size_t width = frames.front().baseColumns();
string query(to_string(width - ((width / 25) * 2)) + "x"); string query(to_string(width - ((width / 25) * 2)) + "x");

View file

@ -11,7 +11,7 @@ Napi::Value CaptionTwo(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string caption = obj.Get("caption").As<Napi::String>().Utf8Value(); string caption = obj.Get("caption").As<Napi::String>().Utf8Value();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
@ -23,7 +23,7 @@ Napi::Value CaptionTwo(const Napi::CallbackInfo &info) {
list<Image> coalesced; list<Image> coalesced;
list<Image> captioned; list<Image> captioned;
Blob caption_blob; Blob caption_blob;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
size_t width = frames.front().baseColumns(); size_t width = frames.front().baseColumns();
string query(to_string(width - ((width / 25) * 2)) + "x"); string query(to_string(width - ((width / 25) * 2)) + "x");

View file

@ -11,7 +11,7 @@ Napi::Value Circle(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0; obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0;
@ -21,7 +21,7 @@ Napi::Value Circle(const Napi::CallbackInfo &info) {
list<Image> frames; list<Image> frames;
list<Image> coalesced; list<Image> coalesced;
list<Image> blurred; list<Image> blurred;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
for (Image &image : coalesced) { for (Image &image : coalesced) {

View file

@ -11,7 +11,7 @@ Napi::Value Crop(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0; obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0;
@ -21,7 +21,7 @@ Napi::Value Crop(const Napi::CallbackInfo &info) {
list<Image> frames; list<Image> frames;
list<Image> coalesced; list<Image> coalesced;
list<Image> mid; list<Image> mid;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
for (Image &image : coalesced) { for (Image &image : coalesced) {

View file

@ -11,7 +11,7 @@ Napi::Value Explode(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
int amount = obj.Get("amount").As<Napi::Number>().Int32Value(); int amount = obj.Get("amount").As<Napi::Number>().Int32Value();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
@ -22,7 +22,7 @@ Napi::Value Explode(const Napi::CallbackInfo &info) {
list<Image> frames; list<Image> frames;
list<Image> coalesced; list<Image> coalesced;
list<Image> blurred; list<Image> blurred;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
for (Image &image : coalesced) { for (Image &image : coalesced) {

View file

@ -11,7 +11,7 @@ Napi::Value Flag(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string overlay = obj.Get("overlay").As<Napi::String>().Utf8Value(); string overlay = obj.Get("overlay").As<Napi::String>().Utf8Value();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
@ -23,7 +23,7 @@ Napi::Value Flag(const Napi::CallbackInfo &info) {
list<Image> coalesced; list<Image> coalesced;
list<Image> mid; list<Image> mid;
Image watermark; Image watermark;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
watermark.read(overlay); watermark.read(overlay);
watermark.alphaChannel(Magick::SetAlphaChannel); watermark.alphaChannel(Magick::SetAlphaChannel);
watermark.evaluate(Magick::AlphaChannel, Magick::MultiplyEvaluateOperator, watermark.evaluate(Magick::AlphaChannel, Magick::MultiplyEvaluateOperator,

View file

@ -11,7 +11,7 @@ Napi::Value Flip(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
bool flop = bool flop =
obj.Has("flop") ? obj.Get("flop").As<Napi::Boolean>().Value() : false; obj.Has("flop") ? obj.Get("flop").As<Napi::Boolean>().Value() : false;
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
@ -23,7 +23,7 @@ Napi::Value Flip(const Napi::CallbackInfo &info) {
list<Image> frames; list<Image> frames;
list<Image> coalesced; list<Image> coalesced;
list<Image> mid; list<Image> mid;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
for (Image &image : coalesced) { for (Image &image : coalesced) {

View file

@ -11,7 +11,7 @@ Napi::Value Freeze(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
bool loop = bool loop =
obj.Has("loop") ? obj.Get("loop").As<Napi::Boolean>().Value() : false; obj.Has("loop") ? obj.Get("loop").As<Napi::Boolean>().Value() : false;
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
@ -24,7 +24,7 @@ Napi::Value Freeze(const Napi::CallbackInfo &info) {
Blob blob; Blob blob;
list<Image> frames; list<Image> frames;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
if (frame >= 0 && !loop) { if (frame >= 0 && !loop) {
size_t frameSize = frames.size(); size_t frameSize = frames.size();

View file

@ -11,7 +11,7 @@ Napi::Value Gamexplain(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0; obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0;
@ -22,7 +22,7 @@ Napi::Value Gamexplain(const Napi::CallbackInfo &info) {
list<Image> coalesced; list<Image> coalesced;
list<Image> mid; list<Image> mid;
Image watermark; Image watermark;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
watermark.read("./assets/images/gamexplain.png"); watermark.read("./assets/images/gamexplain.png");
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());

View file

@ -11,7 +11,7 @@ Napi::Value Globe(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0; obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0;
@ -23,7 +23,7 @@ Napi::Value Globe(const Napi::CallbackInfo &info) {
list<Image> mid; list<Image> mid;
Image distort; Image distort;
Image overlay; Image overlay;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
distort.read("./assets/images/spheremap.png"); distort.read("./assets/images/spheremap.png");
overlay.read("./assets/images/sphere_overlay.png"); overlay.read("./assets/images/sphere_overlay.png");
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());

View file

@ -11,7 +11,7 @@ Napi::Value Invert(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0; obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0;
@ -21,7 +21,7 @@ Napi::Value Invert(const Napi::CallbackInfo &info) {
list<Image> frames; list<Image> frames;
list<Image> coalesced; list<Image> coalesced;
list<Image> mid; list<Image> mid;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
for_each(coalesced.begin(), coalesced.end(), negateImage()); for_each(coalesced.begin(), coalesced.end(), negateImage());

View file

@ -11,12 +11,12 @@ Napi::Value Jpeg(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
Blob blob; Blob blob;
Image image; Image image;
image.read(path); image.read(Blob(data.Data(), data.Length()));
image.quality(1); image.quality(1);
image.magick("JPEG"); image.magick("JPEG");
image.write(&blob); image.write(&blob);

View file

@ -11,7 +11,7 @@ Napi::Value Leak(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0; obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0;
@ -22,7 +22,7 @@ Napi::Value Leak(const Napi::CallbackInfo &info) {
list<Image> coalesced; list<Image> coalesced;
list<Image> mid; list<Image> mid;
Image watermark; Image watermark;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
watermark.read("./assets/images/leak.png"); watermark.read("./assets/images/leak.png");
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());

View file

@ -11,7 +11,7 @@ Napi::Value Magik(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0; obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0;
@ -21,7 +21,7 @@ Napi::Value Magik(const Napi::CallbackInfo &info) {
list<Image> frames; list<Image> frames;
list<Image> coalesced; list<Image> coalesced;
list<Image> blurred; list<Image> blurred;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
for (Image &image : coalesced) { for (Image &image : coalesced) {

View file

@ -11,7 +11,7 @@ Napi::Value Meme(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string top = obj.Get("top").As<Napi::String>().Utf8Value(); string top = obj.Get("top").As<Napi::String>().Utf8Value();
string bottom = obj.Get("bottom").As<Napi::String>().Utf8Value(); string bottom = obj.Get("bottom").As<Napi::String>().Utf8Value();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
@ -25,7 +25,7 @@ Napi::Value Meme(const Napi::CallbackInfo &info) {
list<Image> mid; list<Image> mid;
Image top_text; Image top_text;
Image bottom_text; Image bottom_text;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
for_each(coalesced.begin(), coalesced.end(), for_each(coalesced.begin(), coalesced.end(),
scaleImage(Geometry(600, 600))); scaleImage(Geometry(600, 600)));

View file

@ -11,7 +11,7 @@ Napi::Value Mirror(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
bool vertical = obj.Has("vertical") bool vertical = obj.Has("vertical")
? obj.Get("vertical").As<Napi::Boolean>().Value() ? obj.Get("vertical").As<Napi::Boolean>().Value()
: false; : false;
@ -27,7 +27,7 @@ Napi::Value Mirror(const Napi::CallbackInfo &info) {
list<Image> coalesced; list<Image> coalesced;
list<Image> mid; list<Image> mid;
MagickCore::GravityType gravity; MagickCore::GravityType gravity;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
if (vertical && first) { if (vertical && first) {

View file

@ -11,7 +11,7 @@ Napi::Value Motivate(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string top_text = obj.Get("top").As<Napi::String>().Utf8Value(); string top_text = obj.Get("top").As<Napi::String>().Utf8Value();
string bottom_text = obj.Get("bottom").As<Napi::String>().Utf8Value(); string bottom_text = obj.Get("bottom").As<Napi::String>().Utf8Value();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
@ -25,7 +25,7 @@ Napi::Value Motivate(const Napi::CallbackInfo &info) {
list<Image> mid; list<Image> mid;
Image top; Image top;
Image bottom; Image bottom;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
top.size(Geometry("600")); top.size(Geometry("600"));

View file

@ -10,7 +10,7 @@ Napi::Value Reddit(const Napi::CallbackInfo &info) {
Napi::Env env = info.Env(); Napi::Env env = info.Env();
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string text = obj.Get("caption").As<Napi::String>().Utf8Value(); string text = obj.Get("caption").As<Napi::String>().Utf8Value();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
@ -23,7 +23,7 @@ Napi::Value Reddit(const Napi::CallbackInfo &info) {
list<Image> mid; list<Image> mid;
Image watermark; Image watermark;
Image text_image; Image text_image;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
watermark.read("./assets/images/reddit.png"); watermark.read("./assets/images/reddit.png");
text_image.textGravity(Magick::WestGravity); text_image.textGravity(Magick::WestGravity);

View file

@ -11,7 +11,7 @@ Napi::Value Resize(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
bool stretch = obj.Has("stretch") bool stretch = obj.Has("stretch")
? obj.Get("stretch").As<Napi::Boolean>().Value() ? obj.Get("stretch").As<Napi::Boolean>().Value()
: false; : false;
@ -26,7 +26,7 @@ Napi::Value Resize(const Napi::CallbackInfo &info) {
list<Image> frames; list<Image> frames;
list<Image> coalesced; list<Image> coalesced;
list<Image> blurred; list<Image> blurred;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
for (Image &image : coalesced) { for (Image &image : coalesced) {

View file

@ -11,7 +11,7 @@ Napi::Value Reverse(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
bool soos = bool soos =
obj.Has("soos") ? obj.Get("soos").As<Napi::Boolean>().Value() : false; obj.Has("soos") ? obj.Get("soos").As<Napi::Boolean>().Value() : false;
int delay = int delay =
@ -21,7 +21,7 @@ Napi::Value Reverse(const Napi::CallbackInfo &info) {
list<Image> frames; list<Image> frames;
list<Image> coalesced; list<Image> coalesced;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
if (soos) { if (soos) {

View file

@ -11,7 +11,7 @@ Napi::Value Scott(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0; obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0;
@ -22,7 +22,7 @@ Napi::Value Scott(const Napi::CallbackInfo &info) {
list<Image> coalesced; list<Image> coalesced;
list<Image> mid; list<Image> mid;
Image watermark; Image watermark;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
watermark.read("./assets/images/scott.png"); watermark.read("./assets/images/scott.png");
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());

View file

@ -11,7 +11,7 @@ Napi::Value Speed(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
bool slow = bool slow =
obj.Has("slow") ? obj.Get("slow").As<Napi::Boolean>().Value() : false; obj.Has("slow") ? obj.Get("slow").As<Napi::Boolean>().Value() : false;
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
@ -23,7 +23,7 @@ Napi::Value Speed(const Napi::CallbackInfo &info) {
Blob blob; Blob blob;
list<Image> frames; list<Image> frames;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
// if passed a delay, use that. otherwise use the average frame delay. // if passed a delay, use that. otherwise use the average frame delay.
if (delay == 0) { if (delay == 0) {

View file

@ -11,7 +11,7 @@ Napi::Value Spin(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0; obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0;
@ -21,7 +21,7 @@ Napi::Value Spin(const Napi::CallbackInfo &info) {
list<Image> frames; list<Image> frames;
list<Image> coalesced; list<Image> coalesced;
list<Image> mid; list<Image> mid;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
if (type != "gif") { if (type != "gif") {

View file

@ -11,7 +11,7 @@ Napi::Value Swirl(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0; obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0;
@ -21,7 +21,7 @@ Napi::Value Swirl(const Napi::CallbackInfo &info) {
list<Image> frames; list<Image> frames;
list<Image> coalesced; list<Image> coalesced;
list<Image> mid; list<Image> mid;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
for (Image &image : coalesced) { for (Image &image : coalesced) {

View file

@ -11,7 +11,7 @@ Napi::Value Tile(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0; obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0;
@ -21,7 +21,7 @@ Napi::Value Tile(const Napi::CallbackInfo &info) {
list<Image> frames; list<Image> frames;
list<Image> coalesced; list<Image> coalesced;
list<Image> mid; list<Image> mid;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
for (Image &image : coalesced) { for (Image &image : coalesced) {

View file

@ -11,7 +11,7 @@ Napi::Value Trump(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0; obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0;
@ -22,7 +22,7 @@ Napi::Value Trump(const Napi::CallbackInfo &info) {
list<Image> coalesced; list<Image> coalesced;
list<Image> mid; list<Image> mid;
Image watermark; Image watermark;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
watermark.read("./assets/images/trump.png"); watermark.read("./assets/images/trump.png");
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());

View file

@ -34,7 +34,7 @@ Napi::Value Uncaption(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0; obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0;
@ -44,7 +44,7 @@ Napi::Value Uncaption(const Napi::CallbackInfo &info) {
list<Image> frames; list<Image> frames;
list<Image> coalesced; list<Image> coalesced;
list<Image> mid; list<Image> mid;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
Image firstImage = coalesced.front(); Image firstImage = coalesced.front();

View file

@ -11,7 +11,7 @@ Napi::Value Wall(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0; obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0;
@ -21,7 +21,7 @@ Napi::Value Wall(const Napi::CallbackInfo &info) {
list<Image> frames; list<Image> frames;
list<Image> coalesced; list<Image> coalesced;
list<Image> mid; list<Image> mid;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());
for (Image &image : coalesced) { for (Image &image : coalesced) {

View file

@ -12,7 +12,7 @@ Napi::Value Watermark(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string water = obj.Get("water").As<Napi::String>().Utf8Value(); string water = obj.Get("water").As<Napi::String>().Utf8Value();
int gravity = obj.Get("gravity").As<Napi::Number>().Int32Value(); int gravity = obj.Get("gravity").As<Napi::Number>().Int32Value();
bool resize = obj.Has("resize") bool resize = obj.Has("resize")
@ -32,7 +32,7 @@ Napi::Value Watermark(const Napi::CallbackInfo &info) {
list<Image> coalesced; list<Image> coalesced;
list<Image> mid; list<Image> mid;
Image watermark; Image watermark;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
watermark.read(water); watermark.read(water);
if (resize && append) { if (resize && append) {
string query(to_string(frames.front().baseColumns()) + "x"); string query(to_string(frames.front().baseColumns()) + "x");

View file

@ -11,7 +11,7 @@ Napi::Value Wdt(const Napi::CallbackInfo &info) {
try { try {
Napi::Object obj = info[0].As<Napi::Object>(); Napi::Object obj = info[0].As<Napi::Object>();
string path = obj.Get("path").As<Napi::String>().Utf8Value(); Napi::Buffer<char> data = obj.Get("data").As<Napi::Buffer<char>>();
string type = obj.Get("type").As<Napi::String>().Utf8Value(); string type = obj.Get("type").As<Napi::String>().Utf8Value();
int delay = int delay =
obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0; obj.Has("delay") ? obj.Get("delay").As<Napi::Number>().Int32Value() : 0;
@ -22,7 +22,7 @@ Napi::Value Wdt(const Napi::CallbackInfo &info) {
list<Image> coalesced; list<Image> coalesced;
list<Image> mid; list<Image> mid;
Image watermark; Image watermark;
readImages(&frames, path); readImages(&frames, Blob(data.Data(), data.Length()));
watermark.read("./assets/images/whodidthis.png"); watermark.read("./assets/images/whodidthis.png");
coalesceImages(&coalesced, frames.begin(), frames.end()); coalesceImages(&coalesced, frames.begin(), frames.end());

View file

@ -1,19 +1,24 @@
const magick = require("../build/Release/image.node"); const magick = require("../build/Release/image.node");
const { isMainThread, parentPort, workerData } = require("worker_threads"); const { isMainThread, parentPort, workerData } = require("worker_threads");
const fetch = require("node-fetch");
exports.run = object => { exports.run = object => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// If the image has a path, it must also have a type // If the image has a path, it must also have a type
let promise = new Promise((resolveTest) => { resolveTest(); }); // no-op
if (object.path) { if (object.path) {
if (object.type !== "image/gif" && object.onlyGIF) resolve({ if (object.type !== "image/gif" && object.onlyGIF) resolve({
buffer: Buffer.alloc(0), buffer: Buffer.alloc(0),
fileExtension: "nogif" fileExtension: "nogif"
}); });
promise = fetch(object.path).then(res => res.buffer());
} }
// Convert from a MIME type (e.g. "image/png") to something ImageMagick understands (e.g. "png"). // Convert from a MIME type (e.g. "image/png") to something ImageMagick understands (e.g. "png").
// Don't set `type` directly on the object we are passed as it will be read afterwards. // Don't set `type` directly on the object we are passed as it will be read afterwards.
// If no image type is given (say, the command generates its own image), make it a PNG. // If no image type is given (say, the command generates its own image), make it a PNG.
const fileExtension = object.type ? object.type.split("/")[1] : "png"; const fileExtension = object.type ? object.type.split("/")[1] : "png";
promise.then(buf => {
object.data = buf;
const objectWithFixedType = Object.assign({}, object, {type: fileExtension}); const objectWithFixedType = Object.assign({}, object, {type: fileExtension});
try { try {
const result = magick[object.cmd](objectWithFixedType); const result = magick[object.cmd](objectWithFixedType);
@ -26,6 +31,7 @@ exports.run = object => {
reject(e); reject(e);
} }
}); });
});
}; };
if (!isMainThread) { if (!isMainThread) {