imazen/imageflow-dotnet

[Question] setting decode in variable does not seems to work

c23-cbu opened this issue · 2 comments

Hello,
first of all, congrats for this wrapper :)
not sure if it's an issue or my implementation but, when I set the result of decode function in a variable, I got only the basic image without watermark.

NOT Working:

       // Get File Stream
      var fileStream = File.OpenRead(filePath);
      var fileBytes = new byte[fileStream.Length];
      fileStream.Read(fileBytes, 0, fileBytes.Length);
      fileStream.Close();

      // Get Watermark Stream
      var watermarkStream = File.OpenRead(watermarkPath);
      var watermarkBytes = new byte[watermarkStream.Length];
      watermarkStream.Read(watermarkBytes, 0, watermarkBytes.Length);
      watermarkStream.Close();

      using var job = new ImageJob();
      var decode = job.Decode(fileBytes);
      decode.Watermark(new BytesSource(watermarkBytes),
          new WatermarkOptions()
            .SetMarginsLayout(
              new WatermarkMargins(WatermarkAlign.Image, 1, 1, 1, 1),
              WatermarkConstraintMode.Within,
              new ConstraintGravity(90, 90))
            .SetOpacity(0.5f)
            .SetHints(new ResampleHints().SetSharpen(15f, SharpenWhen.Always))
            .SetMinCanvasSize(1, 1));

      var result = await decode.EncodeToBytes(new MozJpegEncoder(80, true))
        .Finish().InProcessAsync();
      return result.First.TryGetBytes().Value.ToArray();

Working:

      // Get File Stream
      var fileStream = File.OpenRead(filePath);
      var fileBytes = new byte[fileStream.Length];
      fileStream.Read(fileBytes, 0, fileBytes.Length);
      fileStream.Close();

      // Get Watermark Stream
      var watermarkStream = File.OpenRead(watermarkPath);
      var watermarkBytes = new byte[watermarkStream.Length];
      watermarkStream.Read(watermarkBytes, 0, watermarkBytes.Length);
      watermarkStream.Close();

      using var job = new ImageJob();
      var decode = await job.Decode(fileBytes)
        .Watermark(new BytesSource(watermarkBytes),
          new WatermarkOptions()
            .SetMarginsLayout(
              new WatermarkMargins(WatermarkAlign.Image, 1, 1, 1, 1),
              WatermarkConstraintMode.Within,
              new ConstraintGravity(90, 90))
            .SetOpacity(0.5f)
            .SetHints(new ResampleHints().SetSharpen(15f, SharpenWhen.Always))
            .SetMinCanvasSize(1, 1))
        .EncodeToBytes(new MozJpegEncoder(80, true))
        .Finish().InProcessAsync();
      return decode.First.TryGetBytes().Value.ToArray();

Any idea what is going wrong ?
Thanks

edit: highlighting code

Exact, it works like a charm. Thanks a lot @lilith