Skip to content

Commit 797a3bb

Browse files
authored
Merge pull request #142 from wchaws/dev2
fix: no text watermark when original image has exif rotate 90
2 parents ea890e5 + 1afde68 commit 797a3bb

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

source/new-image-handler/src/processor/image/watermark.ts

+13-4
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ export class WatermarkAction extends BaseImageAction {
189189
const textOpt = this.calculateTextSize(opt.text, opt.size);
190190
const svg = this.textSvgStr(opt, textOpt, true, opt.shadow / 100);
191191
const svgBytes = Buffer.from(svg);
192-
const metadata = await ctx.image.metadata();
192+
const metadata = withNormalSize(ctx.metadata);
193193
if (0 < opt.rotate) {
194194
// hard to rotate the svg directly, so attach it on image, then rotate the image
195195
const overlapImg = this.textSvgImg(svgBytes, textOpt);
@@ -234,7 +234,7 @@ export class WatermarkAction extends BaseImageAction {
234234
watermarkImg = sharp(bt);
235235
}
236236
// auto scale warkmark size
237-
const metadata = await ctx.image.metadata();
237+
const metadata = withNormalSize(ctx.metadata);
238238
const markMetadata = await watermarkImg.metadata();
239239
if (opt.auto) {
240240
// check the warkmark image size, if bigger than backgroud image, need resize the overlay
@@ -276,7 +276,7 @@ export class WatermarkAction extends BaseImageAction {
276276
const gravityOpt = this.calculateMixedGravity(opt);
277277
const wbt = await watermarkImg.toBuffer();
278278

279-
const metadata = await ctx.image.metadata();
279+
const metadata = withNormalSize(ctx.metadata);
280280

281281
const expectedWidth = textOpt.width + imgW + opt.interval;
282282
const expectedHeight = Math.max(textOpt.height, imgH);
@@ -452,7 +452,7 @@ export class WatermarkAction extends BaseImageAction {
452452
let h = textOpt.height;
453453
let needResize = false;
454454
const overlapImgMeta = await source.metadata();
455-
const metadata = await ctx.image.metadata();
455+
const metadata = withNormalSize(ctx.metadata);
456456

457457
if (overlapImgMeta.width && metadata.width && overlapImgMeta.width > metadata.width) {
458458
w = metadata.width - 10;
@@ -523,3 +523,12 @@ export class WatermarkAction extends BaseImageAction {
523523
return overlay;
524524
}
525525
}
526+
527+
function withNormalSize(metadata: sharp.Metadata): sharp.Metadata {
528+
const o = Object.assign({}, metadata);
529+
if ((metadata.orientation || 0) >= 5) {
530+
o.width = o.height;
531+
o.height = o.width;
532+
}
533+
return o;
534+
}

0 commit comments

Comments
 (0)