Skip to content

Commit c0cd985

Browse files
authored
Merge pull request #231 from Marv51/load-from-imagesharp
Add option to create ImageSource directly from ImageSharp image
2 parents 92b530a + 881a4e0 commit c0cd985

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

PdfSharpCore.Test/CreateSimplePDF.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
using PdfSharpCore.Drawing;
66
using PdfSharpCore.Pdf;
77
using PdfSharpCore.Test.Helpers;
8+
using PdfSharpCore.Utils;
9+
using SixLabors.ImageSharp;
10+
using SixLabors.ImageSharp.PixelFormats;
11+
using SixLabors.ImageSharp.Processing;
812
using Xunit;
913

1014
namespace PdfSharpCore.Test
@@ -51,6 +55,32 @@ public void CreateTestPdfWithImage()
5155
ReadStreamAndVerifyPdfHeaderSignature(stream);
5256
}
5357

58+
[Fact]
59+
public void CreateTestPdfWithImageViaImageSharp()
60+
{
61+
using var stream = new MemoryStream();
62+
var document = new PdfDocument();
63+
64+
var pageNewRenderer = document.AddPage();
65+
66+
var renderer = XGraphics.FromPdfPage(pageNewRenderer);
67+
68+
// Load image for ImageSharp and apply a simple mutation:
69+
var image = Image.Load<Rgb24>(PathHelper.GetInstance().GetAssetPath("lenna.png"), out var format);
70+
image.Mutate(ctx => ctx.Grayscale());
71+
72+
// create XImage from that same ImageSharp image:
73+
var source = ImageSharpImageSource<Rgb24>.FromImageSharpImage(image, format);
74+
var img = XImage.FromImageSource(source);
75+
76+
renderer.DrawImage(img, new XPoint(0, 0));
77+
78+
document.Save(stream);
79+
stream.Position = 0;
80+
Assert.True(stream.Length > 1);
81+
ReadStreamAndVerifyPdfHeaderSignature(stream);
82+
}
83+
5484
private void SaveDocument(PdfDocument document, string name)
5585
{
5686
var outFilePath = GetOutFilePath(name);

PdfSharpCore/Utils/ImageSharpImageSource.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ namespace PdfSharpCore.Utils
1212
{
1313
public class ImageSharpImageSource<TPixel> : ImageSource where TPixel : unmanaged, IPixel<TPixel>
1414
{
15+
16+
public static IImageSource FromImageSharpImage(Image<TPixel> image, IImageFormat imgFormat, int? quality = 75)
17+
{
18+
var _path = "*" + Guid.NewGuid().ToString("B");
19+
return new ImageSharpImageSourceImpl<TPixel>(_path, image, (int)quality, imgFormat is PngFormat);
20+
}
21+
1522
protected override IImageSource FromBinaryImpl(string name, Func<byte[]> imageSource, int? quality = 75)
1623
{
1724
var image = Image.Load<TPixel>(imageSource.Invoke(), out IImageFormat imgFormat);

0 commit comments

Comments
 (0)