A few tweaks
This commit is contained in:
parent
598c29ab17
commit
34c0ee14e0
|
@ -24,7 +24,7 @@ Napi::Value Caption(const Napi::CallbackInfo &info) {
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int size = width / 10;
|
int size = width / 10;
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
int textWidth = width - ((width / 25) * 2);
|
int textWidth = width - ((width / 25) * 2);
|
||||||
|
|
||||||
|
@ -49,14 +49,14 @@ Napi::Value Caption(const Napi::CallbackInfo &info) {
|
||||||
vector<VImage> img;
|
vector<VImage> img;
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage img_frame =
|
VImage img_frame =
|
||||||
type == "gif" ? in.crop(0, i * page_height, width, page_height) : in;
|
type == "gif" ? in.crop(0, i * pageHeight, width, pageHeight) : in;
|
||||||
VImage frame = captionImage.join(
|
VImage frame = captionImage.join(
|
||||||
img_frame, VIPS_DIRECTION_VERTICAL,
|
img_frame, VIPS_DIRECTION_VERTICAL,
|
||||||
VImage::option()->set("background", 0xffffff)->set("expand", true));
|
VImage::option()->set("background", 0xffffff)->set("expand", true));
|
||||||
img.push_back(frame);
|
img.push_back(frame);
|
||||||
}
|
}
|
||||||
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
||||||
final.set(VIPS_META_PAGE_HEIGHT, page_height + captionImage.height());
|
final.set(VIPS_META_PAGE_HEIGHT, pageHeight + captionImage.height());
|
||||||
|
|
||||||
void *buf;
|
void *buf;
|
||||||
size_t length;
|
size_t length;
|
||||||
|
|
|
@ -26,7 +26,7 @@ Napi::Value CaptionTwo(const Napi::CallbackInfo &info) {
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int size = width / 13;
|
int size = width / 13;
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
int textWidth = width - ((width / 25) * 2);
|
int textWidth = width - ((width / 25) * 2);
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ Napi::Value CaptionTwo(const Napi::CallbackInfo &info) {
|
||||||
vector<VImage> img;
|
vector<VImage> img;
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage img_frame =
|
VImage img_frame =
|
||||||
type == "gif" ? in.crop(0, i * page_height, width, page_height) : in;
|
type == "gif" ? in.crop(0, i * pageHeight, width, pageHeight) : in;
|
||||||
VImage frame =
|
VImage frame =
|
||||||
(top ? captionImage : img_frame)
|
(top ? captionImage : img_frame)
|
||||||
.join(top ? img_frame : captionImage, VIPS_DIRECTION_VERTICAL,
|
.join(top ? img_frame : captionImage, VIPS_DIRECTION_VERTICAL,
|
||||||
|
@ -60,7 +60,7 @@ Napi::Value CaptionTwo(const Napi::CallbackInfo &info) {
|
||||||
img.push_back(frame);
|
img.push_back(frame);
|
||||||
}
|
}
|
||||||
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
||||||
final.set(VIPS_META_PAGE_HEIGHT, page_height + captionImage.height());
|
final.set(VIPS_META_PAGE_HEIGHT, pageHeight + captionImage.height());
|
||||||
|
|
||||||
void *buf;
|
void *buf;
|
||||||
size_t length;
|
size_t length;
|
||||||
|
|
|
@ -21,14 +21,14 @@ Napi::Value Crop(const Napi::CallbackInfo &info) {
|
||||||
.colourspace(VIPS_INTERPRETATION_sRGB);
|
.colourspace(VIPS_INTERPRETATION_sRGB);
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
|
|
||||||
vector<VImage> img;
|
vector<VImage> img;
|
||||||
int finalHeight = 0;
|
int finalHeight = 0;
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage img_frame =
|
VImage img_frame =
|
||||||
type == "gif" ? in.crop(0, i * page_height, width, page_height) : in;
|
type == "gif" ? in.crop(0, i * pageHeight, width, pageHeight) : in;
|
||||||
int frameWidth = img_frame.width();
|
int frameWidth = img_frame.width();
|
||||||
int frameHeight = img_frame.height();
|
int frameHeight = img_frame.height();
|
||||||
bool widthOrHeight = frameWidth / frameHeight >= 1;
|
bool widthOrHeight = frameWidth / frameHeight >= 1;
|
||||||
|
|
|
@ -21,24 +21,49 @@ Napi::Value Deepfry(const Napi::CallbackInfo &info) {
|
||||||
VImage::new_from_buffer(data.Data(), data.Length(), "",
|
VImage::new_from_buffer(data.Data(), data.Length(), "",
|
||||||
type == "gif" ? options->set("n", -1) : options)
|
type == "gif" ? options->set("n", -1) : options)
|
||||||
.colourspace(VIPS_INTERPRETATION_sRGB);
|
.colourspace(VIPS_INTERPRETATION_sRGB);
|
||||||
if (!in.has_alpha()) in = in.bandjoin(255);
|
if (!in.has_alpha())
|
||||||
|
in = in.bandjoin(255);
|
||||||
|
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int width = in.width();
|
||||||
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
|
int totalHeight = in.height();
|
||||||
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
|
|
||||||
VImage fried = (in * 1.3 - (255.0 * 1.3 - 255.0)) * 1.5;
|
VImage fried = (in * 1.3 - (255.0 * 1.3 - 255.0)) * 1.5;
|
||||||
void *jpgBuf;
|
|
||||||
size_t jpgLength;
|
VImage final;
|
||||||
fried.write_to_buffer(".jpg", &jpgBuf, &jpgLength,
|
if (totalHeight > 65500 && type == "gif") {
|
||||||
VImage::option()->set("Q", 1)->set("strip", true));
|
vector<VImage> img;
|
||||||
VImage final = VImage::new_from_buffer(jpgBuf, jpgLength, "");
|
for (int i = 0; i < n_pages; i++) {
|
||||||
final.set(VIPS_META_PAGE_HEIGHT, page_height);
|
VImage img_frame = in.crop(0, i * pageHeight, width, pageHeight);
|
||||||
if (type == "gif") final.set("delay", fried.get_array_int("delay"));
|
void *jpgBuf;
|
||||||
|
size_t jpgLength;
|
||||||
|
img_frame.write_to_buffer(
|
||||||
|
".jpg", &jpgBuf, &jpgLength,
|
||||||
|
VImage::option()->set("Q", 1)->set("strip", true));
|
||||||
|
VImage jpeged = VImage::new_from_buffer(jpgBuf, jpgLength, "");
|
||||||
|
jpeged.set(VIPS_META_PAGE_HEIGHT, pageHeight);
|
||||||
|
jpeged.set("delay", in.get_array_int("delay"));
|
||||||
|
img.push_back(jpeged);
|
||||||
|
}
|
||||||
|
final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
||||||
|
final.set(VIPS_META_PAGE_HEIGHT, pageHeight);
|
||||||
|
} else {
|
||||||
|
void *jpgBuf;
|
||||||
|
size_t jpgLength;
|
||||||
|
fried.write_to_buffer(".jpg", &jpgBuf, &jpgLength,
|
||||||
|
VImage::option()->set("Q", 1)->set("strip", true));
|
||||||
|
final = VImage::new_from_buffer(jpgBuf, jpgLength, "");
|
||||||
|
final.set(VIPS_META_PAGE_HEIGHT, pageHeight);
|
||||||
|
if (type == "gif")
|
||||||
|
final.set("delay", fried.get_array_int("delay"));
|
||||||
|
}
|
||||||
|
|
||||||
void *buf;
|
void *buf;
|
||||||
size_t length;
|
size_t length;
|
||||||
final.write_to_buffer(
|
final.write_to_buffer(("." + type).c_str(), &buf, &length,
|
||||||
("." + type).c_str(), &buf, &length,
|
type == "gif" ? VImage::option()->set("dither", 0)
|
||||||
type == "gif" ? VImage::option()->set("dither", 0) : 0);
|
: 0);
|
||||||
|
|
||||||
vips_thread_shutdown();
|
vips_thread_shutdown();
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ Napi::Value Flag(const Napi::CallbackInfo &info) {
|
||||||
if (!in.has_alpha()) in = in.bandjoin(255);
|
if (!in.has_alpha()) in = in.bandjoin(255);
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
|
|
||||||
string assetPath = basePath + overlay;
|
string assetPath = basePath + overlay;
|
||||||
|
@ -32,7 +32,7 @@ Napi::Value Flag(const Napi::CallbackInfo &info) {
|
||||||
VImage overlayImage = overlayInput.resize(
|
VImage overlayImage = overlayInput.resize(
|
||||||
(double)width / (double)overlayInput.width(),
|
(double)width / (double)overlayInput.width(),
|
||||||
VImage::option()->set(
|
VImage::option()->set(
|
||||||
"vscale", (double)page_height / (double)overlayInput.height()));
|
"vscale", (double)pageHeight / (double)overlayInput.height()));
|
||||||
if (!overlayImage.has_alpha()) {
|
if (!overlayImage.has_alpha()) {
|
||||||
overlayImage = overlayImage.bandjoin(127);
|
overlayImage = overlayImage.bandjoin(127);
|
||||||
} else {
|
} else {
|
||||||
|
@ -43,14 +43,14 @@ Napi::Value Flag(const Napi::CallbackInfo &info) {
|
||||||
vector<VImage> img;
|
vector<VImage> img;
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage img_frame =
|
VImage img_frame =
|
||||||
type == "gif" ? in.crop(0, i * page_height, width, page_height) : in;
|
type == "gif" ? in.crop(0, i * pageHeight, width, pageHeight) : in;
|
||||||
VImage composited =
|
VImage composited =
|
||||||
img_frame.composite2(overlayImage, VIPS_BLEND_MODE_OVER);
|
img_frame.composite2(overlayImage, VIPS_BLEND_MODE_OVER);
|
||||||
img.push_back(composited);
|
img.push_back(composited);
|
||||||
}
|
}
|
||||||
|
|
||||||
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
||||||
final.set(VIPS_META_PAGE_HEIGHT, page_height);
|
final.set(VIPS_META_PAGE_HEIGHT, pageHeight);
|
||||||
|
|
||||||
void *buf;
|
void *buf;
|
||||||
size_t length;
|
size_t length;
|
||||||
|
|
|
@ -29,15 +29,15 @@ Napi::Value Flip(const Napi::CallbackInfo &info) {
|
||||||
} else if (type == "gif") {
|
} else if (type == "gif") {
|
||||||
// libvips gif handling is both a blessing and a curse
|
// libvips gif handling is both a blessing and a curse
|
||||||
vector<VImage> img;
|
vector<VImage> img;
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage img_frame = in.crop(0, i * page_height, in.width(), page_height);
|
VImage img_frame = in.crop(0, i * pageHeight, in.width(), pageHeight);
|
||||||
VImage flipped = img_frame.flip(VIPS_DIRECTION_VERTICAL);
|
VImage flipped = img_frame.flip(VIPS_DIRECTION_VERTICAL);
|
||||||
img.push_back(flipped);
|
img.push_back(flipped);
|
||||||
}
|
}
|
||||||
out = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
out = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
||||||
out.set(VIPS_META_PAGE_HEIGHT, page_height);
|
out.set(VIPS_META_PAGE_HEIGHT, pageHeight);
|
||||||
} else {
|
} else {
|
||||||
out = in.flip(VIPS_DIRECTION_VERTICAL);
|
out = in.flip(VIPS_DIRECTION_VERTICAL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,11 +58,11 @@ Napi::Value Freeze(const Napi::CallbackInfo &info) {
|
||||||
.colourspace(VIPS_INTERPRETATION_sRGB);
|
.colourspace(VIPS_INTERPRETATION_sRGB);
|
||||||
if (!in.has_alpha()) in = in.bandjoin(255);
|
if (!in.has_alpha()) in = in.bandjoin(255);
|
||||||
|
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
int framePos = clamp(frame, 0, (int)n_pages);
|
int framePos = clamp(frame, 0, (int)n_pages);
|
||||||
VImage out = in.crop(0, 0, in.width(), page_height * (framePos + 1));
|
VImage out = in.crop(0, 0, in.width(), pageHeight * (framePos + 1));
|
||||||
out.set(VIPS_META_PAGE_HEIGHT, page_height);
|
out.set(VIPS_META_PAGE_HEIGHT, pageHeight);
|
||||||
out.set("loop", loop ? 0 : 1);
|
out.set("loop", loop ? 0 : 1);
|
||||||
|
|
||||||
void *buf;
|
void *buf;
|
||||||
|
|
|
@ -26,17 +26,17 @@ Napi::Value Gamexplain(const Napi::CallbackInfo &info) {
|
||||||
VImage tmpl = VImage::new_from_file(assetPath.c_str());
|
VImage tmpl = VImage::new_from_file(assetPath.c_str());
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
|
|
||||||
vector<VImage> img;
|
vector<VImage> img;
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage img_frame =
|
VImage img_frame =
|
||||||
type == "gif" ? in.crop(0, i * page_height, width, page_height) : in;
|
type == "gif" ? in.crop(0, i * pageHeight, width, pageHeight) : in;
|
||||||
VImage resized = img_frame
|
VImage resized = img_frame
|
||||||
.resize(1181.0 / (double)width,
|
.resize(1181.0 / (double)width,
|
||||||
VImage::option()->set(
|
VImage::option()->set(
|
||||||
"vscale", 571.0 / (double)page_height))
|
"vscale", 571.0 / (double)pageHeight))
|
||||||
.embed(10, 92, 1200, 675,
|
.embed(10, 92, 1200, 675,
|
||||||
VImage::option()->set("extend", "white"));
|
VImage::option()->set("extend", "white"));
|
||||||
VImage composited = resized.composite2(tmpl, VIPS_BLEND_MODE_OVER);
|
VImage composited = resized.composite2(tmpl, VIPS_BLEND_MODE_OVER);
|
||||||
|
|
|
@ -25,10 +25,10 @@ Napi::Value Globe(const Napi::CallbackInfo &info) {
|
||||||
if (!in.has_alpha()) in = in.bandjoin(255);
|
if (!in.has_alpha()) in = in.bandjoin(255);
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = type == "gif" ? vips_image_get_n_pages(in.get_image()) : 30;
|
int n_pages = type == "gif" ? vips_image_get_n_pages(in.get_image()) : 30;
|
||||||
|
|
||||||
double size = min(width, page_height);
|
double size = min(width, pageHeight);
|
||||||
|
|
||||||
string diffPath = basePath + "assets/images/globediffuse.png";
|
string diffPath = basePath + "assets/images/globediffuse.png";
|
||||||
VImage diffuse =
|
VImage diffuse =
|
||||||
|
@ -54,10 +54,10 @@ Napi::Value Globe(const Napi::CallbackInfo &info) {
|
||||||
vector<VImage> img;
|
vector<VImage> img;
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage img_frame =
|
VImage img_frame =
|
||||||
type == "gif" ? in.crop(0, i * page_height, width, page_height) : in;
|
type == "gif" ? in.crop(0, i * pageHeight, width, pageHeight) : in;
|
||||||
VImage resized = img_frame.resize(
|
VImage resized = img_frame.resize(
|
||||||
size / (double)width,
|
size / (double)width,
|
||||||
VImage::option()->set("vscale", size / (double)page_height));
|
VImage::option()->set("vscale", size / (double)pageHeight));
|
||||||
VImage rolled = img_frame.wrap(
|
VImage rolled = img_frame.wrap(
|
||||||
VImage::option()->set("x", width * i / n_pages)->set("y", 0));
|
VImage::option()->set("x", width * i / n_pages)->set("y", 0));
|
||||||
VImage extracted = rolled.extract_band(0, VImage::option()->set("n", 3));
|
VImage extracted = rolled.extract_band(0, VImage::option()->set("n", 3));
|
||||||
|
|
|
@ -24,24 +24,48 @@ Napi::Value Jpeg(const Napi::CallbackInfo &info) {
|
||||||
data.Data(), data.Length(), "",
|
data.Data(), data.Length(), "",
|
||||||
VImage::option()->set("access", "sequential")->set("n", -1))
|
VImage::option()->set("access", "sequential")->set("n", -1))
|
||||||
.colourspace(VIPS_INTERPRETATION_sRGB);
|
.colourspace(VIPS_INTERPRETATION_sRGB);
|
||||||
if (!in.has_alpha()) in = in.bandjoin(255);
|
if (!in.has_alpha())
|
||||||
|
in = in.bandjoin(255);
|
||||||
|
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int width = in.width();
|
||||||
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
|
int totalHeight = in.height();
|
||||||
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
|
|
||||||
void *jpgBuf;
|
VImage final;
|
||||||
size_t jpgLength;
|
|
||||||
in.write_to_buffer(
|
if (totalHeight > 65500) {
|
||||||
".jpg", &jpgBuf, &jpgLength,
|
vector<VImage> img;
|
||||||
VImage::option()->set("Q", quality)->set("strip", true));
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage final = VImage::new_from_buffer(jpgBuf, jpgLength, "");
|
VImage img_frame = in.crop(0, i * pageHeight, width, pageHeight);
|
||||||
final.set(VIPS_META_PAGE_HEIGHT, page_height);
|
void *jpgBuf;
|
||||||
if (type == "gif") final.set("delay", in.get_array_int("delay"));
|
size_t jpgLength;
|
||||||
|
img_frame.write_to_buffer(
|
||||||
|
".jpg", &jpgBuf, &jpgLength,
|
||||||
|
VImage::option()->set("Q", quality)->set("strip", true));
|
||||||
|
VImage jpeged = VImage::new_from_buffer(jpgBuf, jpgLength, "");
|
||||||
|
jpeged.set(VIPS_META_PAGE_HEIGHT, pageHeight);
|
||||||
|
jpeged.set("delay", in.get_array_int("delay"));
|
||||||
|
img.push_back(jpeged);
|
||||||
|
}
|
||||||
|
final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
||||||
|
final.set(VIPS_META_PAGE_HEIGHT, pageHeight);
|
||||||
|
} else {
|
||||||
|
void *jpgBuf;
|
||||||
|
size_t jpgLength;
|
||||||
|
in.write_to_buffer(
|
||||||
|
".jpg", &jpgBuf, &jpgLength,
|
||||||
|
VImage::option()->set("Q", quality)->set("strip", true));
|
||||||
|
final = VImage::new_from_buffer(jpgBuf, jpgLength, "");
|
||||||
|
final.set(VIPS_META_PAGE_HEIGHT, pageHeight);
|
||||||
|
final.set("delay", in.get_array_int("delay"));
|
||||||
|
}
|
||||||
|
|
||||||
void *buf;
|
void *buf;
|
||||||
size_t length;
|
size_t length;
|
||||||
final.write_to_buffer(
|
final.write_to_buffer(("." + type).c_str(), &buf, &length,
|
||||||
("." + type).c_str(), &buf, &length,
|
type == "gif" ? VImage::option()->set("dither", 0)
|
||||||
type == "gif" ? VImage::option()->set("dither", 0) : 0);
|
: 0);
|
||||||
|
|
||||||
vips_thread_shutdown();
|
vips_thread_shutdown();
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ Napi::Value Meme(const Napi::CallbackInfo &info) {
|
||||||
if (!in.has_alpha()) in = in.bandjoin(255);
|
if (!in.has_alpha()) in = in.bandjoin(255);
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
int size = width / 9;
|
int size = width / 9;
|
||||||
int dividedWidth = width / 1000;
|
int dividedWidth = width / 1000;
|
||||||
|
@ -106,7 +106,7 @@ Napi::Value Meme(const Napi::CallbackInfo &info) {
|
||||||
vector<VImage> img;
|
vector<VImage> img;
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage img_frame =
|
VImage img_frame =
|
||||||
type == "gif" ? in.crop(0, i * page_height, width, page_height) : in;
|
type == "gif" ? in.crop(0, i * pageHeight, width, pageHeight) : in;
|
||||||
if (top != "") {
|
if (top != "") {
|
||||||
img_frame = img_frame.composite2(
|
img_frame = img_frame.composite2(
|
||||||
topText, VIPS_BLEND_MODE_OVER,
|
topText, VIPS_BLEND_MODE_OVER,
|
||||||
|
@ -117,12 +117,12 @@ Napi::Value Meme(const Napi::CallbackInfo &info) {
|
||||||
bottomText, VIPS_BLEND_MODE_OVER,
|
bottomText, VIPS_BLEND_MODE_OVER,
|
||||||
VImage::option()
|
VImage::option()
|
||||||
->set("x", (width / 2) - (bottomText.width() / 2))
|
->set("x", (width / 2) - (bottomText.width() / 2))
|
||||||
->set("y", page_height - bottomText.height()));
|
->set("y", pageHeight - bottomText.height()));
|
||||||
}
|
}
|
||||||
img.push_back(img_frame);
|
img.push_back(img_frame);
|
||||||
}
|
}
|
||||||
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
||||||
final.set(VIPS_META_PAGE_HEIGHT, page_height);
|
final.set(VIPS_META_PAGE_HEIGHT, pageHeight);
|
||||||
|
|
||||||
void *buf;
|
void *buf;
|
||||||
size_t length;
|
size_t length;
|
||||||
|
|
|
@ -32,12 +32,12 @@ Napi::Value Mirror(const Napi::CallbackInfo &info) {
|
||||||
if (type == "gif") {
|
if (type == "gif") {
|
||||||
// once again, libvips gif handling is both a blessing and a curse
|
// once again, libvips gif handling is both a blessing and a curse
|
||||||
vector<VImage> img;
|
vector<VImage> img;
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
bool isOdd = page_height % 2;
|
bool isOdd = pageHeight % 2;
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
int x = (i * page_height) + (first ? 0 : (page_height / 2));
|
int x = (i * pageHeight) + (first ? 0 : (pageHeight / 2));
|
||||||
VImage cropped = in.crop(0, x, in.width(), page_height / 2);
|
VImage cropped = in.crop(0, x, in.width(), pageHeight / 2);
|
||||||
VImage flipped = cropped.flip(VIPS_DIRECTION_VERTICAL);
|
VImage flipped = cropped.flip(VIPS_DIRECTION_VERTICAL);
|
||||||
VImage final = VImage::arrayjoin(
|
VImage final = VImage::arrayjoin(
|
||||||
{first ? cropped : flipped, first ? flipped : cropped},
|
{first ? cropped : flipped, first ? flipped : cropped},
|
||||||
|
@ -45,7 +45,7 @@ Napi::Value Mirror(const Napi::CallbackInfo &info) {
|
||||||
img.push_back(final);
|
img.push_back(final);
|
||||||
}
|
}
|
||||||
out = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
out = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
||||||
out.set(VIPS_META_PAGE_HEIGHT, page_height - (isOdd ? 1 : 0));
|
out.set(VIPS_META_PAGE_HEIGHT, pageHeight - (isOdd ? 1 : 0));
|
||||||
} else {
|
} else {
|
||||||
VImage cropped = in.extract_area(0, 0, in.width(), in.height() / 2);
|
VImage cropped = in.extract_area(0, 0, in.width(), in.height() / 2);
|
||||||
VImage flipped = cropped.flip(VIPS_DIRECTION_VERTICAL);
|
VImage flipped = cropped.flip(VIPS_DIRECTION_VERTICAL);
|
||||||
|
|
|
@ -26,7 +26,7 @@ Napi::Value Motivate(const Napi::CallbackInfo &info) {
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int size = width / 5;
|
int size = width / 5;
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
int textWidth = width - ((width / 25) * 2);
|
int textWidth = width - ((width / 25) * 2);
|
||||||
|
|
||||||
|
@ -61,13 +61,13 @@ Napi::Value Motivate(const Napi::CallbackInfo &info) {
|
||||||
int height;
|
int height;
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage img_frame =
|
VImage img_frame =
|
||||||
type == "gif" ? in.crop(0, i * page_height, width, page_height) : in;
|
type == "gif" ? in.crop(0, i * pageHeight, width, pageHeight) : in;
|
||||||
|
|
||||||
int borderSize = max(2, width / 66);
|
int borderSize = max(2, width / 66);
|
||||||
int borderSize2 = borderSize * 0.5;
|
int borderSize2 = borderSize * 0.5;
|
||||||
VImage bordered =
|
VImage bordered =
|
||||||
img_frame.embed(borderSize, borderSize, width + (borderSize * 2),
|
img_frame.embed(borderSize, borderSize, width + (borderSize * 2),
|
||||||
page_height + (borderSize * 2),
|
pageHeight + (borderSize * 2),
|
||||||
VImage::option()->set("extend", "black"));
|
VImage::option()->set("extend", "black"));
|
||||||
VImage bordered2 = bordered.embed(
|
VImage bordered2 = bordered.embed(
|
||||||
borderSize2, borderSize2, bordered.width() + (borderSize2 * 2),
|
borderSize2, borderSize2, bordered.width() + (borderSize2 * 2),
|
||||||
|
@ -75,7 +75,7 @@ Napi::Value Motivate(const Napi::CallbackInfo &info) {
|
||||||
VImage::option()->set("extend", "white"));
|
VImage::option()->set("extend", "white"));
|
||||||
|
|
||||||
int addition = width / 8;
|
int addition = width / 8;
|
||||||
int sideAddition = page_height * 0.4;
|
int sideAddition = pageHeight * 0.4;
|
||||||
|
|
||||||
VImage bordered3 = bordered2.embed(
|
VImage bordered3 = bordered2.embed(
|
||||||
sideAddition / 2, addition / 2, bordered2.width() + sideAddition,
|
sideAddition / 2, addition / 2, bordered2.width() + sideAddition,
|
||||||
|
|
|
@ -26,7 +26,7 @@ Napi::Value Reddit(const Napi::CallbackInfo &info) {
|
||||||
VImage tmpl = VImage::new_from_file(assetPath.c_str());
|
VImage tmpl = VImage::new_from_file(assetPath.c_str());
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
|
|
||||||
string captionText = "<span foreground=\"white\">" + text + "</span>";
|
string captionText = "<span foreground=\"white\">" + text + "</span>";
|
||||||
|
@ -47,13 +47,13 @@ Napi::Value Reddit(const Napi::CallbackInfo &info) {
|
||||||
vector<VImage> img;
|
vector<VImage> img;
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage img_frame =
|
VImage img_frame =
|
||||||
type == "gif" ? in.crop(0, i * page_height, width, page_height) : in;
|
type == "gif" ? in.crop(0, i * pageHeight, width, pageHeight) : in;
|
||||||
VImage frame = img_frame.join(watermark, VIPS_DIRECTION_VERTICAL,
|
VImage frame = img_frame.join(watermark, VIPS_DIRECTION_VERTICAL,
|
||||||
VImage::option()->set("expand", true));
|
VImage::option()->set("expand", true));
|
||||||
img.push_back(frame);
|
img.push_back(frame);
|
||||||
}
|
}
|
||||||
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
||||||
final.set(VIPS_META_PAGE_HEIGHT, page_height + watermark.height());
|
final.set(VIPS_META_PAGE_HEIGHT, pageHeight + watermark.height());
|
||||||
|
|
||||||
void *buf;
|
void *buf;
|
||||||
size_t length;
|
size_t length;
|
||||||
|
|
|
@ -28,21 +28,21 @@ Napi::Value Resize(const Napi::CallbackInfo &info) {
|
||||||
VImage out;
|
VImage out;
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
|
|
||||||
int finalHeight;
|
int finalHeight;
|
||||||
if (stretch) {
|
if (stretch) {
|
||||||
out = in.resize(
|
out = in.resize(
|
||||||
512.0 / (double)width,
|
512.0 / (double)width,
|
||||||
VImage::option()->set("vscale", 512.0 / (double)page_height));
|
VImage::option()->set("vscale", 512.0 / (double)pageHeight));
|
||||||
finalHeight = 512;
|
finalHeight = 512;
|
||||||
} else if (wide) {
|
} else if (wide) {
|
||||||
out = in.resize(9.5, VImage::option()->set("vscale", 0.5));
|
out = in.resize(9.5, VImage::option()->set("vscale", 0.5));
|
||||||
finalHeight = page_height / 2;
|
finalHeight = pageHeight / 2;
|
||||||
} else {
|
} else {
|
||||||
out = in.resize(0.1).resize(
|
out = in.resize(0.1).resize(
|
||||||
10, VImage::option()->set("kernel", VIPS_KERNEL_NEAREST));
|
10, VImage::option()->set("kernel", VIPS_KERNEL_NEAREST));
|
||||||
finalHeight = page_height;
|
finalHeight = pageHeight;
|
||||||
}
|
}
|
||||||
out.set(VIPS_META_PAGE_HEIGHT, finalHeight);
|
out.set(VIPS_META_PAGE_HEIGHT, finalHeight);
|
||||||
|
|
||||||
|
|
|
@ -21,13 +21,13 @@ Napi::Value Reverse(const Napi::CallbackInfo &info) {
|
||||||
.colourspace(VIPS_INTERPRETATION_sRGB);
|
.colourspace(VIPS_INTERPRETATION_sRGB);
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
|
|
||||||
vector<VImage> split;
|
vector<VImage> split;
|
||||||
// todo: find a better way of getting individual frames (or at least getting the frames in reverse order)
|
// todo: find a better way of getting individual frames (or at least getting the frames in reverse order)
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage img_frame = in.crop(0, i * page_height, width, page_height);
|
VImage img_frame = in.crop(0, i * pageHeight, width, pageHeight);
|
||||||
split.push_back(img_frame);
|
split.push_back(img_frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ Napi::Value Reverse(const Napi::CallbackInfo &info) {
|
||||||
}
|
}
|
||||||
|
|
||||||
VImage final = VImage::arrayjoin(split, VImage::option()->set("across", 1));
|
VImage final = VImage::arrayjoin(split, VImage::option()->set("across", 1));
|
||||||
final.set(VIPS_META_PAGE_HEIGHT, page_height);
|
final.set(VIPS_META_PAGE_HEIGHT, pageHeight);
|
||||||
final.set("delay", delays);
|
final.set("delay", delays);
|
||||||
|
|
||||||
void *buf;
|
void *buf;
|
||||||
|
|
|
@ -25,7 +25,7 @@ Napi::Value Snapchat(const Napi::CallbackInfo &info) {
|
||||||
if (!in.has_alpha()) in = in.bandjoin(255);
|
if (!in.has_alpha()) in = in.bandjoin(255);
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
int size = width / 20;
|
int size = width / 20;
|
||||||
int textWidth = width - ((width / 25) * 2);
|
int textWidth = width - ((width / 25) * 2);
|
||||||
|
@ -54,14 +54,14 @@ Napi::Value Snapchat(const Napi::CallbackInfo &info) {
|
||||||
vector<VImage> img;
|
vector<VImage> img;
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage img_frame =
|
VImage img_frame =
|
||||||
type == "gif" ? in.crop(0, i * page_height, width, page_height) : in;
|
type == "gif" ? in.crop(0, i * pageHeight, width, pageHeight) : in;
|
||||||
img_frame = img_frame.composite2(
|
img_frame = img_frame.composite2(
|
||||||
textIn, VIPS_BLEND_MODE_OVER,
|
textIn, VIPS_BLEND_MODE_OVER,
|
||||||
VImage::option()->set("x", 0)->set("y", page_height * pos));
|
VImage::option()->set("x", 0)->set("y", pageHeight * pos));
|
||||||
img.push_back(img_frame);
|
img.push_back(img_frame);
|
||||||
}
|
}
|
||||||
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
||||||
final.set(VIPS_META_PAGE_HEIGHT, page_height);
|
final.set(VIPS_META_PAGE_HEIGHT, pageHeight);
|
||||||
|
|
||||||
void *buf;
|
void *buf;
|
||||||
size_t length;
|
size_t length;
|
||||||
|
|
|
@ -22,16 +22,16 @@ void vipsRemove(Napi::Env *env, Napi::Object *result, Napi::Buffer<char> data,
|
||||||
if (!in.has_alpha()) in = in.bandjoin(255);
|
if (!in.has_alpha()) in = in.bandjoin(255);
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
|
|
||||||
vector<VImage> img;
|
vector<VImage> img;
|
||||||
for (int i = 0; i < n_pages; i += speed) {
|
for (int i = 0; i < n_pages; i += speed) {
|
||||||
VImage img_frame = in.crop(0, i * page_height, width, page_height);
|
VImage img_frame = in.crop(0, i * pageHeight, width, pageHeight);
|
||||||
img.push_back(img_frame);
|
img.push_back(img_frame);
|
||||||
}
|
}
|
||||||
VImage out = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
VImage out = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
||||||
out.set(VIPS_META_PAGE_HEIGHT, page_height);
|
out.set(VIPS_META_PAGE_HEIGHT, pageHeight);
|
||||||
|
|
||||||
void *buf;
|
void *buf;
|
||||||
size_t length;
|
size_t length;
|
||||||
|
|
|
@ -25,24 +25,24 @@ Napi::Value Uncaption(const Napi::CallbackInfo &info) {
|
||||||
if (!in.has_alpha()) in = in.bandjoin(255);
|
if (!in.has_alpha()) in = in.bandjoin(255);
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
|
|
||||||
VImage first =
|
VImage first =
|
||||||
in.crop(0, 0, 3, page_height).colourspace(VIPS_INTERPRETATION_B_W) >
|
in.crop(0, 0, 3, pageHeight).colourspace(VIPS_INTERPRETATION_B_W) >
|
||||||
(255 * tolerance);
|
(255 * tolerance);
|
||||||
int top, captionWidth, captionHeight;
|
int top, captionWidth, captionHeight;
|
||||||
first.find_trim(&top, &captionWidth, &captionHeight);
|
first.find_trim(&top, &captionWidth, &captionHeight);
|
||||||
|
|
||||||
vector<VImage> img;
|
vector<VImage> img;
|
||||||
int newHeight = page_height - top;
|
int newHeight = pageHeight - top;
|
||||||
if (top == page_height) {
|
if (top == pageHeight) {
|
||||||
newHeight = page_height;
|
newHeight = pageHeight;
|
||||||
top = 0;
|
top = 0;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage img_frame =
|
VImage img_frame =
|
||||||
in.crop(0, (i * page_height) + top, width, newHeight);
|
in.crop(0, (i * pageHeight) + top, width, newHeight);
|
||||||
img.push_back(img_frame);
|
img.push_back(img_frame);
|
||||||
}
|
}
|
||||||
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
||||||
|
|
|
@ -40,7 +40,7 @@ Napi::Value Watermark(const Napi::CallbackInfo &info) {
|
||||||
VImage watermark = VImage::new_from_file(merged.c_str());
|
VImage watermark = VImage::new_from_file(merged.c_str());
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
|
|
||||||
if (resize && append) {
|
if (resize && append) {
|
||||||
|
@ -48,11 +48,11 @@ Napi::Value Watermark(const Napi::CallbackInfo &info) {
|
||||||
} else if (resize && yscale) {
|
} else if (resize && yscale) {
|
||||||
watermark = watermark.resize(
|
watermark = watermark.resize(
|
||||||
(double)width / (double)watermark.width(),
|
(double)width / (double)watermark.width(),
|
||||||
VImage::option()->set("vscale", (double)(page_height * yscale) /
|
VImage::option()->set("vscale", (double)(pageHeight * yscale) /
|
||||||
(double)watermark.height()));
|
(double)watermark.height()));
|
||||||
} else if (resize) {
|
} else if (resize) {
|
||||||
watermark =
|
watermark =
|
||||||
watermark.resize((double)page_height / (double)watermark.height());
|
watermark.resize((double)pageHeight / (double)watermark.height());
|
||||||
}
|
}
|
||||||
|
|
||||||
int x = 0, y = 0;
|
int x = 0, y = 0;
|
||||||
|
@ -67,19 +67,19 @@ Napi::Value Watermark(const Napi::CallbackInfo &info) {
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
x = (width / 2) - (watermark.width() / 2);
|
x = (width / 2) - (watermark.width() / 2);
|
||||||
y = (page_height / 2) - (watermark.height() / 2);
|
y = (pageHeight / 2) - (watermark.height() / 2);
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
x = width - watermark.width();
|
x = width - watermark.width();
|
||||||
y = (page_height / 2) - (watermark.height() / 2);
|
y = (pageHeight / 2) - (watermark.height() / 2);
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
x = (width / 2) - (watermark.width() / 2);
|
x = (width / 2) - (watermark.width() / 2);
|
||||||
y = page_height - watermark.height();
|
y = pageHeight - watermark.height();
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 9:
|
||||||
x = width - watermark.width();
|
x = width - watermark.width();
|
||||||
y = page_height - watermark.height();
|
y = pageHeight - watermark.height();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ Napi::Value Watermark(const Napi::CallbackInfo &info) {
|
||||||
VImage frame;
|
VImage frame;
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage img_frame =
|
VImage img_frame =
|
||||||
type == "gif" ? in.crop(0, i * page_height, width, page_height) : in;
|
type == "gif" ? in.crop(0, i * pageHeight, width, pageHeight) : in;
|
||||||
if (append) {
|
if (append) {
|
||||||
VImage appended = img_frame.join(watermark, VIPS_DIRECTION_VERTICAL,
|
VImage appended = img_frame.join(watermark, VIPS_DIRECTION_VERTICAL,
|
||||||
VImage::option()->set("expand", true));
|
VImage::option()->set("expand", true));
|
||||||
|
@ -99,7 +99,7 @@ Napi::Value Watermark(const Napi::CallbackInfo &info) {
|
||||||
img.push_back(appended);
|
img.push_back(appended);
|
||||||
} else if (mc) {
|
} else if (mc) {
|
||||||
VImage padded =
|
VImage padded =
|
||||||
img_frame.embed(0, 0, width, page_height + 15,
|
img_frame.embed(0, 0, width, pageHeight + 15,
|
||||||
VImage::option()->set("background", 0xffffff));
|
VImage::option()->set("background", 0xffffff));
|
||||||
VImage composited =
|
VImage composited =
|
||||||
padded.composite2(watermark, VIPS_BLEND_MODE_OVER,
|
padded.composite2(watermark, VIPS_BLEND_MODE_OVER,
|
||||||
|
@ -113,10 +113,10 @@ Napi::Value Watermark(const Napi::CallbackInfo &info) {
|
||||||
if (alpha) {
|
if (alpha) {
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
contentAlpha = watermark.extract_band(0).embed(
|
contentAlpha = watermark.extract_band(0).embed(
|
||||||
x, y, width, page_height,
|
x, y, width, pageHeight,
|
||||||
VImage::option()->set("extend", "white"));
|
VImage::option()->set("extend", "white"));
|
||||||
frameAlpha = watermark.extract_band(1).embed(
|
frameAlpha = watermark.extract_band(1).embed(
|
||||||
x, y, width, page_height,
|
x, y, width, pageHeight,
|
||||||
VImage::option()->set("extend", "black"));
|
VImage::option()->set("extend", "black"));
|
||||||
bg =
|
bg =
|
||||||
frameAlpha.new_from_image({0, 0, 0}).copy(VImage::option()->set(
|
frameAlpha.new_from_image({0, 0, 0}).copy(VImage::option()->set(
|
||||||
|
@ -142,7 +142,7 @@ Napi::Value Watermark(const Napi::CallbackInfo &info) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
||||||
final.set(VIPS_META_PAGE_HEIGHT, page_height + addedHeight);
|
final.set(VIPS_META_PAGE_HEIGHT, pageHeight + addedHeight);
|
||||||
|
|
||||||
void *buf;
|
void *buf;
|
||||||
size_t length;
|
size_t length;
|
||||||
|
|
|
@ -23,7 +23,7 @@ Napi::Value Whisper(const Napi::CallbackInfo &info) {
|
||||||
if (!in.has_alpha()) in = in.bandjoin(255);
|
if (!in.has_alpha()) in = in.bandjoin(255);
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
int size = width / 6;
|
int size = width / 6;
|
||||||
int dividedWidth = width / 175;
|
int dividedWidth = width / 175;
|
||||||
|
@ -66,16 +66,16 @@ Napi::Value Whisper(const Napi::CallbackInfo &info) {
|
||||||
vector<VImage> img;
|
vector<VImage> img;
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage img_frame =
|
VImage img_frame =
|
||||||
type == "gif" ? in.crop(0, i * page_height, width, page_height) : in;
|
type == "gif" ? in.crop(0, i * pageHeight, width, pageHeight) : in;
|
||||||
img_frame = img_frame.composite2(
|
img_frame = img_frame.composite2(
|
||||||
textImg, VIPS_BLEND_MODE_OVER,
|
textImg, VIPS_BLEND_MODE_OVER,
|
||||||
VImage::option()
|
VImage::option()
|
||||||
->set("x", (width / 2) - (textImg.width() / 2))
|
->set("x", (width / 2) - (textImg.width() / 2))
|
||||||
->set("y", (page_height / 2) - (textImg.height() / 2)));
|
->set("y", (pageHeight / 2) - (textImg.height() / 2)));
|
||||||
img.push_back(img_frame);
|
img.push_back(img_frame);
|
||||||
}
|
}
|
||||||
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
VImage final = VImage::arrayjoin(img, VImage::option()->set("across", 1));
|
||||||
final.set(VIPS_META_PAGE_HEIGHT, page_height);
|
final.set(VIPS_META_PAGE_HEIGHT, pageHeight);
|
||||||
|
|
||||||
void *buf;
|
void *buf;
|
||||||
size_t length;
|
size_t length;
|
||||||
|
|
|
@ -23,7 +23,7 @@ Napi::Value Zamn(const Napi::CallbackInfo &info) {
|
||||||
if (!in.has_alpha()) in = in.bandjoin(255);
|
if (!in.has_alpha()) in = in.bandjoin(255);
|
||||||
|
|
||||||
int width = in.width();
|
int width = in.width();
|
||||||
int page_height = vips_image_get_page_height(in.get_image());
|
int pageHeight = vips_image_get_page_height(in.get_image());
|
||||||
int n_pages = vips_image_get_n_pages(in.get_image());
|
int n_pages = vips_image_get_n_pages(in.get_image());
|
||||||
|
|
||||||
string assetPath = basePath + "assets/images/zamn.png";
|
string assetPath = basePath + "assets/images/zamn.png";
|
||||||
|
@ -32,11 +32,11 @@ Napi::Value Zamn(const Napi::CallbackInfo &info) {
|
||||||
vector<VImage> img;
|
vector<VImage> img;
|
||||||
for (int i = 0; i < n_pages; i++) {
|
for (int i = 0; i < n_pages; i++) {
|
||||||
VImage img_frame =
|
VImage img_frame =
|
||||||
type == "gif" ? in.crop(0, i * page_height, width, page_height) : in;
|
type == "gif" ? in.crop(0, i * pageHeight, width, pageHeight) : in;
|
||||||
VImage composited = tmpl.insert(
|
VImage composited = tmpl.insert(
|
||||||
img_frame.extract_band(0, VImage::option()->set("n", 3)).bandjoin(255).resize(
|
img_frame.extract_band(0, VImage::option()->set("n", 3)).bandjoin(255).resize(
|
||||||
303.0 / (double)width,
|
303.0 / (double)width,
|
||||||
VImage::option()->set("vscale", 438.0 / (double)page_height)),
|
VImage::option()->set("vscale", 438.0 / (double)pageHeight)),
|
||||||
310, 76);
|
310, 76);
|
||||||
img.push_back(composited);
|
img.push_back(composited);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue