diff --git a/assets/images/reddit.png b/assets/images/reddit.png index b9a515bb35fa6e34a0df42877f5e12cb99660858..e14b7bfc054b6c39eaabdfb083ca4ab011269331 100644 GIT binary patch literal 5358 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¨&2n&j@wA=w7CY0UAq?+)PN;dkN&kOkO+&FyOwFC9 z_kv*44{okKx@SB4=F>+~k01Tb2CgS0Lhi?#mJ2LCW50IR>)p*=qkda;>1HtevuF9?n*<7;bIKmV5*E&p`Jju|^t?sG##@6YlUx7)Jr z+UL8Q9y8VLTet1krS4i~u;0!oNsGmQc`se{&E)dq@at}C6(9ouYf9g4`q^&gmp$v} z-(|P9Zi{dNIkI6x?a@8|Z`}E6BAj3NxU14G7aUJNnzY4q|9qTf>7To1?u$D`#)ct0 zKPHbJ?!&fjj?)?sIR7uL)JyCUG+qlXXI>(7>N ze0Fc^*Sq1@>WV|(zVzK{-*YwoZk6J`Bm5ta|4984DkIQ-^kAXaoEMj!r+m}|jaY%T zGk`6DkPVp00i_>zopr00SytHUIzs literal 9849 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 L>gTe~DWM4fI3&E` diff --git a/natives/image/reddit.cc b/natives/image/reddit.cc index d0b5f985..184217ce 100644 --- a/natives/image/reddit.cc +++ b/natives/image/reddit.cc @@ -26,19 +26,29 @@ CmdOutput esmb::Image::Reddit(const string &type, string &outType, const char *b int pageHeight = vips_image_get_page_height(in.get_image()); int nPages = type == "avif" ? 1 : vips_image_get_n_pages(in.get_image()); - string captionText = "" + text + ""; + string captionText = "Posted in r/" + text + ""; LoadFonts(basePath); + + // this is a bit of a hack. + // to properly align the text, we need to ensure that the baseline matches; + // however, depending on the content, this can vary wildly if we just use the + // standard method of rendering text. + // therefore, we need to know the offset - but this info is not provided to us directly either, + // so we need to calculate it by rendering some other text and getting the baseline from there. + VImage baselineCalc = VImage::text( + "A", VImage::option()->set("font", "Roboto 62")->set("fontfile", (basePath + "assets/fonts/reddit.ttf").c_str())); + size_t baseline = baselineCalc.height() + baselineCalc.yoffset(); + VImage textImage = VImage::text(captionText.c_str(), VImage::option() ->set("rgba", true) ->set("font", "Roboto 62") - ->set("fontfile", (basePath + "assets/fonts/reddit.ttf").c_str()) - ->set("align", VIPS_ALIGN_LOW)); + ->set("fontfile", (basePath + "assets/fonts/reddit.ttf").c_str())); VImage composited = tmpl.composite2(textImage, VIPS_BLEND_MODE_OVER, - VImage::option()->set("x", 375)->set("y", (tmpl.height() - textImage.height()) - 64)); + VImage::option()->set("x", 64)->set("y", (tmpl.height() - baseline) - 64 + textImage.yoffset())); VImage watermark = composited.resize((double)width / (double)composited.width()); vector img;